src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -23,7 +23,7 @@ @ApiModel public class ApproveProcess{ /** * * */ @TableId(type = IdType.AUTO) private Long id; @@ -134,6 +134,13 @@ /** * 审批类型 * 0: "协同审批管理表", * 1: "公出管理审批表", * 2: "请假管理审批表", * 3: "出差管理审批表", * 4: "报销管理审批表", * 5: "采购申请审批表", * 6: "销售订单审批表", */ private Integer approveType; @@ -151,4 +158,4 @@ private static final long serialVersionUID = 1L; } } 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; @@ -13,8 +14,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; @@ -35,6 +40,12 @@ private ApproveNodeMapper approveNodeMapper; @Autowired private ApproveProcessMapper approveProcessMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private SysUserMapper sysUserMapper; @@ -136,6 +147,24 @@ approveProcess.setApproveUserCurrentName(approveNode1.getApproveNodeUser()); } approveProcessMapper.updateById(approveProcess); //如果是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); } } //如果是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){ src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -1,7 +1,9 @@ package com.ruoyi.purchase.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; @@ -9,11 +11,15 @@ import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.service.IPurchaseLedgerService; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerService; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -158,4 +164,13 @@ 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
@@ -181,4 +181,10 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败")//默认是1 private Integer approvalStatus; // 审批人 private String approveUserIds; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -153,5 +153,8 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败")//默认是1 private Integer approvalStatus; } src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -39,4 +39,6 @@ List<InvoiceRegistrationProduct> getProductBySalesNo(Long id); String getPurchaseNo(); PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto); } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -10,6 +10,8 @@ import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountExpenseService; import com.ruoyi.account.service.AccountIncomeService; 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 +76,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; @@ -178,6 +181,22 @@ // 5. 迁移临时文件到正式目录 if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds()); } //6.采购需要审批 //新增审批数据approve_process 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)); approveProcessVO.setApproveType(5);//5是采购申请 approveProcessVO.setApproveUser(purchaseLedger.getRecorderId());//录入人=申请人 approveProcessVO.setApproveUserIds(purchaseLedgerDto.getApproveUserIds());//审批人 try { approveProcessService.addApprove(approveProcessVO); } catch (Exception e) { e.printStackTrace(); } return 1; @@ -513,6 +532,32 @@ return purchaseNo + String.format("%03d", sequence); } @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; } /** * 下划线命名转驼峰命名 */ src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -12,6 +12,7 @@ import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.mapper.InvoiceLedgerMapper; @@ -305,4 +306,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,13 @@ @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
@@ -125,5 +125,11 @@ @ApiModelProperty(value = "付款方式") private String paymentMethod; @ApiModelProperty(value = "订单按紧急程度分类(普通/紧急)") private String salesType; @ApiModelProperty(value = "1-待审核,2-审批中,3-审批通过,4-审批失败")//默认是1 private Integer approvalStatus; } src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; @@ -35,4 +36,6 @@ List<MonthlyAmountDto> getAmountHalfYear(Integer type); IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); SalesLedgerDto getSalesByCode(SalesLedgerDto salesLedgerDto); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -11,6 +11,8 @@ import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountIncomeService; 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; @@ -23,6 +25,8 @@ import com.ruoyi.production.pojo.SalesLedgerScheduling; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.mapper.*; @@ -36,6 +40,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,6 +51,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.YearMonth; @@ -68,6 +74,8 @@ private final AccountIncomeService accountIncomeService; private final SalesLedgerMapper salesLedgerMapper; private final IApproveProcessService approveProcessService; private final CustomerMapper customerMapper; @@ -431,12 +439,60 @@ 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)); approveProcessVO.setApproveType(6);//6是销售台账 approveProcessVO.setApproveUser(Long.parseLong(salesLedger.getEntryPerson()));//录入人=申请人 approveProcessVO.setApproveUserIds(salesLedgerDto.getApproveUserIds());//审批人 try { approveProcessService.addApprove(approveProcessVO); } catch (Exception e) { e.printStackTrace(); } }else { //紧急默认通过 salesLedger.setApprovalStatus(3); 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
@@ -21,6 +21,7 @@ pl.contract_amount-sum(pr.tickets_amount) AS unReceipt_payment_amount, pl.entry_date, pl.recorder_name, pl.approval_status, pl.payment_method from purchase_ledger pl left join product_record pr on pl.id = pr.purchase_ledger_id @@ -43,6 +44,9 @@ </if> <if test="c.entryDateEnd != null and c.entryDateEnd != '' "> AND pl.entry_date <= DATE_FORMAT(#{c.entryDateEnd},'%Y-%m-%d') </if> <if test="c.approvalStatus != null"> and pl.approval_status =#{c.approvalStatus} </if> </where> group by pl.id, pl.purchase_contract_number, pl.sales_contract_no, pl.supplier_name, @@ -70,4 +74,4 @@ WHERE T4.id = #{id} </select> </mapper> </mapper> src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -10,7 +10,7 @@ WHERE sales_contract_no LIKE CONCAT('%',#{datePart},'%') </select> <select id="getSalesNo" resultType="com.ruoyi.sales.pojo.SalesLedger"> </select> <select id="selectSalesLedgerList" resultType="com.ruoyi.sales.pojo.SalesLedger"> @@ -57,6 +57,8 @@ T1.tenant_id, T1.contract_amount, T1.execution_date, T1.approval_status, T1.sales_type, T2.nick_name AS entry_person_name, T1.payment_method FROM @@ -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> </select> </mapper> </mapper>