From f8c7e851de2020a2835b52e9fe6b8a602f383b42 Mon Sep 17 00:00:00 2001 From: xuyuncong <3422692813@qq.com> Date: Thu, 23 Oct 2025 11:43:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/BaseCompanyAccountController.java | 101 ++++++++++ .../account/entity/BaseCompanyAccount.java | 49 +++++ .../mapper/BaseCompanyAccountMapper.java | 18 ++ .../service/IBaseCompanyAccountService.java | 16 ++ .../impl/BaseCompanyAccountServiceImpl.java | 20 ++ .../admin/BaseChargeCompanyController.java | 15 ++ .../entity/BaseChargeCompany.java | 2 +- .../mapper/BaseCompanyAccountMapper.xml | 19 ++ .../iocoder/yudao/common/RecordTypeEnum.java | 4 + .../admin/DlRepairTicketsController.java | 175 +++++++++++++++++- .../tickets/entity/DlRepairTickets.java | 2 + .../module/tickets/entity/DlRepairTitem.java | 7 + .../tickets/mapper/DlRepairTicketsMapper.java | 3 +- .../service/DlRepairTicketsService.java | 10 +- .../impl/DlRepairTicketsServiceImpl.java | 30 ++- .../tickets/vo/DlRepairTicketsReqVO.java | 3 + .../tickets/vo/DlRepairTicketsRespVO.java | 3 + .../tickets/vo/TicketsSettlementVO.java | 4 +- .../mapper/tickets/DlRepairTicketsMapper.xml | 124 ++++++------- .../excel/core/util/ExcelExtraHelper.java | 8 +- 20 files changed, 536 insertions(+), 77 deletions(-) create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/module/account/controller/admin/BaseCompanyAccountController.java create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/module/account/entity/BaseCompanyAccount.java create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/module/account/mapper/BaseCompanyAccountMapper.java create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/IBaseCompanyAccountService.java create mode 100644 dl-module-company/src/main/java/cn/iocoder/yudao/module/account/service/impl/BaseCompanyAccountServiceImpl.java create mode 100644 dl-module-company/src/main/resources/mapper/BaseCompanyAccountMapper.xml 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 drt.*,rorder.pay_time AS payTime,rorder.receivables_account AS receivablesAccount + ,drr.other_data AS settlementStr + FROM dl_repair_tickets drt - LEFT JOIN repair_order_info rorder ON rorder.goods_id = drt.id - + LEFT JOIN repair_order_info rorder ON rorder.goods_id = drt.id + LEFT JOIN dl_repair_records drr ON drt.id = drr.ticket_id AND drr.type = 'jssq' + drt.deleted = '0' - - and drt.tickets_status in ('08', #{map.ticketsStatus}) - + + and drt.tickets_status in ('08', #{map.ticketsStatus}) + - - and drt.tickets_status = #{map.ticketsStatus} - + + and drt.tickets_status = #{map.ticketsStatus} + - - and (drt.tickets_status = #{map.ticketsStatus}) - - - and drt.pay_status = #{map.payStatus} - - - and ( - drt.ticket_no like concat('%', #{map.ticketNo}, '%') - or - drt.car_no like concat('%', #{map.ticketNo}, '%') - or - drt.user_name like concat('%', #{map.ticketNo}, '%') - or - drt.user_mobile like concat('%', #{map.ticketNo}, '%') - or - drt.remark like concat('%', #{map.ticketNo}, '%') - ) - - - AND (drt.create_time BETWEEN CONCAT(#{map.searchTimeArray[0]}, ' 00:00:00') AND CONCAT(#{map.searchTimeArray[1]}, ' 23:59:59')) - - - and drt.repair_type = #{map.repairType} - - - and drt.corp_id = #{map.corpId} - - - and drt.user_id = #{map.userId} - - - and drt.tickets_work_status = #{map.ticketsWorkStatus} - + + and (drt.tickets_status = #{map.ticketsStatus}) + + + and drt.pay_status = #{map.payStatus} + + + and drt.pay_status in + + #{status} + + + + + and ( + drt.ticket_no like concat('%', #{map.ticketNo}, '%') + or + drt.car_no like concat('%', #{map.ticketNo}, '%') + or + drt.user_name like concat('%', #{map.ticketNo}, '%') + or + drt.user_mobile like concat('%', #{map.ticketNo}, '%') + or + drt.remark like concat('%', #{map.ticketNo}, '%') + ) + + + AND (drt.create_time BETWEEN CONCAT(#{map.searchTimeArray[0]}, ' 00:00:00') AND + CONCAT(#{map.searchTimeArray[1]}, ' 23:59:59')) + + + and drt.repair_type = #{map.repairType} + + + and drt.corp_id = #{map.corpId} + + + and drt.user_id = #{map.userId} + + + and drt.tickets_work_status = #{map.ticketsWorkStatus} + order by drt.create_time desc @@ -393,26 +405,10 @@ 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