diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/controller/admin/BaseCompanyAccountController.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/controller/admin/BaseCompanyAccountController.java
new file mode 100644
index 00000000..62609d3d
--- /dev/null
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/controller/admin/BaseCompanyAccountController.java
@@ -0,0 +1,101 @@
+package cn.iocoder.yudao.module.account.controller.admin;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.account.entity.BaseCompanyAccount;
+import cn.iocoder.yudao.module.account.service.IBaseCompanyAccountService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+
+/**
+ *
+ * 收款账户表 前端控制器
+ *
+ *
+ * @author 许
+ * @since 2025-10-22
+ */
+@RestController
+@RequestMapping("/base-company-account")
+@RequiredArgsConstructor
+public class BaseCompanyAccountController {
+
+ private final IBaseCompanyAccountService baseCompanyAccountService;
+
+ /**
+ * 分页查询收款账户
+ * @param request 查询条件
+ * @param pageNo 页码
+ * @param pageSize 每页数量
+ * @return 分页结果
+ */
+ @GetMapping("/page")
+ public CommonResult> page(BaseCompanyAccount request,
+ @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+ Page page = new Page<>(pageNo, pageSize);
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+
+ // 根据账户名称模糊查询
+ if (ObjectUtil.isNotEmpty(request.getAccountName())) {
+ wrapper.like(BaseCompanyAccount::getAccountName, request.getAccountName());
+ }
+
+ // 根据账户号码模糊查询
+ if (ObjectUtil.isNotEmpty(request.getAccountNumber())) {
+ wrapper.like(BaseCompanyAccount::getAccountNumber, request.getAccountNumber());
+ }
+
+ // 根据系统标识查询
+ if (ObjectUtil.isNotEmpty(request.getSystemCode())) {
+ wrapper.eq(BaseCompanyAccount::getSystemCode, request.getSystemCode());
+ }
+
+ wrapper.orderByDesc(BaseCompanyAccount::getId);
+ return CommonResult.success(baseCompanyAccountService.page(page, wrapper));
+ }
+
+ /**
+ * 创建收款账户
+ * @param request 账户信息
+ * @return 是否成功
+ */
+ @PostMapping("/create")
+ public CommonResult> create(@RequestBody BaseCompanyAccount request) {
+ return CommonResult.success(baseCompanyAccountService.save(request));
+ }
+
+ /**
+ * 更新收款账户
+ * @param request 账户信息
+ * @return 是否成功
+ */
+ @PutMapping("/update")
+ public CommonResult> update(@RequestBody BaseCompanyAccount request) {
+ return CommonResult.success(baseCompanyAccountService.updateById(request));
+ }
+
+ /**
+ * 删除收款账户
+ * @param id 账户ID
+ * @return 是否成功
+ */
+ @DeleteMapping("/delete")
+ public CommonResult> delete(Long id) {
+ return CommonResult.success(baseCompanyAccountService.removeById(id));
+ }
+
+ /**
+ * 根据ID获取收款账户详情
+ * @param id 账户ID
+ * @return 账户详情
+ */
+ @GetMapping("/get")
+ public CommonResult> get(Long id) {
+ return CommonResult.success(baseCompanyAccountService.getById(id));
+ }
+}
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/entity/BaseCompanyAccount.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/entity/BaseCompanyAccount.java
new file mode 100644
index 00000000..e7c122a0
--- /dev/null
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/entity/BaseCompanyAccount.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.account.entity;
+
+import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 收款账户表
+ *
+ *
+ * @author 许
+ * @since 2025-10-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("base_company_account")
+public class BaseCompanyAccount extends TenantBaseDO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 账户ID
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 账户名称
+ */
+ private String accountName;
+
+ /**
+ * 账户号码
+ */
+ private String accountNumber;
+
+ /**
+ * 系统标识
+ */
+ private String systemCode;
+}
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/mapper/BaseCompanyAccountMapper.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/mapper/BaseCompanyAccountMapper.java
new file mode 100644
index 00000000..8b6fed39
--- /dev/null
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/mapper/BaseCompanyAccountMapper.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.account.mapper;
+
+import cn.iocoder.yudao.module.account.entity.BaseCompanyAccount;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 收款账户表 Mapper 接口
+ *
+ *
+ * @author 许
+ * @since 2025-10-22
+ */
+@Mapper
+public interface BaseCompanyAccountMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/IBaseCompanyAccountService.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/IBaseCompanyAccountService.java
new file mode 100644
index 00000000..57c5c4b8
--- /dev/null
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/IBaseCompanyAccountService.java
@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.account.service;
+
+import cn.iocoder.yudao.module.account.entity.BaseCompanyAccount;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 收款账户表 服务类
+ *
+ *
+ * @author 许
+ * @since 2025-10-22
+ */
+public interface IBaseCompanyAccountService extends IService {
+
+}
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/impl/BaseCompanyAccountServiceImpl.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/impl/BaseCompanyAccountServiceImpl.java
new file mode 100644
index 00000000..f3771885
--- /dev/null
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/impl/BaseCompanyAccountServiceImpl.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.account.service.impl;
+
+import cn.iocoder.yudao.module.account.entity.BaseCompanyAccount;
+import cn.iocoder.yudao.module.account.mapper.BaseCompanyAccountMapper;
+import cn.iocoder.yudao.module.account.service.IBaseCompanyAccountService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 收款账户表 服务实现类
+ *
+ *
+ * @author 许
+ * @since 2025-10-22
+ */
+@Service
+public class BaseCompanyAccountServiceImpl extends ServiceImpl implements IBaseCompanyAccountService {
+
+}
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/controller/admin/BaseChargeCompanyController.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/controller/admin/BaseChargeCompanyController.java
index eadd9f30..a03ec0bd 100644
--- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/controller/admin/BaseChargeCompanyController.java
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/controller/admin/BaseChargeCompanyController.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.chargeCompany.controller.admin;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.chargeCompany.entity.BaseChargeCompany;
import cn.iocoder.yudao.module.chargeCompany.service.IBaseChargeCompanyService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -93,4 +94,18 @@ public class BaseChargeCompanyController {
return CommonResult.success(baseChargeCompanyService.removeById(id));
}
+ /**
+ * @description : 审核挂账单位
+ * @author xyc
+ * @date 14:38 2025/10/22
+ * @param request {@link BaseChargeCompany}
+ * @return cn.iocoder.yudao.framework.common.pojo.CommonResult>
+ **/
+ @PutMapping("/review")
+ public CommonResult> review(@RequestBody BaseChargeCompany request){
+ request.setContactUserId(SecurityFrameworkUtils.getLoginUserId());
+ request.setContactUserName(SecurityFrameworkUtils.getLoginUserNickname());
+ return CommonResult.success(baseChargeCompanyService.updateById(request));
+ }
+
}
diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/entity/BaseChargeCompany.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/entity/BaseChargeCompany.java
index 1c548ea9..78a528af 100644
--- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/entity/BaseChargeCompany.java
+++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/chargeCompany/entity/BaseChargeCompany.java
@@ -75,7 +75,7 @@ public class BaseChargeCompany extends TenantBaseDO implements Serializable {
/**
* 对接人ID
*/
- private String contactUserId;
+ private Long contactUserId;
/**
* 对接人名称
diff --git a/dl-module-company/src/main/resources/mapper/BaseCompanyAccountMapper.xml b/dl-module-company/src/main/resources/mapper/BaseCompanyAccountMapper.xml
new file mode 100644
index 00000000..433132fb
--- /dev/null
+++ b/dl-module-company/src/main/resources/mapper/BaseCompanyAccountMapper.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java
index e20b94bd..31988908 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java
@@ -43,6 +43,10 @@ public enum RecordTypeEnum {
* 结算
*/
JS("js","结算"),
+ /**
+ * 反结算
+ */
+ FJS("fjs","反结算"),
/**
* 结束工单
*/
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java
index b8817999..1b8fd7b0 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java
@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO;
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets;
+import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem;
import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService;
import cn.iocoder.yudao.module.tickets.vo.*;
import com.alibaba.excel.EasyExcel;
@@ -101,7 +102,7 @@ public class DlRepairTicketsController {
public CommonResult> getTicketsPage(DlRepairTicketsReqVO repairTicketsReqVO,
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
- Page page = new Page<>(pageNo, pageSize);
+ Page page = new Page<>(pageNo, pageSize);
return success(dlRepairTicketsService.getTicketsPage(repairTicketsReqVO, page));
}
@@ -235,6 +236,19 @@ public class DlRepairTicketsController {
return CommonResult.ok();
}
+ /**
+ * @description : 反结算
+ * @author xyc
+ * @date 14:51 2025/10/22
+ * @param repairTicketsRespVO {@link DlRepairTicketsRespVO}
+ * @return cn.iocoder.yudao.framework.common.pojo.CommonResult>
+ **/
+ @PostMapping("/antiSettlement")
+ public CommonResult> antiSettlement(@RequestBody DlRepairTicketsRespVO repairTicketsRespVO) {
+ dlRepairTicketsService.antiSettlement(repairTicketsRespVO);
+ return CommonResult.ok();
+ }
+
/**
* @Author 许
* @Description 结算审批
@@ -727,10 +741,10 @@ public class DlRepairTicketsController {
public void exportByStatus(DlRepairTicketsReqVO repairTicketsReqVO, HttpServletResponse response)throws IOException{
int pageNo = 1, pageSize = 1000;
List list = new ArrayList<>();
- Page page = new Page<>(pageNo, pageSize);
+ Page page = new Page<>(pageNo, pageSize);
do {
- IPage ticketsPage = dlRepairTicketsService.getTicketsPage(repairTicketsReqVO, page);
- List records = ticketsPage.getRecords();
+ IPage ticketsPage = dlRepairTicketsService.getTicketsPage(repairTicketsReqVO, page);
+ List records = ticketsPage.getRecords();
if (CollUtil.isEmpty(records)){
break;
}
@@ -785,6 +799,159 @@ public class DlRepairTicketsController {
return CommonResult.ok();
}
+ /**
+ * 导出数据(合并单元格格式)
+ *
+ * @author Lingma
+ * @date 2025/10/23
+ * @param repairTicketsReqVO 请求对象
+ **/
+ @GetMapping("/exportMerged")
+ @Operation(summary = "导出数据(合并单元格格式)")
+ public void exportMergedData(DlRepairTicketsReqVO repairTicketsReqVO, HttpServletResponse response) throws IOException {
+ int pageNo = 1, pageSize = 1000;
+ Page page = new Page<>(pageNo, pageSize);
+ if (StringUtils.isEmpty(repairTicketsReqVO.getSelectType())) {
+ //查询类型为空,默认查待处理的
+ repairTicketsReqVO.setSelectType(RepairCons.TICKETS_WAITING);
+ }
+
+ List list = new ArrayList<>();
+ do {
+ IPage pageType = dlRepairTicketsService.getTicketsPage(repairTicketsReqVO, page);
+ List records = pageType.getRecords();
+ if (CollUtil.isEmpty(records)){
+ break;
+ }
+ List convertedRecords = records;
+ list.addAll(convertedRecords);
+ pageNo++;
+ page.setCurrent(pageNo);
+ } while (true);
+
+ if (CollUtil.isEmpty(list)) {
+ throw exception0(500, "没有数据可以导出");
+ }
+
+ // 获取字典数据
+ List repairTypeList = dictDataApi.getDictDataList(RepairDictConstants.REPAIR_TYPE);
+ List repairWorkTypeList = dictDataApi.getDictDataList(RepairDictConstants.REPAIR_WORK_TYPE);
+
+ // 转换为Map便于查找
+ Map repairTypeMap = repairTypeList.stream()
+ .collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel));
+ Map repairWorkTypeMap = repairWorkTypeList.stream()
+ .collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel));
+ Map repairItemTypeMap = new HashMap<>();
+ repairItemTypeMap.put("01", "项目");
+ repairItemTypeMap.put("02", "配件");
+
+ // 构建导出数据
+ List> rows = new ArrayList<>();
+
+ // 表头
+ rows.add(Arrays.asList(
+ "序号", "订单编号", "维修类别", "客户名称", "车牌号", "车系", "手机号",
+ "经办人姓名", "经办人电话", "合计金额", "参考毛利", "服务顾问",
+ "项目名称", "数量", "项目金额", "毛利", "毛利率", "类别", "班组",
+ "维修员工", "销售人员", "备注", "收款账号", "确认收款状态", "确认收款备注"
+ ));
+
+ int index = 1;
+ for (DlRepairTicketsRespVO ticket : list) {
+ // 获取工单项目列表
+ List itemList = ticket.getItemList();
+
+ // 如果没有项目,则至少添加一行显示工单基本信息
+ if (CollUtil.isEmpty(itemList)) {
+ List row = Arrays.asList(
+ String.valueOf(index++),
+ ticket.getTicketNo() != null ? ticket.getTicketNo() : "",
+ repairTypeMap.get(ticket.getRepairType()) != null ? repairTypeMap.get(ticket.getRepairType()) : "",
+ ticket.getUserName() != null ? ticket.getUserName() : "",
+ ticket.getCarNo() != null ? ticket.getCarNo() : "",
+ ticket.getCarBrandName() != null ? ticket.getCarBrandName() : "",
+ ticket.getUserMobile() != null ? ticket.getUserMobile() : "",
+ ticket.getHandleName() != null ? ticket.getHandleName() : "",
+ ticket.getHandleMobile() != null ? ticket.getHandleMobile() : "",
+ ticket.getTotalPrice() != null ? ticket.getTotalPrice().toString() : "0",
+ ticket.getProfit() != null ? ticket.getProfit().toString() : "0",
+ ticket.getAdviserName() != null ? ticket.getAdviserName() : "",
+ "", "", "", "", "", "", "", "", "", "",
+ ticket.getReceivablesAccount() != null ? ticket.getReceivablesAccount() : "",
+ "1".equals(ticket.getPayConfirm()) ? "已确认" : "未确认",
+ ticket.getPayConfirmRemark() != null ? ticket.getPayConfirmRemark() : ""
+ );
+ rows.add(row);
+ } else {
+ // 有项目时,第一行显示工单信息和第一个项目信息
+ DlRepairTitem firstItem = itemList.get(0);
+ List firstRow = Arrays.asList(
+ String.valueOf(index++),
+ ticket.getTicketNo() != null ? ticket.getTicketNo() : "",
+ repairTypeMap.get(ticket.getRepairType()) != null ? repairTypeMap.get(ticket.getRepairType()) : "",
+ ticket.getUserName() != null ? ticket.getUserName() : "",
+ ticket.getCarNo() != null ? ticket.getCarNo() : "",
+ ticket.getCarBrandName() != null ? ticket.getCarBrandName() : "",
+ ticket.getUserMobile() != null ? ticket.getUserMobile() : "",
+ ticket.getHandleName() != null ? ticket.getHandleName() : "",
+ ticket.getHandleMobile() != null ? ticket.getHandleMobile() : "",
+ ticket.getTotalPrice() != null ? ticket.getTotalPrice().toString() : "0",
+ ticket.getProfit() != null ? ticket.getProfit().toString() : "0",
+ ticket.getAdviserName() != null ? ticket.getAdviserName() : "",
+ firstItem.getItemName() != null ? firstItem.getItemName() : "",
+ firstItem.getItemCount() != null ? firstItem.getItemCount().toString() : "0",
+ firstItem.getItemMoney() != null ? firstItem.getItemMoney().toString() : "0",
+ firstItem.getItemProfit() != null ? firstItem.getItemProfit().toString() : "",
+ firstItem.getItemProfitRate() != null ? firstItem.getItemProfitRate().toString() : "",
+ "01".equals(firstItem.getItemType()) ? "公时" : "配件",
+ repairWorkTypeMap.get(firstItem.getWorkerType()) != null ? repairWorkTypeMap.get(firstItem.getWorkerType()) : "",
+ firstItem.getRepairNames() != null ? firstItem.getRepairNames() : "",
+ firstItem.getSaleName() != null ? firstItem.getSaleName() : "",
+ firstItem.getRemark() != null ? firstItem.getRemark() : "",
+ ticket.getReceivablesAccount() != null ? ticket.getReceivablesAccount() : "",
+ "1".equals(ticket.getPayConfirm()) ? "已确认" : "未确认",
+ ticket.getPayConfirmRemark() != null ? ticket.getPayConfirmRemark() : ""
+ );
+ rows.add(firstRow);
+
+ // 后续行只显示项目信息
+ for (int i = 1; i < itemList.size(); i++) {
+ DlRepairTitem item = itemList.get(i);
+ List row = Arrays.asList(
+ "", ticket.getTicketNo() != null ? ticket.getTicketNo() : "",
+ repairTypeMap.get(ticket.getRepairType()) != null ? repairTypeMap.get(ticket.getRepairType()) : "",
+ ticket.getUserName() != null ? ticket.getUserName() : "",
+ ticket.getCarNo() != null ? ticket.getCarNo() : "",
+ ticket.getCarBrandName() != null ? ticket.getCarBrandName() : "",
+ ticket.getUserMobile() != null ? ticket.getUserMobile() : "",
+ ticket.getHandleName() != null ? ticket.getHandleName() : "",
+ ticket.getHandleMobile() != null ? ticket.getHandleMobile() : "",
+ ticket.getTotalPrice() != null ? ticket.getTotalPrice().toString() : "0",
+ ticket.getProfit() != null ? ticket.getProfit().toString() : "0",
+ ticket.getAdviserName() != null ? ticket.getAdviserName() : "",
+ item.getItemName() != null ? item.getItemName() : "",
+ item.getItemCount() != null ? item.getItemCount().toString() : "0",
+ item.getItemMoney() != null ? item.getItemMoney().toString() : "0",
+ item.getItemProfit() != null ? item.getItemProfit().toString() : "",
+ item.getItemProfitRate() != null ? item.getItemProfitRate().toString() : "",
+ "01".equals(item.getItemType()) ? "公时" : "配件",
+ repairWorkTypeMap.get(item.getWorkerType()) != null ? repairWorkTypeMap.get(item.getWorkerType()) : "",
+ item.getRepairNames() != null ? item.getRepairNames() : "",
+ item.getSaleName() != null ? item.getSaleName() : "",
+ item.getRemark() != null ? item.getRemark() : "",
+ ticket.getReceivablesAccount() != null ? ticket.getReceivablesAccount() : "",
+ "1".equals(ticket.getPayConfirm()) ? "已确认" : "未确认",
+ ticket.getPayConfirmRemark() != null ? ticket.getPayConfirmRemark() : ""
+ );
+ rows.add(row);
+ }
+ }
+ }
+
+ ExcelUtils.exportExcel("维修工单明细", rows, CollUtil.newArrayList(12), response);
+ }
+
/**
* 格式化为百分比字符串
* @param value 值
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java
index 1ac9db90..54fcd805 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java
@@ -255,6 +255,8 @@ public class DlRepairTickets extends TenantBaseDO {
private String payConfirm;
/** 支付确认备注 */
private String payConfirmRemark;
+ /** 结算方式 方式 gz 挂账 xj 现结 */
+ private String settlementType;
/** 更新时上传的图片 */
@TableField(exist = false)
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTitem.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTitem.java
index fcd6c127..6920bbee 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTitem.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTitem.java
@@ -125,4 +125,11 @@ import lombok.EqualsAndHashCode;
* 备注
*/
private String remark;
+
+
+ @TableField(exist = false)
+ private String workerType;
+
+ @TableField(exist = false)
+ private String isLeads;
}
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java
index 4e9129b5..309dcfce 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.tickets.mapper;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsReqVO;
+import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,7 +29,7 @@ public interface DlRepairTicketsMapper extends BaseMapper {
* @date 20:51 2024/9/20
* @param repairTicketsReqVO 查询对象
**/
- IPage getTicketsPage(@Param("map") DlRepairTicketsReqVO repairTicketsReqVO, Page page);
+ IPage getTicketsPage(@Param("map") DlRepairTicketsReqVO repairTicketsReqVO, Page page);
/**
* 分类查询工单分页----待处理的
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java
index 80650c5c..df8271d4 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java
@@ -34,7 +34,7 @@ public interface DlRepairTicketsService extends IService {
* @author 小李
* @date 20:51 2024/9/20
**/
- IPage getTicketsPage(DlRepairTicketsReqVO repairTicketsReqVO, Page page);
+ IPage getTicketsPage(DlRepairTicketsReqVO repairTicketsReqVO, Page page);
/**
* 获得一个工单的详细信息
@@ -345,4 +345,12 @@ public interface DlRepairTicketsService extends IService {
* @Param [repairTicketsRespVO]
**/
void payConfirm(DlRepairTicketsRespVO repairTicketsRespVO);
+
+ /**
+ * @description : 反结算
+ * @author xyc
+ * @date 14:52 2025/10/22
+ * @param repairTicketsRespVO {@link DlRepairTicketsRespVO}
+ **/
+ void antiSettlement(DlRepairTicketsRespVO repairTicketsRespVO);
}
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java
index fc6be0a3..c7c9f80d 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java
@@ -393,8 +393,8 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getTicketsPage(DlRepairTicketsReqVO repairTicketsReqVO, Page page) {
- IPage ticketsPage = baseMapper.getTicketsPage(repairTicketsReqVO, page);
+ public IPage getTicketsPage(DlRepairTicketsReqVO repairTicketsReqVO, Page page) {
+ IPage ticketsPage = baseMapper.getTicketsPage(repairTicketsReqVO, page);
ticketsPage.getRecords().forEach(item -> {
if (ObjectUtil.isNotEmpty(item.getSettlementStr())) {
// 将json字符串转换成对象
@@ -759,6 +759,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate()
+ .eq(DlRepairTickets::getId, vo.getTicketId())
+ .set(DlRepairTickets::getSettlementType, vo.getSettlementType()));
+
/*添加结算数据*/
// 将vo转为json
String json = JSON.toJSONString(vo);
@@ -873,6 +879,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate()
+ .eq(DlRepairTickets::getId, vo.getTicketId())
+ .set(DlRepairTickets::getSettlementType, vo.getSettlementType()));
/*添加结算审核记录*/
// 将vo转为json
String json = JSON.toJSONString(vo);
@@ -999,6 +1009,22 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate()
+ .eq(DlRepairTickets::getId, repairTicketsRespVO.getId())
+ .set(DlRepairTickets::getPayStatus, "04"));
+ // 添加工单记录
+ repairRecordsService.saveRepairRecord(repairTicketsRespVO.getId(), null, RecordTypeEnum.FJS.getCode(), RecordTypeEnum.FJS.getName(), null, null);
+ }
+
// 获取已完成工单按维修类型分组的统计(优化版本)
private Map getOverStatsByRepairType(String startDate, String endDate) {
// 直接使用 mapper 查询已完成工单并按 repairType 分组
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java
index 5b719a66..a21149a9 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java
@@ -67,4 +67,7 @@ public class DlRepairTicketsReqVO extends DlRepairTickets {
/** 支付状态 receivable:应收款 receivedAmount:已收款 pendingAmount:代收款 */
private String payStatus;
+
+ /** 支付状态集和 */
+ private List payStatuses;
}
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java
index f493f856..c167f4a7 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java
@@ -94,4 +94,7 @@ public class DlRepairTicketsRespVO extends DlRepairTickets {
/** 是否支付 */
private String isPaid;
+
+ /** 收款账户 */
+ private String receivablesAccount;
}
diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/TicketsSettlementVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/TicketsSettlementVO.java
index db118146..372dc8e4 100644
--- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/TicketsSettlementVO.java
+++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/TicketsSettlementVO.java
@@ -44,7 +44,7 @@ public class TicketsSettlementVO {
private Long chargeCompanyId;
/**
- * 支付方式 gz 挂账 xj 现结
+ * 结算方式 gz 挂账 xj 现结
*/
- private String payType;
+ private String settlementType;
}
diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml
index a613114e..e2c329ed 100644
--- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml
+++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml
@@ -81,6 +81,8 @@
+
+
@@ -197,61 +199,71 @@
-
- select drti.id ,
- drti.ticket_id ,
- drti.item_name ,
- drti.item_count ,
- drti.item_unit ,
- drti.item_price ,
- drti.item_discount ,
- drti.item_money ,
- drti.repair_ids ,
- drti.repair_names ,
- drti.sale_id ,
- drti.sale_name ,
- drti.item_type ,
- drti.project_id ,
- drti.part_id ,
- drti.other_id ,
- drti.item_type_id ,
- drti.item_status ,
- drti.remark
+ select drti.*,drw.work_type AS workerType
from dl_repair_titem drti
+ LEFT JOIN dl_repair_worker drw
+ ON FIND_IN_SET(drw.user_id, drti.repair_ids) > 0 AND drw.deleted = '0'
where drti.ticket_id = #{id} AND drti.deleted = '0'
diff --git a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelExtraHelper.java b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelExtraHelper.java
index 99b9bc1c..f8e54dac 100644
--- a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelExtraHelper.java
+++ b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelExtraHelper.java
@@ -47,6 +47,8 @@ public class ExcelExtraHelper {
// ============ 5. 根据内容自动调节列宽 ============
int colSize = rows.get(0).size();
int[] maxLength = new int[colSize];
+ // Excel最大列宽限制为255个字符
+ int maxColumnWidth = 255;
for (List row : rows) {
for (int colIndex = 0; colIndex < colSize; colIndex++) {
@@ -60,7 +62,9 @@ public class ExcelExtraHelper {
}
}
for (int i = 0; i < colSize; i++) {
- writer.setColumnWidth(i, maxLength[i] + 2);
+ // 限制最大列宽不超过255个字符,避免POI抛出异常
+ int columnWidth = Math.min(maxLength[i] + 2, maxColumnWidth);
+ writer.setColumnWidth(i, columnWidth);
}
// ============ 6. 设置时间列 & 数字列格式 ============
@@ -101,4 +105,4 @@ public class ExcelExtraHelper {
}
return length;
}
-}
+}
\ No newline at end of file