src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -125,9 +125,14 @@ // @TableField(fill = FieldFill.INSERT) private Long tenantId; /** * 审批类型 */ /** * 审批类型 * 0: "协同审批管理表", * 1: "公出管理审批表", * 2: "请假管理审批表", * 3: "出差管理审批表", * 4: "报销管理审批表", * 5: "采购申请审批表", * 6: "销售订单审批表", */ private Integer approveType; /** src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.mapper.ApproveNodeMapper; import com.ruoyi.approve.mapper.ApproveProcessMapper; @@ -15,8 +16,12 @@ import com.ruoyi.other.service.impl.TempFileServiceImpl; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +44,12 @@ private ApproveProcessMapper approveProcessMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private TempFileServiceImpl tempFileService; @@ -145,16 +156,26 @@ } approveProcessMapper.updateById(approveProcess); DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId()); if(deviceRepair == null) throw new RuntimeException("设备报修不存在"); if(approveProcess.getApproveStatus().equals(2)){ // 同意 deviceRepair.setStatus(1); }else if(approveProcess.getApproveStatus().equals(3)){ // 拒绝 deviceRepair.setStatus(2); //如果是6销售审批,对应销售关联的表需要更新 if (approveProcess.getApproveType()==6){ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(Wrappers. <SalesLedger>lambdaQuery().eq(SalesLedger::getSalesContractNo, approveProcess.getApproveReason())); if (!CollectionUtils.isEmpty(salesLedgers)){ SalesLedger salesLedger = salesLedgers.get(0); salesLedger.setApprovalStatus(status); salesLedgerMapper.updateById(salesLedger); } deviceRepairMapper.updateById(deviceRepair); } //如果是5采购审批,对应采购关联的表需要更新 if (approveProcess.getApproveType()==5){ List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(Wrappers.<PurchaseLedger>lambdaQuery().eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason())); if (!CollectionUtils.isEmpty(purchaseLedgers)){ PurchaseLedger purchaseLedger = purchaseLedgers.get(0); purchaseLedger.setApprovalStatus(status); purchaseLedgerMapper.updateById(purchaseLedger); } } // 绑定附件 if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){ tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue()); src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -200,4 +200,12 @@ public AjaxResult createPurchaseNo() { return AjaxResult.success("生成成功",purchaseLedgerService.getPurchaseNo()); } /** * 根据采购合同号查询详情 */ @GetMapping("/getPurchaseByCode") public AjaxResult getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) { return AjaxResult.success(purchaseLedgerService.getPurchaseByCode(purchaseLedgerDto)); } } src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -185,10 +185,15 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty("审批状态") private Integer approvalStatus; @ApiModelProperty(value = "模板名称") private String templateName; @ApiModelProperty(value = "审批人id") private Integer approverId; @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交")//默认是0 private Integer approvalStatus; // 审批人 private String approveUserIds; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -150,7 +150,9 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty("审批状态") @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交") //默认是0 private Integer approvalStatus; @ApiModelProperty(value = "模板名称") src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -41,4 +41,6 @@ String getPurchaseNo(); int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto); PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto); } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -10,6 +10,9 @@ import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountExpenseService; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.mapper.SupplierManageMapper; @@ -74,6 +77,7 @@ public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService { private final AccountExpenseService accountExpenseService; private final PurchaseLedgerMapper purchaseLedgerMapper; private final IApproveProcessService approveProcessService; private final SalesLedgerMapper salesLedgerMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; @@ -211,6 +215,26 @@ // 5. 迁移临时文件到正式目录 if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds()); } //6.采购需要审批 //新增审批数据 ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveDeptId(purchaseLedger.getTenantId()); //审批理由是采购合同号用这个来关联 approveProcessVO.setApproveReason(purchaseLedger.getPurchaseContractNumber()); DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); approveProcessVO.setApproveTime(LocalDate.now().format(dateFormat)); //5是采购申请 approveProcessVO.setApproveType(5); //录入人=申请人 approveProcessVO.setApproveUser(purchaseLedger.getRecorderId()); //审批人 approveProcessVO.setApproveUserIds(purchaseLedgerDto.getApproveUserIds()); try { approveProcessService.addApprove(approveProcessVO); } catch (Exception e) { e.printStackTrace(); } return 1; @@ -392,6 +416,23 @@ LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids); productRecordMapper.delete(productRecordLambdaQueryWrapper); // 删除关联的审批表 List<String> strings = purchaseLedgerMapper.selectBatchIds(Arrays.asList(ids)).stream() .map(PurchaseLedger::getPurchaseContractNumber) .distinct() .collect(Collectors.toList()); List<ApproveProcess> list = approveProcessService.list(Wrappers.<ApproveProcess>lambdaQuery().eq(ApproveProcess::getApproveType, 5) .in(ApproveProcess::getApproveReason, strings)); if (CollectionUtils.isNotEmpty(list)){ List<String> approveIds = list.stream() .map(ApproveProcess::getApproveId) .distinct() .collect(Collectors.toList()); Long[] ides = approveIds.stream() .filter(s -> s != null && !s.isEmpty()) .map(Long::valueOf) .toArray(Long[]::new); approveProcessService.delApprove(ides); } // 批量删除采购台账 return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids)); } @@ -475,6 +516,26 @@ } @Override public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) { // 1. 查询主表 PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber()) .last("LIMIT 1")); if (purchaseLedger == null) { throw new BaseException("采购台账不存在"); } // 2. 查询子表 LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()) .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); // 4. 转换 DTO PurchaseLedgerDto resultDto = new PurchaseLedgerDto(); BeanUtils.copyProperties(purchaseLedger, resultDto); if (!products.isEmpty()) { resultDto.setHasChildren(true); resultDto.setProductData(products); } return resultDto; } @Override public List getPurchasesNo() { LambdaQueryWrapper<PurchaseLedger> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.select(PurchaseLedger::getId, PurchaseLedger::getPurchaseContractNumber, PurchaseLedger::getSupplierId); src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -312,4 +312,12 @@ } return AjaxResult.error("该产品库存不足"); } /** * 根据采购合同号查询详情 */ @GetMapping("/getSalesByCode") public AjaxResult getSalesByCode(SalesLedgerDto salesLedgerDto) { return AjaxResult.success(salesLedgerService.getSalesByCode(salesLedgerDto)); } } src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -54,4 +54,14 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "订单按紧急程度分类(普通/紧急)") private String salesType; @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败") //默认是1 private Integer approvalStatus; // 审批人 private String approveUserIds; } src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -129,5 +129,12 @@ @TableField(exist = false) @ApiModelProperty(value = "生产状态") private String productionStatus = "未开始"; @ApiModelProperty(value = "订单按紧急程度分类(普通/紧急)") private String salesType; @ApiModelProperty(value = "0-待审核,1-审批中,2-审批通过,3-审批不通过,4-已重新提交") //默认是0 private Integer approvalStatus; } src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -34,5 +34,7 @@ List<MonthlyAmountDto> getAmountHalfYear(Integer type); SalesLedgerDto getSalesByCode(SalesLedgerDto salesLedgerDto); IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -11,6 +11,9 @@ import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.common.enums.FileNameType; @@ -82,6 +85,8 @@ private final InvoiceLedgerMapper invoiceLedgerMapper; private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper; private final IApproveProcessService approveProcessService; @Autowired private SysDeptMapper sysDeptMapper; @@ -362,7 +367,27 @@ LambdaQueryWrapper<SalesLedgerScheduling> in = new LambdaQueryWrapper<SalesLedgerScheduling>() .in(SalesLedgerScheduling::getSalesLedgerId, idList); salesLedgerSchedulingMapper.delete(in); // 2. 再删除主表数据 // 2. 删除关联的审批表 List<String> strings = salesLedgerMapper.selectBatchIds(idList) .stream() .map(SalesLedger::getSalesContractNo) .distinct() .collect(Collectors.toList()); List<ApproveProcess> list = approveProcessService.list(Wrappers.<ApproveProcess>lambdaQuery() .eq(ApproveProcess::getApproveType, 6) .in(ApproveProcess::getApproveReason, strings)); if (CollectionUtils.isNotEmpty(list)){ List<String> approveIds = list .stream() .map(ApproveProcess::getApproveId) .distinct() .collect(Collectors.toList()); Long[] ides = approveIds .stream() .filter(s -> s != null && !s.isEmpty()) .map(Long::valueOf) .toArray(Long[]::new); approveProcessService.delApprove(ides); } // 3. 再删除主表数据 return salesLedgerMapper.deleteBatchIds(idList); } @@ -432,12 +457,57 @@ if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(salesLedger.getId(), salesLedgerDto.getTempFileIds()); } //6.销售订单按紧急程度分类,如普通订单以及紧急订单;普通订单需流转至业务单据进行审批,紧急订单无需审批。 if (salesLedger.getSalesType().equals("普通")){ //新增审批数据approve_process ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveDeptId(salesLedger.getTenantId()); approveProcessVO.setApproveReason(salesLedger.getSalesContractNo()); //审批理由是销售合同号用这个来关联 DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); approveProcessVO.setApproveTime(LocalDate.now().format(dateFormat)); //6是销售台账 approveProcessVO.setApproveType(6); //录入人=申请人 approveProcessVO.setApproveUser(Long.parseLong(salesLedger.getEntryPerson())); approveProcessVO.setApproveUserIds(salesLedgerDto.getApproveUserIds());//审批人 try { approveProcessService.addApprove(approveProcessVO); } catch (Exception e) { e.printStackTrace(); } }else { //紧急默认通过 salesLedger.setApprovalStatus(2); salesLedgerMapper.updateById(salesLedger); } return 1; } catch (IOException e) { throw new BaseException("文件迁移失败: " + e.getMessage()); } } @Override public SalesLedgerDto getSalesByCode(SalesLedgerDto salesLedgerDto) { // 1. 查询主表 SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>() .eq(SalesLedger::getSalesContractNo, salesLedgerDto.getSalesContractNo()) .last("LIMIT 1")); if (salesLedger == null) { throw new BaseException("销售台账不存在"); } // 2. 查询子表 LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()) .eq(SalesLedgerProduct::getType, 1); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); // 4. 转换 DTO SalesLedgerDto resultDto = new SalesLedgerDto(); BeanUtils.copyProperties(salesLedger, resultDto); if (!products.isEmpty()) { resultDto.setHasChildren(true); resultDto.setProductData(products); } return resultDto; } // 文件迁移方法 /** src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -39,8 +39,8 @@ <if test="c.supplierName != null and c.supplierName != ''"> and pl.supplier_name like concat('%',#{c.supplierName},'%') </if> <if test="c.ApprovalStatus != null and c.ApprovalStatus != ''"> and pl.approval_status = #{c.ApprovalStatus} <if test="c.approvalStatus != null and c.approvalStatus != ''"> and pl.approval_status = #{c.approvalStatus} </if> <if test="c.salesContractNo != null and c.salesContractNo != ''"> and pl.sales_contract_no like concat('%',#{c.salesContractNo},'%') src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -56,6 +56,8 @@ T1.attachment_materials, T1.tenant_id, T1.contract_amount, T1.approval_status, T1.sales_type, T1.execution_date, T2.nick_name AS entry_person_name, T1.payment_method @@ -81,6 +83,9 @@ <if test="salesLedgerDto.entryDateEnd != null and salesLedgerDto.entryDateEnd != '' "> AND T1.entry_date <= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d') </if> <if test="salesLedgerDto.approvalStatus != null"> AND T1.approval_status =#{salesLedgerDto.approvalStatus} </if> </where> order by T1.entry_date desc </select>