src/main/java/com/ruoyi/CodeGenerator.java
@@ -19,11 +19,11 @@ // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å ¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ public class CodeGenerator { public static String database_url = "jdbc:mysql://1.15.17.182:9999/product-inventory-management-new"; public static String database_url = "jdbc:mysql://localhost:3306/product-inventory-management-new"; public static String database_username = "root"; public static String database_password= "xd@123456.."; public static String database_password= "123456"; public static String author = "è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸"; public static String model = "stock"; // 模å public static String model = "purchase"; // 模å public static String setParent = "com.ruoyi."+ model; // å è·¯å¾ public static String tablePrefix = ""; // è®¾ç½®è¿æ»¤è¡¨åç¼ public static void main(String[] args) { src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -115,8 +115,8 @@ @DeleteMapping("/deleteIds") @ApiOperation(value = "å é¤å®¡æ¹") @Transactional(rollbackFor = Exception.class) public AjaxResult deleteIds(@RequestBody Long[] ids) { if (ids == null || ids.length == 0) { public AjaxResult deleteIds(@RequestBody List<Long> ids) { if (ids == null || ids.size() == 0) { return AjaxResult.warn("åæ°ä¸è½ä¸ºç©º"); } approveProcessService.delApprove(ids); src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
@@ -17,5 +17,5 @@ void updateApproveNode(ApproveNode approveNode) throws IOException; void delApproveNodeByApproveId(Long id); void delApproveNodeByApproveId(String id); } src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -27,7 +27,7 @@ IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess); void delApprove(Long[] ids); void delApprove(List<Long> ids); void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) throws IOException; src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -19,6 +19,8 @@ import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.project.system.service.ISysNoticeService; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.SalesQuotationMapper; import com.ruoyi.sales.mapper.SalesQuotationProductMapper; @@ -61,10 +63,16 @@ private DeviceRepairMapper deviceRepairMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private SalesQuotationMapper salesQuotationMapper; @Autowired private ShippingInfoMapper shippingInfoMapper; @Autowired private CommonFileServiceImpl commonFileService; @@ -168,6 +176,26 @@ } deviceRepairMapper.updateById(deviceRepair); } //éè´å®¡æ ¸ if(approveProcess.getApproveType().equals(5)){ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() .eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason()) .last("limit 1")); if(purchaseLedger != null) { if (status.equals(2)) { // åæ purchaseLedger.setApprovalStatus(3); } else if (status.equals(3)) { // æç» purchaseLedger.setApprovalStatus(4); } else if (status.equals(1)) { // å®¡æ ¸ä¸ purchaseLedger.setApprovalStatus(2); } purchaseLedgerMapper.updateById(purchaseLedger); } } // é宿¥ä»·ç¶æä¿®æ¹ if(approveProcess.getApproveType().equals(6)){ SalesQuotation salesQuote = salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>() @@ -237,11 +265,17 @@ } @Override public void delApproveNodeByApproveId(Long id) { public void delApproveNodeByApproveId(String id) { List<ApproveNode> approveNodes = approveNodeMapper.selectList(new LambdaQueryWrapper<ApproveNode>() .eq(ApproveNode::getApproveProcessId, id)); UpdateWrapper<ApproveNode> queryWrapper = new UpdateWrapper<>(); queryWrapper.lambda().set(ApproveNode::getDeleteFlag, 1) .eq(ApproveNode::getApproveProcessId, id); update(queryWrapper); // å é¤éä»¶ for (ApproveNode approveNode : approveNodes) { commonFileService.deleteByBusinessId(approveNode.getId(), FileNameType.ApproveNode.getValue()); } } //审æ¹ç±»åè·å(ä¸å端页é¢å¯¹åº) src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -27,6 +27,7 @@ import com.ruoyi.project.system.service.ISysNoticeService; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; @@ -64,6 +65,7 @@ private final ApproveProcessMapper approveProcessMapper; private final TempFileServiceImpl tempFileService; private final CommonFileMapper commonFileMapper; private final CommonFileServiceImpl commonFileService; private final ISysNoticeService sysNoticeService; @Override @@ -153,19 +155,58 @@ return approveProcessIPage; } @Override public void delApprove(Long[] ids) { ApproveProcess approveProcess; public void delByIds(List<Long> ids) { for (Long approveId : ids) { // é»è¾å é¤å®¡æ¹æµç¨ update(new UpdateWrapper<ApproveProcess>() .lambda() .set(ApproveProcess::getApproveDelete, 1) .eq(ApproveProcess::getApproveId, approveId)); .eq(ApproveProcess::getId, approveId)); // å é¤å¯¹åºçéä»¶ commonFileService.deleteByBusinessId(approveId, FileNameType.ApproveProcess.getValue()); ApproveProcess approveProcess = approveProcessMapper.selectById(approveId); // å é¤å®¡æ¹èç¹ approveNodeService.delApproveNodeByApproveId(approveId); approveNodeService.delApproveNodeByApproveId(approveProcess.getApproveId()); // åªæ¥ææ°ä¸æ¡å®¡æ¹æµç¨ ApproveProcess latestProcess = approveProcessMapper.selectOne( new LambdaQueryWrapper<ApproveProcess>() .eq(ApproveProcess::getApproveId, approveId) .orderByDesc(ApproveProcess::getCreateTime) .last("LIMIT 1")); if (latestProcess == null) { continue; } // å é¤å¯¹åºçæ¶æ¯éç¥ sysNoticeService.remove(new LambdaQueryWrapper<SysNotice>() .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType())) .eq(SysNotice::getSenderId, latestProcess.getApproveUser()) .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId())); } } @Override public void delApprove(List<Long> ids) { for (Long approveId : ids) { ApproveProcess approveProcess = approveProcessMapper.selectOne(new LambdaQueryWrapper<ApproveProcess>() .eq(ApproveProcess::getApproveId, approveId) .eq(ApproveProcess::getApproveDelete, 0) .last("LIMIT 1")); // é»è¾å é¤å®¡æ¹æµç¨ update(new UpdateWrapper<ApproveProcess>() .lambda() .set(ApproveProcess::getApproveDelete, 1) .eq(ApproveProcess::getApproveId, approveId)); // å é¤å¯¹åºçéä»¶ commonFileService.deleteByBusinessId(approveProcess.getId(), FileNameType.ApproveProcess.getValue()); // å é¤å®¡æ¹èç¹ approveNodeService.delApproveNodeByApproveId(approveId.toString()); // åªæ¥ææ°ä¸æ¡å®¡æ¹æµç¨ ApproveProcess latestProcess = approveProcessMapper.selectOne( src/main/java/com/ruoyi/framework/security/service/TokenService.java
@@ -160,6 +160,7 @@ loginUser.setLoginTime(System.currentTimeMillis()); loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); loginUser.setDeptIds(getDeptIdsByUserId(loginUser.getUserId())); loginUser.setCurrentDeptId(loginUser.getDeptIds()[0]); // æ ¹æ®uuidå°loginUserç¼å String userKey = getTokenKey(loginUser.getToken()); redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -11,7 +11,11 @@ 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.PurchaseLedgerTemplateMapper; import com.ruoyi.purchase.mapper.SalesLedgerProductTemplateMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate; import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate; import com.ruoyi.purchase.service.IPurchaseLedgerService; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; @@ -37,12 +41,16 @@ @RestController @RequestMapping("/purchase/ledger") @AllArgsConstructor @Api(tags = "111") @Api(tags = "éè´å°è´¦") public class PurchaseLedgerController extends BaseController { private IPurchaseLedgerService purchaseLedgerService; private ISalesLedgerService salesLedgerService; private ISalesLedgerProductService salesLedgerProductService; private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; /** * æ¥è¯¢éè´å°è´¦å表 @@ -84,34 +92,24 @@ */ @Log(title = "éè´å°è´¦", businessType = BusinessType.INSERT) @PostMapping("/addOrEditPurchase") public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException { public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws Exception { return toAjax(purchaseLedgerService.addOrEditPurchase(purchaseLedgerDto)); } /** * æ°å¢éè´æ¨¡æ¿ */ @PostMapping("/addPurchaseTemplate") public AjaxResult addPurchaseTemplate(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException { return toAjax(purchaseLedgerService.addPurchaseTemplate(purchaseLedgerDto)); } /** * æ¥è¯¢éè´æ¨¡æ¿ */ @ApiOperation("/2222") @ApiOperation("/æ¥è¯¢éè´æ¨¡æ¿") @GetMapping("/getPurchaseTemplateList") public AjaxResult getPurchaseTemplateList() { PurchaseLedgerDto purchaseLedgerDto = new PurchaseLedgerDto(); purchaseLedgerDto.setApprovalStatus(3); IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(new Page(1, -1), purchaseLedgerDto); List<PurchaseLedgerDto> purchaseLedgers = purchaseLedgerDtoIPage.getRecords(); List<PurchaseLedgerTemplate> purchaseLedgers = purchaseLedgerTemplateMapper.selectList(null); purchaseLedgers.forEach(purchaseLedgerDto1 -> { LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedgerDto1.getId()) .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> list = salesLedgerProductService.list(queryWrapper); LambdaQueryWrapper<SalesLedgerProductTemplate> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProductTemplate::getSalesLedgerId, purchaseLedgerDto1.getId()) .eq(SalesLedgerProductTemplate::getType, 2); List<SalesLedgerProductTemplate> list = salesLedgerProductTemplateMapper.selectList(queryWrapper); if (!list.isEmpty()) { purchaseLedgerDto1.setProductData(list); purchaseLedgerDto1.setProductList(list); } }); return AjaxResult.success(purchaseLedgers); @@ -194,27 +192,7 @@ */ @GetMapping("/listPage") public AjaxResult listPage(Page page, PurchaseLedgerDto purchaseLedger) { IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = Optional.ofNullable( purchaseLedgerService.selectPurchaseLedgerListPage(page, purchaseLedger) ).orElse(new Page<>()); // å¤çnull Optional.ofNullable(purchaseLedgerDtoIPage.getRecords()) .filter(CollectionUtils::isNotEmpty) .ifPresent(records -> { // è¿æ»¤approvalStatus=3çè®°å½ records.removeIf(dto -> dto != null && dto.getApprovalStatus() == 3); // ä¿®æ£æªæ¶ä»æ¬¾éé¢ records.forEach(dto -> { if (dto == null) return; BigDecimal unReceiptAmt = Optional.ofNullable(dto.getUnReceiptPaymentAmount()).orElse(BigDecimal.ZERO); if (unReceiptAmt.compareTo(BigDecimal.ZERO) == 0) { dto.setUnReceiptPaymentAmount(Optional.ofNullable(dto.getContractAmount()).orElse(BigDecimal.ZERO)); } }); }); return AjaxResult.success(purchaseLedgerDtoIPage); return AjaxResult.success(purchaseLedgerService.selectPurchaseLedgerListPage(page, purchaseLedger)); } @ApiOperation("çæéè´åºåå·") src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerTemplateController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,111 @@ package com.ruoyi.purchase.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.purchase.mapper.PurchaseLedgerTemplateMapper; import com.ruoyi.purchase.mapper.SalesLedgerProductTemplateMapper; import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate; import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate; import com.ruoyi.purchase.service.PurchaseLedgerTemplateService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; /** * <p> * éè´å°è´¦æ¨¡æ¿ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:21:44 */ @RestController @RequestMapping("/purchaseLedgerTemplate") @Api(tags = "éè´å°è´¦æ¨¡æ¿") public class PurchaseLedgerTemplateController { @Autowired private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; @Autowired private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; @PostMapping("/add") @Log(title = "æ·»å éè´å°è´¦æ¨¡æ¿", businessType = BusinessType.INSERT) @ApiOperation(value = "æ·»å éè´å°è´¦æ¨¡æ¿") public AjaxResult add(@RequestBody PurchaseLedgerDto purchaseLedgerDto) { // éè´æ¨¡æ¿ if(StringUtils.isNotEmpty(purchaseLedgerDto.getTemplateName())){ // 模æ¿åç§°ä¸è½éå¤ï¼æéå¤å°±ä¸éè¦æ°å¢äº PurchaseLedgerTemplate purchaseLedgerTemplate = purchaseLedgerTemplateMapper .selectOne(new LambdaQueryWrapper<PurchaseLedgerTemplate>() .eq(PurchaseLedgerTemplate::getTemplateName, purchaseLedgerDto.getTemplateName()) .last("limit 1")); if(purchaseLedgerTemplate == null){ purchaseLedgerTemplate = new PurchaseLedgerTemplate(); BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedgerTemplate); purchaseLedgerTemplate.setTemplateName(purchaseLedgerDto.getTemplateName()); purchaseLedgerTemplateMapper.insert(purchaseLedgerTemplate); // äº§åæ¨¡æ¿æ°å¢ PurchaseLedgerTemplate finalPurchaseLedgerTemplate = purchaseLedgerTemplate; purchaseLedgerDto.getProductData().forEach(product -> { SalesLedgerProductTemplate salesLedgerProductTemplate = new SalesLedgerProductTemplate(); BeanUtils.copyProperties(product, salesLedgerProductTemplate); salesLedgerProductTemplate.setSalesLedgerId(finalPurchaseLedgerTemplate.getId()); salesLedgerProductTemplate.setType(2); salesLedgerProductTemplateMapper.insert(salesLedgerProductTemplate); }); } } return AjaxResult.success(); } @DeleteMapping("/delete") @Log(title = "éè´å°è´¦æ¨¡æ¿", businessType = BusinessType.DELETE) @ApiOperation(value = "å é¤éè´å°è´¦æ¨¡æ¿") public AjaxResult delete(@RequestBody List<Long> id) { if(CollectionUtils.isEmpty(id)) return AjaxResult.error("è¯·éæ©è¦å é¤çéè´å°è´¦æ¨¡æ¿"); int result = purchaseLedgerTemplateMapper.deleteBatchIds(id); salesLedgerProductTemplateMapper.delete(new LambdaQueryWrapper<SalesLedgerProductTemplate>() .in(SalesLedgerProductTemplate::getSalesLedgerId, id)); return AjaxResult.success(result); } @PostMapping("/update") @Log(title = "ä¿®æ¹éè´å°è´¦æ¨¡æ¿", businessType = BusinessType.UPDATE) @ApiOperation(value = "ä¿®æ¹éè´å°è´¦æ¨¡æ¿") public AjaxResult update(@RequestBody PurchaseLedgerDto purchaseLedgerDto) { // 模æ¿åç§°ä¸è½éå¤ï¼æéå¤å°±ä¸éè¦æ°å¢äº PurchaseLedgerTemplate purchaseLedgerTemplate = purchaseLedgerTemplateMapper .selectOne(new LambdaQueryWrapper<PurchaseLedgerTemplate>() .eq(PurchaseLedgerTemplate::getTemplateName, purchaseLedgerDto.getTemplateName()) .last("limit 1")); if(purchaseLedgerTemplate != null){ BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedgerTemplate); purchaseLedgerTemplate.setTemplateName(purchaseLedgerDto.getTemplateName()); purchaseLedgerTemplateMapper.updateById(purchaseLedgerTemplate); // äº§åæ¨¡æ¿å é¤ salesLedgerProductTemplateMapper.delete(new LambdaQueryWrapper<SalesLedgerProductTemplate>() .in(SalesLedgerProductTemplate::getSalesLedgerId, purchaseLedgerTemplate.getId())); // äº§åæ¨¡æ¿æ°å¢ purchaseLedgerDto.getProductData().forEach(product -> { SalesLedgerProductTemplate salesLedgerProductTemplate = new SalesLedgerProductTemplate(); BeanUtils.copyProperties(product, salesLedgerProductTemplate); salesLedgerProductTemplate.setSalesLedgerId(purchaseLedgerTemplate.getId()); salesLedgerProductTemplateMapper.insert(salesLedgerProductTemplate); }); } return AjaxResult.success(); } } src/main/java/com/ruoyi/purchase/controller/SalesLedgerProductTemplateController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.purchase.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 产åä¿¡æ¯æ¨¡æ¿ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:22:23 */ @RestController @RequestMapping("/salesLedgerProductTemplate") public class SalesLedgerProductTemplateController { } src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -15,6 +15,12 @@ @Data public class PurchaseLedgerDto { /** * 审æ¹äººidå表 */ @ApiModelProperty(value = "审æ¹äººidå表") private String approveUserIds; private String entryDateStart; src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerTemplateMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.purchase.mapper; import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * éè´å°è´¦æ¨¡æ¿ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:21:44 */ @Mapper public interface PurchaseLedgerTemplateMapper extends BaseMapper<PurchaseLedgerTemplate> { } src/main/java/com/ruoyi/purchase/mapper/SalesLedgerProductTemplateMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.purchase.mapper; import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * 产åä¿¡æ¯æ¨¡æ¿ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:22:23 */ @Mapper public interface SalesLedgerProductTemplateMapper extends BaseMapper<SalesLedgerProductTemplate> { } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -150,12 +150,12 @@ @ApiModelProperty(value = "仿¬¾æ¹å¼") private String paymentMethod; @ApiModelProperty("审æ¹ç¶æ") @ApiModelProperty("审æ¹ç¶æ 1-å¾ å®¡æ ¸ï¼2-审æ¹ä¸ï¼3-审æ¹éè¿ï¼4-审æ¹å¤±è´¥,5è¡¨ç¤ºæ¯æ¨¡æ¿") private Integer approvalStatus; @ApiModelProperty(value = "模æ¿åç§°") private String templateName; @ApiModelProperty(value = "审æ¹äººid") private Integer approverId; private String approveUserIds; } src/main/java/com/ruoyi/purchase/pojo/PurchaseLedgerTemplate.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,96 @@ package com.ruoyi.purchase.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; import java.util.List; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; /** * <p> * éè´å°è´¦æ¨¡æ¿ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:21:44 */ @Getter @Setter @TableName("purchase_ledger_template") @ApiModel(value = "PurchaseLedgerTemplate对象", description = "éè´å°è´¦æ¨¡æ¿") public class PurchaseLedgerTemplate implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("èªå¢ä¸»é®ID") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("éè´ååå·") private String purchaseContractNumber; @ApiModelProperty("ä¾åºååç§°id") private Long supplierId; @ApiModelProperty("ä¾åºååç§°") private String supplierName; @ApiModelProperty("å½å ¥äººid") private Integer recorderId; @ApiModelProperty("å½å ¥äººå§å") private String recorderName; @ApiModelProperty("éå®ååå·") private String salesContractNo; @ApiModelProperty("项ç®åç§°") private String projectName; @ApiModelProperty("å½å ¥æ¥æ") private Date entryDate; @ApiModelProperty("夿³¨") private String remarks; @ApiModelProperty("è®°å½å建æ¶é´") private Date createdAt; @ApiModelProperty("è®°å½æåæ´æ°æ¶é´") private Date updatedAt; @ApiModelProperty("å ³èéå®å°è´¦ä¸»è¡¨ä¸»é®") private Integer salesLedgerId; @ApiModelProperty("ååéé¢") private BigDecimal contractAmount; @ApiModelProperty("ä¸å¡å") private String businessPerson; @ApiModelProperty("ä¸å¡åid") private Integer businessPersonId; @ApiModelProperty("å½å ¥äººçµè¯") private String phoneNumber; private String paymentMethod; private Date executionDate; @ApiModelProperty("模æ¿åç§°") private String templateName; @TableField(exist = false) private List<SalesLedgerProductTemplate> productList; } src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,84 @@ package com.ruoyi.purchase.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; /** * <p> * 产åä¿¡æ¯æ¨¡æ¿ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:22:23 */ @Getter @Setter @TableName("sales_ledger_product_template") @ApiModel(value = "SalesLedgerProductTemplate对象", description = "产åä¿¡æ¯æ¨¡æ¿") public class SalesLedgerProductTemplate implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("产åä¿¡æ¯ä¸»é®") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("å ³èå°è´¦ä¸»è¡¨ä¸»é®") private Integer salesLedgerId; @ApiModelProperty("产å大类") private String productCategory; @ApiModelProperty("è§æ ¼åå·") private String specificationModel; @ApiModelProperty("åä½") private String unit; @ApiModelProperty("æ°é") private BigDecimal quantity; @ApiModelProperty("æä½åºå") private BigDecimal minStock; @ApiModelProperty("ç¨ç") private BigDecimal taxRate; @ApiModelProperty("å«ç¨åä»·") private BigDecimal taxInclusiveUnitPrice; @ApiModelProperty("å«ç¨æ»ä»·") private BigDecimal taxInclusiveTotalPrice; @ApiModelProperty("ä¸å«ç¨æ»ä»·") private BigDecimal taxExclusiveTotalPrice; @ApiModelProperty("å票类å") private String invoiceType; @ApiModelProperty("1.éå®å°è´¦ï¼2.éè´å°è´¦") private Integer type; @ApiModelProperty("产åid") private Integer productId; @ApiModelProperty("åå·id") private Integer productModelId; private String register; private LocalDateTime registerDate; private BigDecimal warnNum; @ApiModelProperty("æ¯å¦æ¨éè´¨æ£") private Boolean isChecked; } src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -20,7 +20,7 @@ List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger); int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException; int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception; int deletePurchaseLedgerByIds(Long[] ids); @@ -40,5 +40,4 @@ String getPurchaseNo(); int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto) throws IOException; } src/main/java/com/ruoyi/purchase/service/PurchaseLedgerTemplateService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.purchase.service; import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * éè´å°è´¦æ¨¡æ¿ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:21:44 */ public interface PurchaseLedgerTemplateService extends IService<PurchaseLedgerTemplate> { } src/main/java/com/ruoyi/purchase/service/SalesLedgerProductTemplateService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.purchase.service; import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 产åä¿¡æ¯æ¨¡æ¿ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:22:23 */ public interface SalesLedgerProductTemplateService extends IService<SalesLedgerProductTemplate> { } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.purchase.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -10,6 +11,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.impl.ApproveProcessServiceImpl; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.mapper.SupplierManageMapper; @@ -29,14 +33,8 @@ import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.purchase.dto.PurchaseLedgerDto; import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; import com.ruoyi.purchase.mapper.ProductRecordMapper; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.mapper.TicketRegistrationMapper; import com.ruoyi.purchase.pojo.PaymentRegistration; import com.ruoyi.purchase.pojo.ProductRecord; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.pojo.TicketRegistration; import com.ruoyi.purchase.mapper.*; import com.ruoyi.purchase.pojo.*; import com.ruoyi.purchase.service.IPurchaseLedgerService; import com.ruoyi.quality.mapper.*; import com.ruoyi.quality.pojo.*; @@ -111,7 +109,13 @@ private final QualityTestStandardMapper qualityTestStandardMapper; private final QualityInspectParamMapper qualityInspectParamMapper; private final ApproveProcessServiceImpl approveProcessService; private final ProcurementRecordMapper procurementRecordStorageMapper; private final PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; private final SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; @Value("${file.upload-dir}") private String uploadDir; @@ -123,52 +127,10 @@ } return purchaseLedgerMapper.selectList(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto)throws IOException { //å½å ¥äºº SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId()); SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId()); PurchaseLedger purchaseLedger = new PurchaseLedger(); // BeanUtils.copyProperties(purchaseLedger,purchaseLedgerDto); LoginUser loginUser = SecurityUtils.getLoginUser(); if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) { purchaseLedger.setTenantId(loginUser.getTenantId()); } purchaseLedger.setPaymentMethod(purchaseLedgerDto.getPaymentMethod()); purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId()); purchaseLedger.setSupplierId(purchaseLedgerDto.getSupplierId()); purchaseLedger.setTemplateName(purchaseLedgerDto.getTemplateName()); // purchaseLedger.setSalesLedgerPId(purchaseLedgerDto.getSalesLedgerId()); purchaseLedger.setApprovalStatus(3); purchaseLedger.setSupplierName(supplierManage.getSupplierName()); purchaseLedger.setRecorderName(sysUser.getNickName()); purchaseLedger.setPhoneNumber(sysUser.getPhonenumber()); purchaseLedger.setPurchaseContractNumber(UUID.randomUUID().toString().replaceAll("-", "")); purchaseLedger.setEntryDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant())); int insert = purchaseLedgerMapper.insert(purchaseLedger); LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PurchaseLedger::getSupplierName, purchaseLedger.getSupplierName()) .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedger.getPurchaseContractNumber()) .eq(PurchaseLedger::getApprovalStatus,3); PurchaseLedger purchaseLedger1 = purchaseLedgerMapper.selectOne(queryWrapper); if(ObjectUtils.isNotEmpty(purchaseLedgerDto.getProductData())) { // 4. å¤çåè¡¨æ°æ® List<SalesLedgerProduct> salesLedgerProductList = purchaseLedgerDto.getProductData(); salesLedgerProductList.forEach(salesLedgerProduct -> { salesLedgerProduct.setSalesLedgerId(purchaseLedger1.getId()); salesLedgerProduct.setType(2); }); salesLedgerProductList.forEach(salesLedgerProductMapper::insert); } return insert; } @Override @Transactional(rollbackFor = Exception.class) public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException { public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception { SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId()); //å½å ¥äºº @@ -193,9 +155,26 @@ if (purchaseLedger.getId() == null) { purchaseLedgerMapper.insert(purchaseLedger); } else { // å é¤éè´å®¡æ¹ï¼éæ°æäº¤ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>() .eq(ApproveProcess::getApproveType, 5) .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber()) .eq(ApproveProcess::getApproveDelete, 0) .last("limit 1")); if (one != null) { approveProcessService.delByIds(Collections.singletonList(one.getId())); } purchaseLedgerMapper.updateById(purchaseLedger); } // 6.éè´å®¡æ¹æ°å¢ ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveType(5); approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId()); approveProcessVO.setApproveReason(purchaseLedger.getPurchaseContractNumber()); approveProcessVO.setApproveUserIds(purchaseLedgerDto.getApproveUserIds()); approveProcessVO.setApproveUser(loginUser.getUserId()); approveProcessVO.setApproveTime(LocalDate.now().toString()); approveProcessService.addApprove(approveProcessVO); // 4. å¤çåè¡¨æ°æ® List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData(); if (productList != null && !productList.isEmpty()) { @@ -214,7 +193,6 @@ if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds()); } return 1; } @@ -461,7 +439,20 @@ qualityStandardLambdaQueryWrapper.in(QualityInspectParam::getInspectId, inspectIds); qualityInspectParamMapper.delete(qualityStandardLambdaQueryWrapper); } // å é¤éè´å®¡æ¹è®°å½ for (Long id : ids) { PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id); if(purchaseLedger != null){ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>() .eq(ApproveProcess::getApproveType, 5) .eq(ApproveProcess::getApproveDelete, 0) .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber()) .last("limit 1")); if (one != null) { approveProcessService.delByIds(Collections.singletonList(one.getId())); } } } //æ¹éå é¤åæææ£éªæ°æ® qualityInspectMapper.delete(materialInspectLambdaQueryWrapper); // æ¹éå é¤éè´å°è´¦ src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerTemplateServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.purchase.service.impl; import com.ruoyi.purchase.mapper.SalesLedgerProductTemplateMapper; import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate; import com.ruoyi.purchase.mapper.PurchaseLedgerTemplateMapper; import com.ruoyi.purchase.service.PurchaseLedgerTemplateService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * éè´å°è´¦æ¨¡æ¿ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:21:44 */ @Service public class PurchaseLedgerTemplateServiceImpl extends ServiceImpl<PurchaseLedgerTemplateMapper, PurchaseLedgerTemplate> implements PurchaseLedgerTemplateService { @Autowired private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; @Autowired private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; } src/main/java/com/ruoyi/purchase/service/impl/SalesLedgerProductTemplateServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.purchase.service.impl; import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate; import com.ruoyi.purchase.mapper.SalesLedgerProductTemplateMapper; import com.ruoyi.purchase.service.SalesLedgerProductTemplateService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 产åä¿¡æ¯æ¨¡æ¿ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-26 11:22:23 */ @Service public class SalesLedgerProductTemplateServiceImpl extends ServiceImpl<SalesLedgerProductTemplateMapper, SalesLedgerProductTemplate> implements SalesLedgerProductTemplateService { } src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -82,7 +82,7 @@ // åè´§å®¡æ¹ ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveType(7); approveProcessVO.setApproveDeptId(loginUser.getTenantId()); approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId()); approveProcessVO.setApproveReason(req.getType() + ":" +sh); approveProcessVO.setApproveUserIds(req.getApproveUserIds()); approveProcessVO.setApproveUser(loginUser.getUserId()); @@ -106,6 +106,7 @@ } byId.setExpressNumber(req.getExpressNumber()); byId.setExpressCompany(req.getExpressCompany()); byId.setStatus("å·²åè´§"); byId.setShippingCarNumber(req.getShippingCarNumber()); boolean update = shippingInfoService.updateById(req); // è¿ç§»æä»¶ src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -37,7 +37,7 @@ @ApiModelProperty(value = "é宿¥ä»·äº§å表id") private Long salesLedgerProductId; @ApiModelProperty(value = "ç¶æ") @ApiModelProperty(value = "ç¶æ å¾ å®¡æ ¸ å®¡æ ¸ä¸ ï¼å®¡æ ¸æç» å®¡æ ¸éè¿") @Excel(name = "ç¶æ") private String status; src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -391,13 +391,18 @@ if (aLong == null) throw new RuntimeException("å½å ¥äºº:" + salesLedger.getEntryPerson() + ",æ 对åºç¨æ·ï¼"); salesLedger.setEntryPerson(aLong.toString()); salesLedgerMapper.insert(salesLedger); // éå®äº§åæ°æ®ç»å®ï¼éè¿éå®åå·è·å对åºéå®äº§åæ°æ® List<SalesLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream() .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getSalesContractNo().equals(salesLedger.getSalesContractNo())) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(salesLedgerProductImportDtos)) throw new RuntimeException("éå®åå·:" + salesLedgerImportDto.getSalesContractNo() + ",æ 对åºäº§åæ°æ®ï¼"); salesLedger.setContractAmount(salesLedgerProductImportDtos.stream() .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice) .reduce(BigDecimal.ZERO,BigDecimal::add)); salesLedgerMapper.insert(salesLedger); for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) { SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct(); BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -79,7 +79,7 @@ // æ¥ä»·å®¡æ¹ ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveType(6); approveProcessVO.setApproveDeptId(loginUser.getTenantId()); approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId()); approveProcessVO.setApproveReason(quotationNo); approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds()); approveProcessVO.setApproveUser(loginUser.getUserId()); src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -21,10 +21,11 @@ sum(tr.invoice_amount)as receipt_payment_amount, pl.contract_amount-sum(tr.invoice_amount) AS unReceipt_payment_amount, pl.entry_date, pl.execution_date, pl.recorder_id, pl.recorder_name, pl.template_name, pl.approver_id, pl.approve_user_ids, sm.is_white, pl.approval_status, pl.payment_method src/main/resources/mapper/purchase/PurchaseLedgerTemplateMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.purchase.mapper.PurchaseLedgerTemplateMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.purchase.pojo.PurchaseLedgerTemplate"> <id column="id" property="id" /> <result column="purchase_contract_number" property="purchaseContractNumber" /> <result column="supplier_id" property="supplierId" /> <result column="supplier_name" property="supplierName" /> <result column="recorder_id" property="recorderId" /> <result column="recorder_name" property="recorderName" /> <result column="sales_contract_no" property="salesContractNo" /> <result column="project_name" property="projectName" /> <result column="entry_date" property="entryDate" /> <result column="remarks" property="remarks" /> <result column="created_at" property="createdAt" /> <result column="updated_at" property="updatedAt" /> <result column="sales_ledger_id" property="salesLedgerId" /> <result column="contract_amount" property="contractAmount" /> <result column="business_person" property="businessPerson" /> <result column="business_person_id" property="businessPersonId" /> <result column="phone_number" property="phoneNumber" /> <result column="payment_method" property="paymentMethod" /> <result column="execution_date" property="executionDate" /> <result column="template_name" property="templateName" /> </resultMap> </mapper> src/main/resources/mapper/purchase/SalesLedgerProductTemplateMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.purchase.mapper.SalesLedgerProductTemplateMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.purchase.pojo.SalesLedgerProductTemplate"> <id column="id" property="id" /> <result column="sales_ledger_id" property="salesLedgerId" /> <result column="product_category" property="productCategory" /> <result column="specification_model" property="specificationModel" /> <result column="unit" property="unit" /> <result column="quantity" property="quantity" /> <result column="min_stock" property="minStock" /> <result column="tax_rate" property="taxRate" /> <result column="tax_inclusive_unit_price" property="taxInclusiveUnitPrice" /> <result column="tax_inclusive_total_price" property="taxInclusiveTotalPrice" /> <result column="tax_exclusive_total_price" property="taxExclusiveTotalPrice" /> <result column="invoice_type" property="invoiceType" /> <result column="type" property="type" /> <result column="product_id" property="productId" /> <result column="product_model_id" property="productModelId" /> <result column="register" property="register" /> <result column="register_date" property="registerDate" /> <result column="warn_num" property="warnNum" /> <result column="is_checked" property="isChecked" /> </resultMap> </mapper> src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -9,7 +9,7 @@ T1.*, t3.shipping_car_number, t3.shipping_date, t3.status as shippingStatus t3.status as shippingStatus, t3.shipping_date, CASE WHEN t2.qualitity > T1.quantity THEN 1 src/main/resources/static/ÏúÊŲ̂Õ˵¼ÈëÄ£°å.xlsxBinary files differ