瀏覽代碼

到货单,运费

yuansh 3 月之前
父節點
當前提交
aeb73395ba
共有 100 個文件被更改,包括 6886 次插入54 次删除
  1. 1 1
      srm-module-code/src/main/java/org/jeecg/modules/baseCode/service/impl/SerialPatternServiceImpl.java
  2. 27 2
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurDeliveryNoteController.java
  3. 4 5
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurOrderController.java
  4. 15 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurQuotationSelectionController.java
  5. 18 18
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurShippingFeeController.java
  6. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurDeliveryNote.java
  7. 1 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurInquiryForm.java
  8. 1 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurInquiryFormProduct.java
  9. 13 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurOrder.java
  10. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurOrderHis.java
  11. 1 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurPurchaseQuotation.java
  12. 1 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurQuotationSelection.java
  13. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurQuotationSelectionProduct.java
  14. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurShippingFee.java
  15. 9 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/PurDeliveryNoteArrivalMapper.java
  16. 9 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/PurQuotationSelectionProductMapper.java
  17. 48 11
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurDeliveryNoteArrivalMapper.xml
  18. 2 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurOrderProductMapper.xml
  19. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurPurchaseQuotationProductMapper.xml
  20. 46 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurQuotationSelectionProductMapper.xml
  21. 16 8
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/IPurDeliveryNoteArrivalService.java
  22. 7 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/IPurQuotationSelectionProductService.java
  23. 10 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurDeliveryNoteArrivalServiceImpl.java
  24. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurDeliveryNoteServiceImpl.java
  25. 11 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurQuotationSelectionProductServiceImpl.java
  26. 255 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurDeliveryNoteAlert.java
  27. 5 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderAlert.java
  28. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderHisPage.java
  29. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderPage.java
  30. 204 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurQuotationSelectionAlert.java
  31. 8 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurShippingFeePage.java
  32. 499 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleDeliveryController.java
  33. 30 5
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleOrderController.java
  34. 4 4
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleQuotationController.java
  35. 2 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContract.java
  36. 2 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractHis.java
  37. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractProduct.java
  38. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractProductHis.java
  39. 187 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDelivery.java
  40. 150 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDeliveryDetails.java
  41. 87 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDeliveryShip.java
  42. 6 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleInquiryForm.java
  43. 13 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrder.java
  44. 14 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderHis.java
  45. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderProduct.java
  46. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderProductHis.java
  47. 9 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotation.java
  48. 8 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationHis.java
  49. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationProduct.java
  50. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationProductHis.java
  51. 39 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryDetailsMapper.java
  52. 17 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryMapper.java
  53. 31 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryShipMapper.java
  54. 9 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleOrderProductMapper.java
  55. 2 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleContractProductMapper.xml
  56. 55 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryDetailsMapper.xml
  57. 5 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryMapper.xml
  58. 16 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryShipMapper.xml
  59. 43 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleOrderProductMapper.xml
  60. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleQuotationProductMapper.xml
  61. 30 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryDetailsService.java
  62. 51 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryService.java
  63. 22 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryShipService.java
  64. 8 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleOrderProductService.java
  65. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleContractServiceImpl.java
  66. 39 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryDetailsServiceImpl.java
  67. 98 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryServiceImpl.java
  68. 27 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryShipServiceImpl.java
  69. 11 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleOrderProductServiceImpl.java
  70. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleQuotationHisServiceImpl.java
  71. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleContractAlert.java
  72. 1 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleContractPage.java
  73. 265 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleDeliveryAlert.java
  74. 187 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleDeliveryPage.java
  75. 321 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderAlert.java
  76. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderHisPage.java
  77. 12 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderPage.java
  78. 6 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationAlert.java
  79. 8 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationHisPage.java
  80. 8 0
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationPage.java
  81. 351 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreCheckController.java
  82. 207 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreOnhandController.java
  83. 346 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreOtherOutController.java
  84. 404 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StorePurchaseInController.java
  85. 370 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StorePurchaseOtherController.java
  86. 382 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreSaleOutController.java
  87. 91 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreCheck.java
  88. 127 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreCheckDetails.java
  89. 176 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOnhand.java
  90. 99 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOtherOut.java
  91. 119 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOtherOutDetails.java
  92. 142 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseIn.java
  93. 146 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseInDetails.java
  94. 87 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseInShip.java
  95. 126 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOther.java
  96. 126 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOtherDetails.java
  97. 87 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOtherShip.java
  98. 131 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOut.java
  99. 129 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOutDetails.java
  100. 87 0
      srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOutShip.java

+ 1 - 1
srm-module-code/src/main/java/org/jeecg/modules/baseCode/service/impl/SerialPatternServiceImpl.java

@@ -71,7 +71,7 @@ public class SerialPatternServiceImpl extends ServiceImpl<SerialPatternMapper, S
             for (String subPattern : splitPattern){
                 if (Pattern.matches("\\{[^{}]+\\}", subPattern)){ // 字符串前缀
                     prefix = subPattern.substring(1, subPattern.length()-1);
-                }else if(!Pattern.matches("[^yMdHms]", subPattern)){ // yyyyMMddHHmmss
+                    }else if(!Pattern.matches("[^yMdHms]", subPattern)){ // yyyyMMddHHmmss
                     DateFormat dateFormat = new java.text.SimpleDateFormat(subPattern);
                     dateStr = dateFormat.format(new Date());
                 } else if (Pattern.matches("^[1-9]+[0-9]*$", subPattern)){

+ 27 - 2
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurDeliveryNoteController.java

@@ -16,6 +16,8 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.baseCode.service.ISerialPatternService;
 import org.jeecg.modules.purCode.entity.*;
+import org.jeecg.modules.purCode.vo.PurDeliveryNoteAlert;
+import org.jeecg.modules.purCode.vo.PurOrderAlert;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -90,8 +92,30 @@ public class PurDeliveryNoteController {
 		IPage<PurDeliveryNote> pageList = purDeliveryNoteService.page(page, queryWrapper);
 		return Result.OK(pageList);
 	}
-	
-	/**
+
+	 /**
+	  * 到货单弹框明细
+	  * @param saleInquiryForm
+	  * @param pageNo
+	  * @param pageSize
+	  * @param req
+	  * @return
+	  */
+	 @ApiOperation(value = "到货单弹框明细", notes = "到货单弹框明细")
+	 @GetMapping(value = "/purDeliveryNoteArrivalAlert")
+	 public Result<IPage<PurDeliveryNoteAlert>> purDeliveryNoteArrivalAlert(PurDeliveryNoteAlert saleInquiryForm,
+																   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+																   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+																   HttpServletRequest req) {
+
+		 QueryWrapper<PurDeliveryNoteAlert> queryWrapper = QueryGenerator.initQueryWrapper(saleInquiryForm, req.getParameterMap());
+		 Page<PurDeliveryNoteAlert> page = new Page<PurDeliveryNoteAlert>(pageNo, pageSize);
+		 IPage<PurDeliveryNoteAlert> pageList = purDeliveryNoteArrivalService.purDeliveryNoteArrivalAlert(page, queryWrapper);
+		 return Result.OK(pageList);
+	 }
+
+
+	 /**
 	 *   添加
 	 *
 	 * @param purDeliveryNotePage
@@ -429,6 +453,7 @@ public class PurDeliveryNoteController {
 		List<PurDeliveryNodeShip> purDeliveryNodeShipList = purDeliveryNodeShipService.selectByMainId(id);
 		return Result.OK(purDeliveryNodeShipList);
 	}
+
 	/**
 	 * 通过id查询
 	 *

+ 4 - 5
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurOrderController.java

@@ -3,12 +3,8 @@ package org.jeecg.modules.purCode.controller;
 import java.io.UnsupportedEncodingException;
 import java.io.IOException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
-import java.util.HashMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -461,6 +457,9 @@ public class PurOrderController {
 
         PurOrder ent = new PurOrder();
         ent.setStatus(1);
+        LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+        ent.setConfirmBy(sysUser.getUsername());
+        ent.setConfirmTime(new Date());
         purOrderService.update(ent, queryWrapper);
 
         return Result.OK("确认成功!");

+ 15 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurQuotationSelectionController.java

@@ -16,6 +16,8 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.baseCode.service.ISerialPatternService;
 import org.jeecg.modules.purCode.entity.PurQuotationSelection;
+import org.jeecg.modules.purCode.vo.PurQuotationSelectionAlert;
+import org.jeecg.modules.purCode.vo.SupplierQuotationDetails;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -93,6 +95,19 @@ public class PurQuotationSelectionController {
         return Result.OK(pageList);
     }
 
+    @ApiOperation(value = "供应商报价选定", notes = "供应商报价选定")
+    @GetMapping(value = "/purQuotationSelectionProductAlert")
+    public Result<IPage<PurQuotationSelectionAlert>> purQuotationSelectionProductAlert(PurQuotationSelectionAlert quotationProject,
+                                                                            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                            HttpServletRequest req) {
+        QueryWrapper<PurQuotationSelectionAlert> queryWrapper = QueryGenerator.initQueryWrapper(quotationProject, req.getParameterMap());
+        Page<PurQuotationSelectionAlert> page = new Page<PurQuotationSelectionAlert>(pageNo,pageSize);
+        IPage<PurQuotationSelectionAlert> pageList = purQuotationSelectionProductService.purQuotationSelectionProductAlert(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+
     /**
      * 添加
      *

+ 18 - 18
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurShippingFeeController.java

@@ -3,12 +3,8 @@ package org.jeecg.modules.purCode.controller;
 import java.io.UnsupportedEncodingException;
 import java.io.IOException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
-import java.util.HashMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -210,8 +206,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-批量提交")
-	 @ApiOperation(value = "采购订单-批量提交", notes = "采购订单-批量提交")
+	 @AutoLog(value = "运费采购订单-批量提交")
+	 @ApiOperation(value = "运费采购订单-批量提交", notes = "运费采购订单-批量提交")
 	 @GetMapping(value = "/submitBatch")
 	 public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
 
@@ -260,8 +256,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-批量取消提交")
-	 @ApiOperation(value = "采购订单-批量取消提交", notes = "采购订单-批量取消提交")
+	 @AutoLog(value = "运费采购订单-批量取消提交")
+	 @ApiOperation(value = "运费采购订单-批量取消提交", notes = "运费采购订单-批量取消提交")
 	 @GetMapping(value = "/returnSubmitBatch")
 	 public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
 
@@ -323,8 +319,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-批量确认")
-	 @ApiOperation(value = "采购订单-批量确认", notes = "采购订单-批量确认")
+	 @AutoLog(value = "运费采购订单-批量确认")
+	 @ApiOperation(value = "运费采购订单-批量确认", notes = "运费采购订单-批量确认")
 	 @GetMapping(value = "/submitConfirm")
 	 public Result<String> submitConfirm(@RequestParam(name = "ids", required = true) String ids) {
 
@@ -365,9 +361,13 @@ public class PurShippingFeeController {
 
 			 return Result.error(sb.toString());
 		 }
-
 		 PurShippingFee ent = new PurShippingFee();
 		 ent.setStatus(1);
+
+		 LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+		 ent.setConfirmBy(sysUser.getUsername());
+		 ent.setConfirmTime(new Date());
+
 		 purShippingFeeService.update(ent, queryWrapper);
 
 		 return Result.OK("确认成功!");
@@ -379,8 +379,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-批量取消确认")
-	 @ApiOperation(value = "采购订单-批量取消确认", notes = "采购订单-批量取消确认")
+	 @AutoLog(value = "运费采购订单-批量取消确认")
+	 @ApiOperation(value = "运费采购订单-批量取消确认", notes = "运费采购订单-批量取消确认")
 	 @GetMapping(value = "/returnSubmitConfirm")
 	 public Result<String> returnSubmitConfirm(@RequestParam(name = "ids", required = true) String ids) {
 
@@ -436,8 +436,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-批量关闭")
-	 @ApiOperation(value = "采购订单-批量关闭", notes = "采购订单-批量关闭")
+	 @AutoLog(value = "运费采购订单-批量关闭")
+	 @ApiOperation(value = "运费采购订单-批量关闭", notes = "运费采购订单-批量关闭")
 	 @GetMapping(value = "/submitClose")
 	 public Result<String> submitClose(@RequestParam(name = "ids", required = true) String ids) {
 
@@ -481,8 +481,8 @@ public class PurShippingFeeController {
 	  * @param ids
 	  * @return
 	  */
-	 @AutoLog(value = "采购订单-取消关闭")
-	 @ApiOperation(value = "采购订单-取消关闭", notes = "采购订单-取消关闭")
+	 @AutoLog(value = "运费采购订单-取消关闭")
+	 @ApiOperation(value = "运费采购订单-取消关闭", notes = "运费采购订单-取消关闭")
 	 @GetMapping(value = "/returnClose")
 	 public Result<String> returnClose(@RequestParam(name = "ids", required = true) String ids) {
 

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurDeliveryNote.java

@@ -56,10 +56,12 @@ public class PurDeliveryNote implements Serializable {
 	/**提交(submit)1是0否*/
 	@Excel(name = "提交(submit)1是0否", width = 15)
     @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
     private String submit;
 	/**关闭(close)1是0否*/
 	@Excel(name = "关闭(close)1是0否", width = 15)
     @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
     private String close;
 	/**删除状态(0-正常,1-已删除)*/
 	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
@@ -99,10 +101,12 @@ public class PurDeliveryNote implements Serializable {
 	/**优先级(priority)*/
 	@Excel(name = "优先级(priority)", width = 15)
     @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
     private String priority;
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurInquiryForm.java

@@ -114,6 +114,7 @@ public class PurInquiryForm implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurInquiryFormProduct.java

@@ -134,4 +134,5 @@ public class PurInquiryFormProduct implements Serializable {
 	@Excel(name = "备注", width = 15)
     @ApiModelProperty(value = "备注")
     private String notes;
+    private String sourceId;
 }

+ 13 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurOrder.java

@@ -33,6 +33,14 @@ public class PurOrder implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -107,6 +115,7 @@ public class PurOrder implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -148,6 +157,10 @@ public class PurOrder implements Serializable {
 	@Excel(name = "发货方式(delivery)", width = 15)
     @ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+    /**运输方式(delivery)*/
+    @Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
 	/**质保期(warranty period)/月*/
 	@Excel(name = "质保期(warranty period)/月", width = 15)
     @ApiModelProperty(value = "质保期(warranty period)/月")

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurOrderHis.java

@@ -37,6 +37,14 @@ public class PurOrderHis implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -148,6 +156,10 @@ public class PurOrderHis implements Serializable {
 	@Excel(name = "发货方式(delivery)", width = 15)
     @ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+    /**运输方式(delivery)*/
+    @Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
 	/**质保期(warranty period)/月*/
 	@Excel(name = "质保期(warranty period)/月", width = 15)
     @ApiModelProperty(value = "质保期(warranty period)/月")

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurPurchaseQuotation.java

@@ -106,6 +106,7 @@ public class PurPurchaseQuotation implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurQuotationSelection.java

@@ -88,6 +88,7 @@ public class PurQuotationSelection implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurQuotationSelectionProduct.java

@@ -134,6 +134,10 @@ public class PurQuotationSelectionProduct implements Serializable {
 	@Excel(name = "报价有效期", width = 15)
     @ApiModelProperty(value = "报价有效期")
     private Double quotationValidity;
+	/**数量*/
+	@Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private java.math.BigDecimal quantity;
 	/**含税单价*/
 	@Excel(name = "含税单价", width = 15)
     @ApiModelProperty(value = "含税单价")

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurShippingFee.java

@@ -33,6 +33,14 @@ public class PurShippingFee implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -52,14 +60,17 @@ public class PurShippingFee implements Serializable {
 	/**客户确认(1-已确认,0-未确认)*/
 	@Excel(name = "客户确认(1-已确认,0-未确认)", width = 15)
     @ApiModelProperty(value = "客户确认(1-已确认,0-未确认)")
+    @Dict(dicCode = "yes_or_no")
     private Integer status;
 	/**提交(submit)1是0否*/
 	@Excel(name = "提交(submit)1是0否", width = 15)
     @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
     private String submit;
 	/**关闭(close)1是0否*/
 	@Excel(name = "关闭(close)1是0否", width = 15)
     @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
     private String close;
 	/**删除状态(0-正常,1-已删除)*/
 	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
@@ -87,6 +98,7 @@ public class PurShippingFee implements Serializable {
 	/**币种(currency)*/
 	@Excel(name = "币种(currency)", width = 15)
     @ApiModelProperty(value = "币种(currency)")
+    @Dict(dicCode = "currency")
     private String currency;
 	/**备注(notes)*/
 	@Excel(name = "备注(notes)", width = 15)

+ 9 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/PurDeliveryNoteArrivalMapper.java

@@ -1,9 +1,15 @@
 package org.jeecg.modules.purCode.mapper;
 
 import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.purCode.entity.PurDeliveryNoteArrival;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.purCode.vo.PurDeliveryNoteAlert;
+import org.jeecg.modules.purCode.vo.PurOrderAlert;
 
 /**
  * @Description: 到货单子表 - 到货明细
@@ -28,4 +34,7 @@ public interface PurDeliveryNoteArrivalMapper extends BaseMapper<PurDeliveryNote
    * @return List<PurDeliveryNoteArrival>
    */
 	public List<PurDeliveryNoteArrival> selectByMainId(@Param("mainId") String mainId);
+
+	public IPage<PurDeliveryNoteAlert> purDeliveryNoteArrivalAlert(Page<PurDeliveryNoteAlert> page, @Param("ew") QueryWrapper<PurDeliveryNoteAlert> queryWrapper);
+
 }

+ 9 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/PurQuotationSelectionProductMapper.java

@@ -1,9 +1,14 @@
 package org.jeecg.modules.purCode.mapper;
 
 import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.purCode.entity.PurQuotationSelectionProduct;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.purCode.vo.PurQuotationSelectionAlert;
 
 /**
  * @Description: 采购报价选定子表 - 产品明细
@@ -28,4 +33,8 @@ public interface PurQuotationSelectionProductMapper extends BaseMapper<PurQuotat
    * @return List<PurQuotationSelectionProduct>
    */
 	public List<PurQuotationSelectionProduct> selectByMainId(@Param("mainId") String mainId);
+
+	public IPage<PurQuotationSelectionAlert> purQuotationSelectionProductAlert(Page<PurQuotationSelectionAlert> page, @Param("ew") QueryWrapper<PurQuotationSelectionAlert> queryWrapper);
+
+
 }

+ 48 - 11
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurDeliveryNoteArrivalMapper.xml

@@ -2,15 +2,52 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.purCode.mapper.PurDeliveryNoteArrivalMapper">
 
-	<delete id="deleteByMainId" parameterType="java.lang.String">
-		DELETE 
-		FROM  pur_delivery_note_arrival 
-		WHERE
-			 head_id = #{mainId} 	</delete>
-	
-	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.purCode.entity.PurDeliveryNoteArrival">
-		SELECT * 
-		FROM  pur_delivery_note_arrival
-		WHERE
-			 head_id = #{mainId} 	</select>
+    <delete id="deleteByMainId" parameterType="java.lang.String">
+        DELETE
+        FROM pur_delivery_note_arrival
+        WHERE head_id = #{mainId}    </delete>
+
+    <select id="selectByMainId" parameterType="java.lang.String"
+            resultType="org.jeecg.modules.purCode.entity.PurDeliveryNoteArrival">
+        SELECT *
+        FROM pur_delivery_note_arrival
+        WHERE head_id = #{mainId}    </select>
+
+
+    <select id="purDeliveryNoteArrivalAlert" parameterType="java.lang.String" resultType="org.jeecg.modules.purCode.vo.PurDeliveryNoteAlert">
+        select *
+        from (select a.id    headId
+                   , b.id    child_id
+                   , a.model head_model
+                   , b.model child_model
+
+                   , a.*
+                   , b.product_id
+                   , b.chinese_name
+                   , b.english_name
+                   , b.specifications
+                   , b.partno
+                   , b.drawingno
+                   , b.orderno
+                   , b.factory
+                   , b.quality_grade
+                   , b.quantity
+                   , b.earliest_delivery_date
+                   , b.latest_delivery_date
+                   , b.need_ship_inspection
+                   , b.ship_inspection
+                   , b.order_quantity
+                   , b.arrival_quantity
+                   , b.arrival_money
+                   , b.notes childNotes
+              from pur_delivery_note a
+                       left join pur_delivery_note_arrival b on a.id = b.head_id
+
+              where a.del_flag = 0
+                and a.submit = 1
+                and a.close = 0
+                and b.del_flag = 0
+             ) a
+            ${ew.customSqlSegment}
+    </select>
 </mapper>

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurOrderProductMapper.xml

@@ -33,6 +33,8 @@
 			 , b.factory
 			 , b.quality_grade
 			 , b.quantity
+			 , b.earliest_delivery_date
+			 , b.latest_delivery_date
 
 			 ,b.tax_price
 			 ,b.tax_amount

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurPurchaseQuotationProductMapper.xml

@@ -41,6 +41,9 @@
 					  , b.need_ship
 					  , b.ship_inspection
 					  , b.notes
+					  , b.tax_amount
+					  , b.last_price
+					  , b.tax_price
 				 from pur_purchase_quotation a
 						  left join pur_purchase_quotation_product b on a.id = b.head_id
 

+ 46 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/mapper/xml/PurQuotationSelectionProductMapper.xml

@@ -13,4 +13,50 @@
 		FROM  pur_quotation_selection_product
 		WHERE
 			 head_id = #{mainId} 	</select>
+
+
+
+	<select id="purQuotationSelectionProductAlert" resultType="org.jeecg.modules.purCode.vo.PurQuotationSelectionAlert">
+		select *
+		from (
+				 select a.id            headId
+					  , b.id            child_id
+					  , a.model         head_model
+					  , b.model         child_model
+					  , a.*
+					  , b.product_id
+					  , b.product_class
+					  , b.product_code
+					  , b.chinese_name
+					  , b.english_name
+					  , b.specifications
+					  , b.partno
+					  , b.drawingno
+					  , b.orderno
+					  , b.factory
+					  , b.quality_grade
+
+					  , b.unit
+					  , b.selection_supplier
+					  , b.payment_term
+
+					  , b.delivery
+					  , b.delivery_time
+					  , b.quotation_validity
+					  , b.notes childNotes
+					  , b.tax_amount
+					  , b.last_price
+					  , b.tax_price
+
+				 from pur_quotation_selection a
+						  left join pur_quotation_selection_product b on a.id = b.head_id
+
+				 where a.del_flag = 0
+				   and a.submit = 1
+				   and b.del_flag = 0
+
+			 ) a
+			${ew.customSqlSegment}
+	</select>
+
 </mapper>

+ 16 - 8
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/IPurDeliveryNoteArrivalService.java

@@ -1,22 +1,30 @@
 package org.jeecg.modules.purCode.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.purCode.entity.PurDeliveryNoteArrival;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.purCode.vo.PurDeliveryNoteAlert;
+
 import java.util.List;
 
 /**
  * @Description: 到货单子表 - 到货明细
  * @Author: jeecg-boot
- * @Date:   2024-11-28
+ * @Date: 2024-11-28
  * @Version: V1.0
  */
 public interface IPurDeliveryNoteArrivalService extends IService<PurDeliveryNoteArrival> {
 
-	/**
-	 * 通过主表id查询子表数据
-	 *
-	 * @param mainId 主表id
-	 * @return List<PurDeliveryNoteArrival>
-	 */
-	public List<PurDeliveryNoteArrival> selectByMainId(String mainId);
+    /**
+     * 通过主表id查询子表数据
+     *
+     * @param mainId 主表id
+     * @return List<PurDeliveryNoteArrival>
+     */
+    public List<PurDeliveryNoteArrival> selectByMainId(String mainId);
+
+    public IPage<PurDeliveryNoteAlert> purDeliveryNoteArrivalAlert(Page<PurDeliveryNoteAlert> page, QueryWrapper<PurDeliveryNoteAlert> queryWrapper);
+
 }

+ 7 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/IPurQuotationSelectionProductService.java

@@ -1,7 +1,12 @@
 package org.jeecg.modules.purCode.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.purCode.entity.PurQuotationSelectionProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.purCode.vo.PurQuotationSelectionAlert;
+
 import java.util.List;
 
 /**
@@ -19,4 +24,6 @@ public interface IPurQuotationSelectionProductService extends IService<PurQuotat
 	 * @return List<PurQuotationSelectionProduct>
 	 */
 	public List<PurQuotationSelectionProduct> selectByMainId(String mainId);
+
+	public IPage<PurQuotationSelectionAlert> purQuotationSelectionProductAlert(Page<PurQuotationSelectionAlert> page, QueryWrapper<PurQuotationSelectionAlert> queryWrapper);
 }

+ 10 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurDeliveryNoteArrivalServiceImpl.java

@@ -1,8 +1,13 @@
 package org.jeecg.modules.purCode.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.purCode.entity.PurDeliveryNoteArrival;
 import org.jeecg.modules.purCode.mapper.PurDeliveryNoteArrivalMapper;
 import org.jeecg.modules.purCode.service.IPurDeliveryNoteArrivalService;
+import org.jeecg.modules.purCode.vo.PurDeliveryNoteAlert;
 import org.springframework.stereotype.Service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,4 +29,9 @@ public class PurDeliveryNoteArrivalServiceImpl extends ServiceImpl<PurDeliveryNo
 	public List<PurDeliveryNoteArrival> selectByMainId(String mainId) {
 		return purDeliveryNoteArrivalMapper.selectByMainId(mainId);
 	}
+	@Override
+	public IPage<PurDeliveryNoteAlert> purDeliveryNoteArrivalAlert(Page<PurDeliveryNoteAlert> page,QueryWrapper<PurDeliveryNoteAlert> queryWrapper) {
+		return purDeliveryNoteArrivalMapper.purDeliveryNoteArrivalAlert(page,queryWrapper);
+	}
+
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurDeliveryNoteServiceImpl.java

@@ -38,6 +38,7 @@ public class PurDeliveryNoteServiceImpl extends ServiceImpl<PurDeliveryNoteMappe
 		if(purDeliveryNodeShipList!=null && purDeliveryNodeShipList.size()>0) {
 			for(PurDeliveryNodeShip entity:purDeliveryNodeShipList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(purDeliveryNote.getId());
 				purDeliveryNodeShipMapper.insert(entity);
 			}
@@ -45,6 +46,7 @@ public class PurDeliveryNoteServiceImpl extends ServiceImpl<PurDeliveryNoteMappe
 		if(purDeliveryNoteArrivalList!=null && purDeliveryNoteArrivalList.size()>0) {
 			for(PurDeliveryNoteArrival entity:purDeliveryNoteArrivalList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(purDeliveryNote.getId());
 				purDeliveryNoteArrivalMapper.insert(entity);
 			}
@@ -64,6 +66,7 @@ public class PurDeliveryNoteServiceImpl extends ServiceImpl<PurDeliveryNoteMappe
 		if(purDeliveryNodeShipList!=null && purDeliveryNodeShipList.size()>0) {
 			for(PurDeliveryNodeShip entity:purDeliveryNodeShipList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(purDeliveryNote.getId());
 				purDeliveryNodeShipMapper.insert(entity);
 			}
@@ -71,6 +74,7 @@ public class PurDeliveryNoteServiceImpl extends ServiceImpl<PurDeliveryNoteMappe
 		if(purDeliveryNoteArrivalList!=null && purDeliveryNoteArrivalList.size()>0) {
 			for(PurDeliveryNoteArrival entity:purDeliveryNoteArrivalList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(purDeliveryNote.getId());
 				purDeliveryNoteArrivalMapper.insert(entity);
 			}

+ 11 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurQuotationSelectionProductServiceImpl.java

@@ -1,8 +1,13 @@
 package org.jeecg.modules.purCode.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.purCode.entity.PurQuotationSelectionProduct;
 import org.jeecg.modules.purCode.mapper.PurQuotationSelectionProductMapper;
 import org.jeecg.modules.purCode.service.IPurQuotationSelectionProductService;
+import org.jeecg.modules.purCode.vo.PurQuotationSelectionAlert;
 import org.springframework.stereotype.Service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,4 +29,10 @@ public class PurQuotationSelectionProductServiceImpl extends ServiceImpl<PurQuot
 	public List<PurQuotationSelectionProduct> selectByMainId(String mainId) {
 		return purQuotationSelectionProductMapper.selectByMainId(mainId);
 	}
+
+
+	@Override
+	public IPage<PurQuotationSelectionAlert> purQuotationSelectionProductAlert(Page<PurQuotationSelectionAlert> page, QueryWrapper<PurQuotationSelectionAlert> queryWrapper){
+		return purQuotationSelectionProductMapper.purQuotationSelectionProductAlert(page,queryWrapper);
+	}
 }

+ 255 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurDeliveryNoteAlert.java

@@ -0,0 +1,255 @@
+package org.jeecg.modules.purCode.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 到货单(delivery note)
+ * @Author: jeecg-boot
+ * @Date:   2024-11-28
+ * @Version: V1.0
+ */
+@ApiModel(value="pur_delivery_note对象", description="到货单弹框")
+@Data
+public class PurDeliveryNoteAlert implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String headId;
+    private String childId;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**关闭(close)1是0否*/
+	@Excel(name = "关闭(close)1是0否", width = 15)
+    @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String close;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**到货日期(arrival date)*/
+	@Excel(name = "到货日期(arrival date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "到货日期(arrival date)")
+    private Date arrivalDate;
+	/**到货单号*/
+	@Excel(name = "到货单号", width = 15)
+    @ApiModelProperty(value = "到货单号")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**供应商(supplier)*/
+	@Excel(name = "供应商(supplier)", width = 15)
+    @ApiModelProperty(value = "供应商(supplier)")
+    private String supplier;
+	/**供应商名称*/
+	@Excel(name = "供应商名称", width = 15)
+    @ApiModelProperty(value = "供应商名称")
+    private String supplierName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+    @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**发货方式(delivery)*/
+	@Excel(name = "发货方式(delivery)", width = 15)
+    @ApiModelProperty(value = "发货方式(delivery)")
+    private String delivery;
+	/**运单号(waybill number)*/
+	@Excel(name = "运单号(waybill number)", width = 15)
+    @ApiModelProperty(value = "运单号(waybill number)")
+    private String waybillNumber;
+	/**包装要求(packageb requirement)*/
+	@Excel(name = "包装要求(packageb requirement)", width = 15)
+    @ApiModelProperty(value = "包装要求(packageb requirement)")
+    private String packagebRequirement;
+	/**收件人(recipient)*/
+	@Excel(name = "收件人(recipient)", width = 15)
+    @ApiModelProperty(value = "收件人(recipient)")
+    private String recipient;
+	/**收件人电话(recipient tel)*/
+	@Excel(name = "收件人电话(recipient tel)", width = 15)
+    @ApiModelProperty(value = "收件人电话(recipient tel)")
+    private String recipientTel;
+	/**收件人地址(recipient address)*/
+	@Excel(name = "收件人地址(recipient address)", width = 15)
+    @ApiModelProperty(value = "收件人地址(recipient address)")
+    private String recipientAddress;
+	/**质保条款(warranty terms)*/
+	@Excel(name = "质保条款(warranty terms)", width = 15)
+    @ApiModelProperty(value = "质保条款(warranty terms)")
+    private String warrantyTerms;
+	/**采购部门(purchase department)*/
+	@Excel(name = "采购部门(purchase department)", width = 15)
+    @ApiModelProperty(value = "采购部门(purchase department)")
+    private String purchaseDepartment;
+	/**采购员(purchaseman)*/
+	@Excel(name = "采购员(purchaseman)", width = 15)
+    @ApiModelProperty(value = "采购员(purchaseman)")
+    private String purchaseman;
+	/**发货/发票日期(delivery/invoice date)*/
+	@Excel(name = "发货/发票日期(delivery/invoice date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "发货/发票日期(delivery/invoice date)")
+    private Date invoiceDate;
+	/**到货详情(arrival details)*/
+	@Excel(name = "到货详情(arrival details)", width = 15)
+    @ApiModelProperty(value = "到货详情(arrival details)")
+    private String arrivalDetails;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+
+	/**来源*/
+	@Excel(name = "来源", width = 15)
+    @ApiModelProperty(value = "来源")
+    private String sourceCode;
+    /**预发货日期(Pre shipment date)*/
+    @Excel(name = "预发货日期(Pre shipment date)", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "预发货日期(Pre shipment date)")
+    private Date shipmentDate;
+    /**最早发货日期(earliest delivery date)*/
+    @Excel(name = "最早发货日期(earliest delivery date)", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "最早发货日期(earliest delivery date)")
+    private Date earliestDeliveryDate;
+    /**最晚发货日期(latest delivery date)*/
+    @Excel(name = "最晚发货日期(latest delivery date)", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "最晚发货日期(latest delivery date)")
+    private Date latestDeliveryDate;
+    /**产品id*/
+    @Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+    /**产品中文名(chinese name)*/
+    @Excel(name = "产品中文名(chinese name)", width = 15)
+    @ApiModelProperty(value = "产品中文名(chinese name)")
+    private String chineseName;
+    /**产品英文名*/
+    @Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+    /**规格*/
+    @Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+    /**型号*/
+    @Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String childModel;
+    /**备件号*/
+    @Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+    /**图号*/
+    @Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+    /**订货号*/
+    @Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+    /**厂家*/
+    @Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+    /**质量等级*/
+    @Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+    /**需要船检证书(need ship inspection certificate)*/
+    @Excel(name = "需要船检证书(need ship inspection certificate)", width = 15)
+    @ApiModelProperty(value = "需要船检证书(need ship inspection certificate)")
+    private String needShipInspection;
+    /**船检证书(ship inspection certificate)*/
+    @Excel(name = "船检证书(ship inspection certificate)", width = 15)
+    @ApiModelProperty(value = "船检证书(ship inspection certificate)")
+    private String shipInspection;
+    /**订单数量(order quantity)*/
+    @Excel(name = "订单数量(order quantity)", width = 15)
+    @ApiModelProperty(value = "订单数量(order quantity)")
+    private java.math.BigDecimal orderQuantity;
+    /**已到货数量(arrival quantity)*/
+    @Excel(name = "已到货数量(arrival quantity)", width = 15)
+    @ApiModelProperty(value = "已到货数量(arrival quantity)")
+    private java.math.BigDecimal arrivalQuantity;
+    /**已到货金额(arrival money)*/
+    @Excel(name = "已到货金额(arrival money)", width = 15)
+    @ApiModelProperty(value = "已到货金额(arrival money)")
+    private java.math.BigDecimal arrivalMoney;
+    /**数量(quantity)*/
+    @Excel(name = "数量(quantity)", width = 15)
+    @ApiModelProperty(value = "数量(quantity)")
+    private java.math.BigDecimal quantity;
+    /**备注(notes)*/
+    @Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String childNotes;
+}

+ 5 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderAlert.java

@@ -101,6 +101,7 @@ public class PurOrderAlert implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -142,6 +143,10 @@ public class PurOrderAlert implements Serializable {
 	@Excel(name = "发货方式(delivery)", width = 15)
     @ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+    /**运输方式(delivery)*/
+    @Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
 	/**质保期(warranty period)/月*/
 	@Excel(name = "质保期(warranty period)/月", width = 15)
     @ApiModelProperty(value = "质保期(warranty period)/月")

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderHisPage.java

@@ -34,6 +34,14 @@ public class PurOrderHisPage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;
@@ -144,6 +152,10 @@ public class PurOrderHisPage {
 	@Excel(name = "发货方式(delivery)", width = 15)
 	@ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+	/**运输方式(delivery)*/
+	@Excel(name = "运输方式(transport)", width = 15)
+	@ApiModelProperty(value = "运输方式(transport)")
+	private String transport;
 	/**质保期(warranty period)/月*/
 	@Excel(name = "质保期(warranty period)/月", width = 15)
 	@ApiModelProperty(value = "质保期(warranty period)/月")

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurOrderPage.java

@@ -33,6 +33,14 @@ public class PurOrderPage {
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建时间*/
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@@ -140,6 +148,10 @@ public class PurOrderPage {
 	@Excel(name = "发货方式(delivery)", width = 15)
 	@ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+	/**运输方式(delivery)*/
+	@Excel(name = "运输方式(transport)", width = 15)
+	@ApiModelProperty(value = "运输方式(transport)")
+	private String transport;
 	/**质保期(warranty period)/月*/
 	@Excel(name = "质保期(warranty period)/月", width = 15)
 	@ApiModelProperty(value = "质保期(warranty period)/月")

+ 204 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurQuotationSelectionAlert.java

@@ -0,0 +1,204 @@
+package org.jeecg.modules.purCode.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 采购报价选定弹框
+ * @Author: jeecg-boot
+ * @Date:   2024-11-22
+ * @Version: V1.0
+ */
+@ApiModel(value="PurQuotationSelectionAlert对象", description="采购报价选定弹框")
+@Data
+public class PurQuotationSelectionAlert implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String headId;
+    private String childId;
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**提交(1是 0否)*/
+	@Excel(name = "提交(1是 0否)", width = 15)
+    @ApiModelProperty(value = "提交(1是 0否)")
+    private String submit;
+	/**单据日期(bill date)*/
+	@Excel(name = "单据日期(bill date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期(bill date)")
+    private Date billDate;
+	/**选定单号(bill code)*/
+	@Excel(name = "选定单号(bill code)", width = 15)
+    @ApiModelProperty(value = "选定单号(bill code)")
+    private String billCode;
+	/**询价项目(inquiry project)*/
+	@Excel(name = "询价项目(inquiry project)", width = 15)
+    @ApiModelProperty(value = "询价项目(inquiry project)")
+    private String inquiryProject;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+    @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**附件(attachs)*/
+	@Excel(name = "附件(attachs)", width = 15)
+    @ApiModelProperty(value = "附件(attachs)")
+    private String attachs;
+	/**选定备注(inquiry notes)*/
+	@Excel(name = "选定备注(inquiry notes)", width = 15)
+    @ApiModelProperty(value = "选定备注(inquiry notes)")
+    private String selectionNotes;
+
+    /**产品id*/
+    @Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+    /**产品分类*/
+    @Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+    /**产品编码*/
+    @Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+    /**产品中文名*/
+    @Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+    /**产品英文名*/
+    @Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+    /**规格*/
+    @Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+    /**型号*/
+    @Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String childModel;
+    /**备件号*/
+    @Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+    /**图号*/
+    @Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+    /**订货号*/
+    @Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+    /**厂家*/
+    @Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+    /**质量等级*/
+    @Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+    /**数量*/
+    @Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private java.math.BigDecimal quantity;
+    /**单位*/
+    @Excel(name = "单位", width = 15)
+    @ApiModelProperty(value = "单位")
+    private String unit;
+    /**选定供应商(selection supplier)*/
+    @Excel(name = "选定供应商(selection supplier)", width = 15)
+    @ApiModelProperty(value = "选定供应商(selection supplier)")
+    @Dict(dictTable = "cusp_supplier_profile", dicCode = "id", dicText = "name")
+    private String selectionSupplier;
+    /**付款条件*/
+    @Excel(name = "付款条件", width = 15)
+    @ApiModelProperty(value = "付款条件")
+    private String paymentTerm;
+    /**发货方式*/
+    @Excel(name = "发货方式", width = 15)
+    @ApiModelProperty(value = "发货方式")
+    private String delivery;
+    /**交期*/
+    @Excel(name = "交期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "交期")
+    private Date deliveryTime;
+    /**报价有效期*/
+    @Excel(name = "报价有效期", width = 15)
+    @ApiModelProperty(value = "报价有效期")
+    private Double quotationValidity;
+    /**含税单价*/
+    @Excel(name = "含税单价", width = 15)
+    @ApiModelProperty(value = "含税单价")
+    private java.math.BigDecimal taxPrice;
+    /**上一次报价*/
+    @Excel(name = "上一次报价", width = 15)
+    @ApiModelProperty(value = "上一次报价")
+    private java.math.BigDecimal lastPrice;
+    /**含税金额*/
+    @Excel(name = "含税金额", width = 15)
+    @ApiModelProperty(value = "含税金额")
+    private java.math.BigDecimal taxAmount;
+    /**备注*/
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String childNotes;
+}

+ 8 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurShippingFeePage.java

@@ -30,6 +30,14 @@ public class PurShippingFeePage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;

+ 499 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleDeliveryController.java

@@ -0,0 +1,499 @@
+package org.jeecg.modules.saleCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.saleCode.entity.SaleDelivery;
+import org.jeecg.modules.saleCode.vo.SaleDeliveryAlert;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import org.jeecg.modules.saleCode.vo.SaleDeliveryPage;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryService;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryShipService;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+ /**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@Api(tags="发货通知单(delivery notice)")
+@RestController
+@RequestMapping("/saleCode/saleDelivery")
+@Slf4j
+public class SaleDeliveryController {
+	@Autowired
+	private ISaleDeliveryService saleDeliveryService;
+	@Autowired
+	private ISaleDeliveryShipService saleDeliveryShipService;
+	@Autowired
+	private ISaleDeliveryDetailsService saleDeliveryDetailsService;
+
+	 @Autowired
+	 private ISerialPatternService serialPatternService;
+	/**
+	 * 分页列表查询
+	 *
+	 * @param saleDelivery
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "发货通知单(delivery notice)-分页列表查询")
+	@ApiOperation(value="发货通知单(delivery notice)-分页列表查询", notes="发货通知单(delivery notice)-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<SaleDelivery>> queryPageList(SaleDelivery saleDelivery,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+        QueryWrapper<SaleDelivery> queryWrapper = QueryGenerator.initQueryWrapper(saleDelivery, req.getParameterMap());
+		Page<SaleDelivery> page = new Page<SaleDelivery>(pageNo, pageSize);
+		IPage<SaleDelivery> pageList = saleDeliveryService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	 @ApiOperation(value = "发货通知单弹框明细", notes = "发货通知单弹框明细")
+	 @GetMapping(value = "/selectSaleDeliveryAlert")
+	 public Result<IPage<SaleDeliveryAlert>> selectSaleDeliveryAlert(SaleDeliveryAlert saleInquiryForm,
+																	   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+																	   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+																	   HttpServletRequest req) {
+
+		 QueryWrapper<SaleDeliveryAlert> queryWrapper = QueryGenerator.initQueryWrapper(saleInquiryForm, req.getParameterMap());
+		 Page<SaleDeliveryAlert> page = new Page<SaleDeliveryAlert>(pageNo, pageSize);
+		 IPage<SaleDeliveryAlert> pageList = saleDeliveryDetailsService.selectSaleDeliveryAlert(page, queryWrapper);
+		 return Result.OK(pageList);
+	 }
+
+	 /**
+	 *   添加
+	 *
+	 * @param saleDeliveryPage
+	 * @return
+	 */
+	@AutoLog(value = "发货通知单(delivery notice)-添加")
+	@ApiOperation(value="发货通知单(delivery notice)-添加", notes="发货通知单(delivery notice)-添加")
+    @RequiresPermissions("saleCode:sale_delivery:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody SaleDeliveryPage saleDeliveryPage) {
+		SaleDelivery saleDelivery = new SaleDelivery();
+		BeanUtils.copyProperties(saleDeliveryPage, saleDelivery);
+
+		String code = saleDelivery.getBillCode();
+		if (StringUtils.isNotBlank(code)) {
+
+			QueryWrapper<SaleDelivery> queryWrapper = new QueryWrapper();
+			queryWrapper.eq("bill_code", code);
+			queryWrapper.eq("del_flag", "0");
+
+			List<SaleDelivery> list = saleDeliveryService.list(queryWrapper);
+			if (list.size() != 0) {
+				return Result.error("发货单编码重复,请修改!");
+			}
+		} else {
+
+			Result<String> result = serialPatternService.getNextSerial("sale_delivery", "bill_code");
+			if (!result.isSuccess()) {
+				return result;
+			}
+			saleDelivery.setBillCode(result.getMessage());
+		}
+
+		saleDeliveryService.saveMain(saleDelivery, saleDeliveryPage.getSaleDeliveryShipList(),saleDeliveryPage.getSaleDeliveryDetailsList());
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param saleDeliveryPage
+	 * @return
+	 */
+	@AutoLog(value = "发货通知单(delivery notice)-编辑")
+	@ApiOperation(value="发货通知单(delivery notice)-编辑", notes="发货通知单(delivery notice)-编辑")
+    @RequiresPermissions("saleCode:sale_delivery:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody SaleDeliveryPage saleDeliveryPage) {
+		SaleDelivery saleDelivery = new SaleDelivery();
+		BeanUtils.copyProperties(saleDeliveryPage, saleDelivery);
+		SaleDelivery saleDeliveryEntity = saleDeliveryService.getById(saleDelivery.getId());
+		if(saleDeliveryEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		saleDeliveryService.updateMain(saleDelivery, saleDeliveryPage.getSaleDeliveryShipList(),saleDeliveryPage.getSaleDeliveryDetailsList());
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "发货通知单(delivery notice)-通过id删除")
+	@ApiOperation(value="发货通知单(delivery notice)-通过id删除", notes="发货通知单(delivery notice)-通过id删除")
+    @RequiresPermissions("saleCode:sale_delivery:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+
+		SaleDelivery saleDeliveryEntity = saleDeliveryService.getById(id);
+		if(saleDeliveryEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		// 提交(submit) 1是0否
+		String submit = saleDeliveryEntity.getSubmit();
+		if (submit != null && submit != "" && submit.equals("1")) {
+			return Result.error("已提交的单据不能删除!");
+		}
+
+		saleDeliveryService.delMain(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "发货通知单(delivery notice)-批量删除")
+	@ApiOperation(value="发货通知单(delivery notice)-批量删除", notes="发货通知单(delivery notice)-批量删除")
+    @RequiresPermissions("saleCode:sale_delivery:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		for (String o : ids.split(",")) {
+
+			SaleDelivery saleDeliveryEntity = saleDeliveryService.getById(o);
+			if(saleDeliveryEntity==null) {
+				return Result.error("未找到对应数据");
+			}
+			// 提交(submit) 1是0否
+			String submit = saleDeliveryEntity.getSubmit();
+			String code = saleDeliveryEntity.getBillCode();
+
+			if (submit != null && submit != "" && submit.equals("1")) {
+				return Result.error("单号"+code+"已提交,不能删除!");
+			}
+		}
+
+		this.saleDeliveryService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+
+	 /**
+	  * 批量关闭
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "发货通知单-批量关闭")
+	 @ApiOperation(value = "发货通知单-批量关闭", notes = "发货通知单-批量关闭")
+	 @GetMapping(value = "/closeBatch")
+	 public Result<String> closeBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<SaleDelivery> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<SaleDelivery> list = saleDeliveryService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (SaleDelivery o : list) {
+			 // 1-已关闭,0-未关闭
+			 String close = o.getClose();
+			 String code = o.getBillCode();
+
+			 if (close != null && close != "" && close.equals("1")) {
+				 sb.append("单据编码" + code).append("已关闭,请勿再次关闭;");
+				 continue;
+			 }
+		 }
+
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 SaleDelivery ent = new SaleDelivery();
+		 ent.setClose("1");
+		 saleDeliveryService.update(ent, queryWrapper);
+
+		 return Result.OK("提交关闭!");
+	 }
+
+	 /**
+	  * 批量提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "发货通知单-批量提交")
+	 @ApiOperation(value = "发货通知单-批量提交", notes = "发货通知单-批量提交")
+	 @GetMapping(value = "/submitBatch")
+	 public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<SaleDelivery> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<SaleDelivery> list = saleDeliveryService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (SaleDelivery o : list) {
+		 	 //关闭(close)1是0否
+			 String close = o.getClose();
+			 // 1-已提交,0-未提交
+			 String submit = o.getSubmit();
+			 String code = o.getBillCode();
+
+			 if (close != null && close != "" && close.equals("1")) {
+				 sb.append("单据编码" + code).append("已关闭,无法操作;");
+				 continue;
+			 }
+			 if (submit != null && submit != "" && submit.equals("1")) {
+				 sb.append("单据编码" + code).append("已提交,请勿再次提交;");
+				 continue;
+			 }
+		 }
+
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 SaleDelivery ent = new SaleDelivery();
+		 ent.setSubmit("1");
+		 saleDeliveryService.update(ent, queryWrapper);
+
+		 return Result.OK("提交成功!");
+	 }
+
+	 /**
+	  * 批量取消提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "发货通知单-批量取消提交")
+	 @ApiOperation(value = "发货通知单-批量取消提交", notes = "发货通知单-批量取消提交")
+	 @GetMapping(value = "/returnSubmitBatch")
+	 public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<SaleDelivery> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<SaleDelivery> list = saleDeliveryService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (SaleDelivery o : list) {
+			 //关闭(close)1是0否
+			 String close = o.getClose();
+			 // 1-已提交,0-未提交
+			 String submit = o.getSubmit();
+			 String code = o.getBillCode();
+
+			 if (close != null && close != "" && close.equals("1")) {
+				 sb.append("单据编码" + code).append("已关闭,无法操作;");
+				 continue;
+			 }
+			 if (submit == null || submit == "" || submit.equals("0")) {
+				 sb.append("单号" + code).append("已取消提交,请勿再次取消提交;");
+				 continue;
+			 }
+
+		 }
+
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 SaleDelivery ent = new SaleDelivery();
+		 ent.setSubmit("0");
+		 saleDeliveryService.update(ent, queryWrapper);
+
+		 return Result.OK("取消提交成功!");
+	 }
+
+
+
+
+	 /**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "发货通知单(delivery notice)-通过id查询")
+	@ApiOperation(value="发货通知单(delivery notice)-通过id查询", notes="发货通知单(delivery notice)-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<SaleDelivery> queryById(@RequestParam(name="id",required=true) String id) {
+		SaleDelivery saleDelivery = saleDeliveryService.getById(id);
+		if(saleDelivery==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(saleDelivery);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "发货通知单 - 船明细通过主表ID查询")
+	@ApiOperation(value="发货通知单 - 船明细主表ID查询", notes="发货通知单 - 船明细-通主表ID查询")
+	@GetMapping(value = "/querySaleDeliveryShipByMainId")
+	public Result<List<SaleDeliveryShip>> querySaleDeliveryShipListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<SaleDeliveryShip> saleDeliveryShipList = saleDeliveryShipService.selectByMainId(id);
+		return Result.OK(saleDeliveryShipList);
+	}
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "发货通知单 - 产品明细通过主表ID查询")
+	@ApiOperation(value="发货通知单 - 产品明细主表ID查询", notes="发货通知单 - 产品明细-通主表ID查询")
+	@GetMapping(value = "/querySaleDeliveryDetailsByMainId")
+	public Result<List<SaleDeliveryDetails>> querySaleDeliveryDetailsListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<SaleDeliveryDetails> saleDeliveryDetailsList = saleDeliveryDetailsService.selectByMainId(id);
+		return Result.OK(saleDeliveryDetailsList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param saleDelivery
+    */
+    @RequiresPermissions("saleCode:sale_delivery:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, SaleDelivery saleDelivery) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<SaleDelivery> queryWrapper = QueryGenerator.initQueryWrapper(saleDelivery, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //配置选中数据查询条件
+      String selections = request.getParameter("selections");
+      if(oConvertUtils.isNotEmpty(selections)) {
+         List<String> selectionList = Arrays.asList(selections.split(","));
+         queryWrapper.in("id",selectionList);
+      }
+      //Step.2 获取导出数据
+      List<SaleDelivery> saleDeliveryList = saleDeliveryService.list(queryWrapper);
+
+      // Step.3 组装pageList
+      List<SaleDeliveryPage> pageList = new ArrayList<SaleDeliveryPage>();
+      for (SaleDelivery main : saleDeliveryList) {
+          SaleDeliveryPage vo = new SaleDeliveryPage();
+          BeanUtils.copyProperties(main, vo);
+          List<SaleDeliveryShip> saleDeliveryShipList = saleDeliveryShipService.selectByMainId(main.getId());
+          vo.setSaleDeliveryShipList(saleDeliveryShipList);
+          List<SaleDeliveryDetails> saleDeliveryDetailsList = saleDeliveryDetailsService.selectByMainId(main.getId());
+          vo.setSaleDeliveryDetailsList(saleDeliveryDetailsList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "发货通知单(delivery notice)列表");
+      mv.addObject(NormalExcelConstants.CLASS, SaleDeliveryPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("发货通知单(delivery notice)数据", "导出人:"+sysUser.getRealname(), "发货通知单(delivery notice)"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("saleCode:sale_delivery:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          // 获取上传文件对象
+          MultipartFile file = entity.getValue();
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<SaleDeliveryPage> list = ExcelImportUtil.importExcel(file.getInputStream(), SaleDeliveryPage.class, params);
+              for (SaleDeliveryPage page : list) {
+                  SaleDelivery po = new SaleDelivery();
+                  BeanUtils.copyProperties(page, po);
+                  saleDeliveryService.saveMain(po, page.getSaleDeliveryShipList(),page.getSaleDeliveryDetailsList());
+              }
+              return Result.OK("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.OK("文件导入失败!");
+    }
+
+}

+ 30 - 5
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleOrderController.java

@@ -3,20 +3,18 @@ package org.jeecg.modules.saleCode.controller;
 import java.io.UnsupportedEncodingException;
 import java.io.IOException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
-import java.util.HashMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.purCode.vo.PurOrderAlert;
 import org.jeecg.modules.saleCode.entity.*;
 import org.jeecg.modules.saleCode.service.ISaleOrderHisService;
+import org.jeecg.modules.saleCode.vo.SaleOrderAlert;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -94,6 +92,30 @@ public class SaleOrderController {
         return Result.OK(pageList);
     }
 
+
+    /**
+     * 销售订单弹框明细
+     *
+     * @param saleInquiryForm
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "销售订单弹框明细", notes = "销售订单弹框明细")
+    @GetMapping(value = "/selectSaleOrderDetailAlert")
+    public Result<IPage<SaleOrderAlert>> selectContractDetailAlert(SaleOrderAlert saleInquiryForm,
+                                                                  @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                  @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                  HttpServletRequest req) {
+
+        QueryWrapper<SaleOrderAlert> queryWrapper = QueryGenerator.initQueryWrapper(saleInquiryForm, req.getParameterMap());
+        Page<SaleOrderAlert> page = new Page<SaleOrderAlert>(pageNo, pageSize);
+        IPage<SaleOrderAlert> pageList = saleOrderProductService.selectSaleOrderDetailAlert(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+
     /**
      * 添加
      *
@@ -437,6 +459,9 @@ public class SaleOrderController {
 
         SaleOrder ent = new SaleOrder();
         ent.setStatus(1);
+        LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+        ent.setConfirmBy(sysUser.getUsername());
+        ent.setConfirmTime(new Date());
         saleOrderService.update(ent, queryWrapper);
 
         return Result.OK("确认成功!");

+ 4 - 4
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleQuotationController.java

@@ -1,10 +1,7 @@
 package org.jeecg.modules.saleCode.controller;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -321,6 +318,9 @@ public class SaleQuotationController {
 
         SaleQuotation ent = new SaleQuotation();
         ent.setStatus(1);
+        LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+        ent.setConfirmBy(sysUser.getUsername());
+        ent.setConfirmTime(new Date());
         saleQuotationService.update(ent, queryWrapper);
 
         return Result.OK("确认成功!");

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContract.java

@@ -97,6 +97,7 @@ public class SaleContract implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -148,6 +149,7 @@ public class SaleContract implements Serializable {
 	@Excel(name = "版本号", width = 15)
     @ApiModelProperty(value = "版本号")
     private String version;
+    private String sourceCode;
 	/**关闭(1-是,0-否)*/
 	@Excel(name = "关闭(1-是,0-否)", width = 15)
     @ApiModelProperty(value = "关闭(1-是,0-否)")

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractHis.java

@@ -98,6 +98,7 @@ public class SaleContractHis implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -152,4 +153,5 @@ public class SaleContractHis implements Serializable {
     @ApiModelProperty(value = "关闭(1-是,0-否)")
     @Dict(dicCode = "yes_or_no")
     private Integer isClose;
+    private String sourceCode;
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractProduct.java

@@ -142,4 +142,8 @@ public class SaleContractProduct implements Serializable {
 	@Excel(name = "备注(notes)", width = 15)
     @ApiModelProperty(value = "备注(notes)")
     private String notes;
+    private String sourceId;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleContractProductHis.java

@@ -150,4 +150,8 @@ public class SaleContractProductHis implements Serializable {
 	@Excel(name = "备注(notes)", width = 15)
     @ApiModelProperty(value = "备注(notes)")
     private String notes;
+    private String sourceId;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 187 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDelivery.java

@@ -0,0 +1,187 @@
+package org.jeecg.modules.saleCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="sale_delivery对象", description="发货通知单(delivery notice)")
+@Data
+@TableName("sale_delivery")
+public class SaleDelivery implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**关闭(close)1是0否*/
+	@Excel(name = "关闭(close)1是0否", width = 15)
+    @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String close;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**发货日期*/
+	@Excel(name = "发货日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "发货日期")
+    private Date deliveryDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+    @ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+    @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**币种(currency)*/
+	@Excel(name = "币种(currency)", width = 15)
+    @ApiModelProperty(value = "币种(currency)")
+    private String currency;
+	/**交货条款(delivery terms)*/
+	@Excel(name = "交货条款(delivery terms)", width = 15)
+    @ApiModelProperty(value = "交货条款(delivery terms)")
+    private String deliveryTerms;
+	/**发货方式(delivery type)*/
+	@Excel(name = "发货方式(delivery type)", width = 15)
+    @ApiModelProperty(value = "发货方式(delivery type)")
+    private String delivery;
+	/**交货地点(delivery address)*/
+	@Excel(name = "交货地点(delivery address)", width = 15)
+    @ApiModelProperty(value = "交货地点(delivery address)")
+    private String deliveryAddress;
+	/**质保期(warranty period)*/
+	@Excel(name = "质保期(warranty period)", width = 15)
+    @ApiModelProperty(value = "质保期(warranty period)")
+    private String warrantyPeriod;
+	/**是否出口(export) 1是0否*/
+	@Excel(name = "是否出口(export) 1是0否", width = 15)
+    @ApiModelProperty(value = "是否出口(export) 1是0否")
+    private String isExport;
+	/**销售部门(sale department)*/
+	@Excel(name = "销售部门(sale department)", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)")
+    private String saleDepartment;
+	/**业务员(salesman)*/
+	@Excel(name = "业务员(salesman)", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)")
+    private String salesman;
+	/**销售部门(sale department)名称*/
+	@Excel(name = "销售部门(sale department)名称", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)名称")
+    private String saleDepartmentName;
+	/**业务员(salesman)名称*/
+	@Excel(name = "业务员(salesman)名称", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)名称")
+    private String salesmanName;
+	/**包装要求(packageb requirement)*/
+	@Excel(name = "包装要求(packageb requirement)", width = 15)
+    @ApiModelProperty(value = "包装要求(packageb requirement)")
+    private String packagebRequirement;
+	/**收货地址(address)*/
+	@Excel(name = "收货地址(address)", width = 15)
+    @ApiModelProperty(value = "收货地址(address)")
+    private String address;
+	/**联系人(linkman)*/
+	@Excel(name = "联系人(linkman)", width = 15)
+    @ApiModelProperty(value = "联系人(linkman)")
+    private String linkMan;
+	/**联系电话(linknumber)*/
+	@Excel(name = "联系电话(linknumber)", width = 15)
+    @ApiModelProperty(value = "联系电话(linknumber)")
+    private String linkNumber;
+	/**F号(F number)*/
+	@Excel(name = "F号(F number)", width = 15)
+    @ApiModelProperty(value = "F号(F number)")
+    private String fnumber;
+	/**提单号(B/L NO)*/
+	@Excel(name = "提单号(B/L NO)", width = 15)
+    @ApiModelProperty(value = "提单号(B/L NO)")
+    private String blno;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**来源*/
+	@Excel(name = "来源", width = 15)
+    @ApiModelProperty(value = "来源")
+    private String sourceCode;
+}

+ 150 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDeliveryDetails.java

@@ -0,0 +1,150 @@
+package org.jeecg.modules.saleCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 发货通知单 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="sale_delivery_details对象", description="发货通知单 - 产品明细")
+@Data
+@TableName("sale_delivery_details")
+public class SaleDeliveryDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(发货通知单)*/
+    @ApiModelProperty(value = "表头主键(发货通知单)")
+    private String headId;
+	/**交期*/
+	@Excel(name = "交期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "交期")
+    private Date deliveryTime;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**订货号*/
+	@Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+	/**厂家*/
+	@Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**订单数量(order quantity)*/
+	@Excel(name = "订单数量(order quantity)", width = 15)
+    @ApiModelProperty(value = "订单数量(order quantity)")
+    private java.math.BigDecimal orderQuantity;
+	/**订单金额(order money)*/
+	@Excel(name = "订单金额(order money)", width = 15)
+    @ApiModelProperty(value = "订单金额(order money)")
+    private java.math.BigDecimal orderMoney;
+	/**已发货数量(delivery quantity)*/
+	@Excel(name = "已发货数量(delivery quantity)", width = 15)
+    @ApiModelProperty(value = "已发货数量(delivery quantity)")
+    private java.math.BigDecimal deliveryQuantity;
+	/**已发货金额(delivery money)*/
+	@Excel(name = "已发货金额(delivery money)", width = 15)
+    @ApiModelProperty(value = "已发货金额(delivery money)")
+    private java.math.BigDecimal deliveryMoney;
+	/**数量(quantity)*/
+	@Excel(name = "数量(quantity)", width = 15)
+    @ApiModelProperty(value = "数量(quantity)")
+    private java.math.BigDecimal quantity;
+	/**金额(money)*/
+	@Excel(name = "金额(money)", width = 15)
+    @ApiModelProperty(value = "金额(money)")
+    private java.math.BigDecimal money;
+	/*
+	单价
+	 */
+    private java.math.BigDecimal taxPrice;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+    private String sourceId;
+}

+ 87 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleDeliveryShip.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.saleCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 发货通知单 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="sale_delivery_ship对象", description="发货通知单 - 船明细")
+@Data
+@TableName("sale_delivery_ship")
+public class SaleDeliveryShip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(发货通知单)*/
+    @ApiModelProperty(value = "表头主键(发货通知单)")
+    private String headId;
+	/**船id*/
+	@Excel(name = "船id", width = 15)
+    @ApiModelProperty(value = "船id")
+    private String shipId;
+	/**船名*/
+	@Excel(name = "船名", width = 15)
+    @ApiModelProperty(value = "船名")
+    private String shipName;
+	/**主机号*/
+	@Excel(name = "主机号", width = 15)
+    @ApiModelProperty(value = "主机号")
+    private String hostNumber;
+	/**工程编号*/
+	@Excel(name = "工程编号", width = 15)
+    @ApiModelProperty(value = "工程编号")
+    private String projectNo;
+	/**船厂*/
+	@Excel(name = "船厂", width = 15)
+    @ApiModelProperty(value = "船厂")
+    private String shipFactory;
+	/**船东*/
+	@Excel(name = "船东", width = 15)
+    @ApiModelProperty(value = "船东")
+    private String shipowner;
+}

+ 6 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleInquiryForm.java

@@ -72,6 +72,12 @@ public class SaleInquiryForm implements Serializable {
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "单据日期(bill date)")
     private Date billDate;
+	/**询价日期(inquiry date)*/
+	@Excel(name = "询价日期(inquiry date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "询价日期(inquiry date)")
+    private Date inquiryTime;
 	/**询价单号(bill code)*/
 	@Excel(name = "询价单号(bill code)", width = 15)
     @ApiModelProperty(value = "询价单号(bill code)")

+ 13 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrder.java

@@ -33,6 +33,14 @@ public class SaleOrder implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -115,6 +123,7 @@ public class SaleOrder implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -150,6 +159,10 @@ public class SaleOrder implements Serializable {
 	@Excel(name = "发货方式(delivery)", width = 15)
     @ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+	/**运输方式(delivery)*/
+	@Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
 	/**交货地点(delivery address)*/
 	@Excel(name = "交货地点(delivery address)", width = 15)
     @ApiModelProperty(value = "交货地点(delivery address)")

+ 14 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderHis.java

@@ -37,6 +37,14 @@ public class SaleOrderHis implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -115,6 +123,7 @@ public class SaleOrderHis implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -150,6 +159,11 @@ public class SaleOrderHis implements Serializable {
 	@Excel(name = "发货方式(delivery)", width = 15)
     @ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+
+    /**运输方式(delivery)*/
+    @Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
 	/**交货地点(delivery address)*/
 	@Excel(name = "交货地点(delivery address)", width = 15)
     @ApiModelProperty(value = "交货地点(delivery address)")

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderProduct.java

@@ -151,4 +151,7 @@ public class SaleOrderProduct implements Serializable {
     @ApiModelProperty(value = "参照来源")
     private String sourceId;
     private String sourceType;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleOrderProductHis.java

@@ -159,4 +159,7 @@ public class SaleOrderProductHis implements Serializable {
     @ApiModelProperty(value = "历史表头主键(销售订单)")
     private String hisHeadId;
     private String sourceType;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 9 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotation.java

@@ -33,6 +33,14 @@ public class SaleQuotation implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;
@@ -108,6 +116,7 @@ public class SaleQuotation implements Serializable {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
     @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)

+ 8 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationHis.java

@@ -37,6 +37,14 @@ public class SaleQuotationHis implements Serializable {
 	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键id")
     private String id;
+    /**确认人*/
+    @ApiModelProperty(value = "确认人")
+    private String confirmBy;
+    /**确认时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "确认时间")
+    private Date confirmTime;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private String createBy;

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationProduct.java

@@ -171,4 +171,7 @@ public class SaleQuotationProduct implements Serializable {
     @ApiModelProperty(value = "备注(notes)")
     private String notes;
     private String sourceId;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/entity/SaleQuotationProductHis.java

@@ -179,4 +179,7 @@ public class SaleQuotationProductHis implements Serializable {
     @ApiModelProperty(value = "备注(notes)")
     private String notes;
     private String sourceId;
+    //来源单据供应商
+    private String supplierId;
+    private String supplierName;
 }

+ 39 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryDetailsMapper.java

@@ -0,0 +1,39 @@
+package org.jeecg.modules.saleCode.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.saleCode.vo.SaleDeliveryAlert;
+
+/**
+ * @Description: 发货通知单 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface SaleDeliveryDetailsMapper extends BaseMapper<SaleDeliveryDetails> {
+
+	/**
+	 * 通过主表id删除子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 通过主表id查询子表数据
+   *
+   * @param mainId 主表id
+   * @return List<SaleDeliveryDetails>
+   */
+	public List<SaleDeliveryDetails> selectByMainId(@Param("mainId") String mainId);
+
+	public IPage<SaleDeliveryAlert> selectSaleDeliveryAlert(Page<SaleDeliveryAlert> page, @Param("ew") QueryWrapper<SaleDeliveryAlert> queryWrapper);
+
+}

+ 17 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.saleCode.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.saleCode.entity.SaleDelivery;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface SaleDeliveryMapper extends BaseMapper<SaleDelivery> {
+
+}

+ 31 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleDeliveryShipMapper.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.saleCode.mapper;
+
+import java.util.List;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 发货通知单 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface SaleDeliveryShipMapper extends BaseMapper<SaleDeliveryShip> {
+
+	/**
+	 * 通过主表id删除子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 通过主表id查询子表数据
+   *
+   * @param mainId 主表id
+   * @return List<SaleDeliveryShip>
+   */
+	public List<SaleDeliveryShip> selectByMainId(@Param("mainId") String mainId);
+}

+ 9 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/SaleOrderProductMapper.java

@@ -1,9 +1,15 @@
 package org.jeecg.modules.saleCode.mapper;
 
 import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.purCode.vo.PurOrderAlert;
 import org.jeecg.modules.saleCode.entity.SaleOrderProduct;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.saleCode.vo.SaleOrderAlert;
 
 /**
  * @Description: 销售订单子表 - 产品明细
@@ -28,4 +34,7 @@ public interface SaleOrderProductMapper extends BaseMapper<SaleOrderProduct> {
    * @return List<SaleOrderProduct>
    */
 	public List<SaleOrderProduct> selectByMainId(@Param("mainId") String mainId);
+
+	public IPage<SaleOrderAlert> selectSaleOrderDetailAlert(Page<SaleOrderAlert> page, @Param("ew") QueryWrapper<SaleOrderAlert> queryWrapper);
+
 }

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleContractProductMapper.xml

@@ -41,6 +41,8 @@
                    , b.tax_price
                    , b.tax_amount
                    , b.unit
+                   , b.supplier_id
+                   , b.supplier_name
                    , b.notes         childNotes
 
                    , d.id            intermediator

+ 55 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryDetailsMapper.xml

@@ -0,0 +1,55 @@
+<?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="org.jeecg.modules.saleCode.mapper.SaleDeliveryDetailsMapper">
+
+    <delete id="deleteByMainId" parameterType="java.lang.String">
+        DELETE
+        FROM sale_delivery_details
+        WHERE head_id = #{mainId}    </delete>
+
+    <select id="selectByMainId" parameterType="java.lang.String"
+            resultType="org.jeecg.modules.saleCode.entity.SaleDeliveryDetails">
+        SELECT *
+        FROM sale_delivery_details
+        WHERE head_id = #{mainId}    </select>
+
+    <select id="selectSaleDeliveryAlert" parameterType="java.lang.String"
+            resultType="org.jeecg.modules.saleCode.vo.SaleDeliveryAlert">
+        select *
+        from (select a.id            headId
+                   , b.id            child_id
+                   , a.model         head_model
+                   , b.model         child_model
+
+                   , b.delivery_time delivery_time
+                   , a.*
+                   , b.product_id
+                   , b.product_class
+                   , b.product_code
+                   , b.chinese_name
+                   , b.english_name
+                   , b.specifications
+                   , b.partno
+                   , b.drawingno
+                   , b.orderno
+                   , b.factory
+                   , b.quality_grade
+                   , b.quantity
+                   , b.tax_price
+                   , b.money
+                   , b.delivery_money
+                   , b.delivery_quantity
+                   , b.order_money
+                   , b.order_quantity
+                   , b.notes         childNotes
+              from sale_delivery a
+                       left join sale_delivery_details b on a.id = b.head_id
+              where a.del_flag = 0
+                and a.submit = 1
+                and a.close = 0
+                and b.del_flag = 0
+             ) a
+            ${ew.customSqlSegment}
+
+    </select>
+</mapper>

+ 5 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.saleCode.mapper.SaleDeliveryMapper">
+
+</mapper>

+ 16 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleDeliveryShipMapper.xml

@@ -0,0 +1,16 @@
+<?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="org.jeecg.modules.saleCode.mapper.SaleDeliveryShipMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  sale_delivery_ship 
+		WHERE
+			 head_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.saleCode.entity.SaleDeliveryShip">
+		SELECT * 
+		FROM  sale_delivery_ship
+		WHERE
+			 head_id = #{mainId} 	</select>
+</mapper>

+ 43 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleOrderProductMapper.xml

@@ -13,4 +13,47 @@
 		FROM  sale_order_product
 		WHERE
 			 head_id = #{mainId} 	</select>
+
+
+	<select id="selectSaleOrderDetailAlert" parameterType="java.lang.String" resultType="org.jeecg.modules.saleCode.vo.SaleOrderAlert">
+		select *
+		from (  select a.id            headId
+					 , b.id            child_id
+					 , a.model         head_model
+					 , b.model         child_model
+
+					 , b.delivery_time child_delivery_time
+					 , a.*
+					 , b.product_id
+					 , b.product_code
+					 , b.chinese_name
+					 , b.english_name
+					 , b.specifications
+					 , b.partno
+					 , b.drawingno
+					 , b.orderno
+					 , b.factory
+					 , b.quality_grade
+					 , b.quantity
+					 , b.product_class
+
+					 ,b.tax_price
+					 ,b.tax_amount
+					 ,b.discounted_amount
+					 ,b.discounted_price
+					 ,b.discount
+					 ,b.tax_rate
+					 , b.notes childNotes
+					 , b.supplier_id
+					 , b.supplier_name
+
+				from sale_order a
+						 left join sale_order_product b on a.id = b.head_id
+
+				where a.del_flag = 0
+				  and a.submit = 1
+				  and b.del_flag = 0
+			 ) a
+			${ew.customSqlSegment}
+	</select>
 </mapper>

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/mapper/xml/SaleQuotationProductMapper.xml

@@ -39,6 +39,18 @@
 					  , b.quantity
 					  , b.unit
 					  , b.notes
+					  , b.purchase_price
+					  , b.tax_rate
+					  , b.tariff
+					  , b.gross_margin
+					  , b.discount
+					  , b.customer_commision
+					  , b.intermediator_commission
+					  , b.tax_amount
+					  , b.last_price
+					  , b.sale_price
+					  , b.supplier_id
+					  , b.supplier_name
 					  , d.id intermediator
 					  , d.name intermediatorName
 				 from sale_quotation a

+ 30 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryDetailsService.java

@@ -0,0 +1,30 @@
+package org.jeecg.modules.saleCode.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.saleCode.vo.SaleDeliveryAlert;
+
+import java.util.List;
+
+/**
+ * @Description: 发货通知单 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface ISaleDeliveryDetailsService extends IService<SaleDeliveryDetails> {
+
+	/**
+	 * 通过主表id查询子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return List<SaleDeliveryDetails>
+	 */
+	public List<SaleDeliveryDetails> selectByMainId(String mainId);
+
+
+	public IPage<SaleDeliveryAlert> selectSaleDeliveryAlert(Page<SaleDeliveryAlert> page, QueryWrapper<SaleDeliveryAlert> queryWrapper);
+}

+ 51 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryService.java

@@ -0,0 +1,51 @@
+package org.jeecg.modules.saleCode.service;
+
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import org.jeecg.modules.saleCode.entity.SaleDelivery;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface ISaleDeliveryService extends IService<SaleDelivery> {
+
+	/**
+	 * 添加一对多
+	 *
+	 * @param saleDelivery
+	 * @param saleDeliveryShipList
+	 * @param saleDeliveryDetailsList
+	 */
+	public void saveMain(SaleDelivery saleDelivery,List<SaleDeliveryShip> saleDeliveryShipList,List<SaleDeliveryDetails> saleDeliveryDetailsList) ;
+	
+	/**
+	 * 修改一对多
+	 *
+   * @param saleDelivery
+   * @param saleDeliveryShipList
+   * @param saleDeliveryDetailsList
+	 */
+	public void updateMain(SaleDelivery saleDelivery,List<SaleDeliveryShip> saleDeliveryShipList,List<SaleDeliveryDetails> saleDeliveryDetailsList);
+	
+	/**
+	 * 删除一对多
+	 *
+	 * @param id
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 *
+	 * @param idList
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 22 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleDeliveryShipService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.saleCode.service;
+
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 发货通知单 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+public interface ISaleDeliveryShipService extends IService<SaleDeliveryShip> {
+
+	/**
+	 * 通过主表id查询子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return List<SaleDeliveryShip>
+	 */
+	public List<SaleDeliveryShip> selectByMainId(String mainId);
+}

+ 8 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/ISaleOrderProductService.java

@@ -1,7 +1,13 @@
 package org.jeecg.modules.saleCode.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.saleCode.entity.SaleOrderProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.saleCode.vo.SaleOrderAlert;
+
 import java.util.List;
 
 /**
@@ -19,4 +25,6 @@ public interface ISaleOrderProductService extends IService<SaleOrderProduct> {
 	 * @return List<SaleOrderProduct>
 	 */
 	public List<SaleOrderProduct> selectByMainId(String mainId);
+
+	public IPage<SaleOrderAlert> selectSaleOrderDetailAlert(Page<SaleOrderAlert> page,  QueryWrapper<SaleOrderAlert> queryWrapper);
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleContractServiceImpl.java

@@ -38,6 +38,7 @@ public class SaleContractServiceImpl extends ServiceImpl<SaleContractMapper, Sal
 		if(saleContractShipList!=null && saleContractShipList.size()>0) {
 			for(SaleContractShip entity:saleContractShipList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleContract.getId());
 				saleContractShipMapper.insert(entity);
 			}
@@ -45,6 +46,7 @@ public class SaleContractServiceImpl extends ServiceImpl<SaleContractMapper, Sal
 		if(saleContractProductList!=null && saleContractProductList.size()>0) {
 			for(SaleContractProduct entity:saleContractProductList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleContract.getId());
 				saleContractProductMapper.insert(entity);
 			}
@@ -64,6 +66,7 @@ public class SaleContractServiceImpl extends ServiceImpl<SaleContractMapper, Sal
 		if(saleContractShipList!=null && saleContractShipList.size()>0) {
 			for(SaleContractShip entity:saleContractShipList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleContract.getId());
 				saleContractShipMapper.insert(entity);
 			}
@@ -71,6 +74,7 @@ public class SaleContractServiceImpl extends ServiceImpl<SaleContractMapper, Sal
 		if(saleContractProductList!=null && saleContractProductList.size()>0) {
 			for(SaleContractProduct entity:saleContractProductList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleContract.getId());
 				saleContractProductMapper.insert(entity);
 			}

+ 39 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryDetailsServiceImpl.java

@@ -0,0 +1,39 @@
+package org.jeecg.modules.saleCode.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import org.jeecg.modules.saleCode.mapper.SaleDeliveryDetailsMapper;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryDetailsService;
+import org.jeecg.modules.saleCode.vo.SaleDeliveryAlert;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 发货通知单 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@Service
+public class SaleDeliveryDetailsServiceImpl extends ServiceImpl<SaleDeliveryDetailsMapper, SaleDeliveryDetails> implements ISaleDeliveryDetailsService {
+	
+	@Autowired
+	private SaleDeliveryDetailsMapper saleDeliveryDetailsMapper;
+	
+	@Override
+	public List<SaleDeliveryDetails> selectByMainId(String mainId) {
+		return saleDeliveryDetailsMapper.selectByMainId(mainId);
+	}
+
+
+	@Override
+	public IPage<SaleDeliveryAlert> selectSaleDeliveryAlert(Page<SaleDeliveryAlert> page,QueryWrapper<SaleDeliveryAlert> queryWrapper) {
+		return saleDeliveryDetailsMapper.selectSaleDeliveryAlert(page,queryWrapper);
+	}
+
+}

+ 98 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryServiceImpl.java

@@ -0,0 +1,98 @@
+package org.jeecg.modules.saleCode.service.impl;
+
+import org.jeecg.modules.saleCode.entity.SaleDelivery;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import org.jeecg.modules.saleCode.mapper.SaleDeliveryShipMapper;
+import org.jeecg.modules.saleCode.mapper.SaleDeliveryDetailsMapper;
+import org.jeecg.modules.saleCode.mapper.SaleDeliveryMapper;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@Service
+public class SaleDeliveryServiceImpl extends ServiceImpl<SaleDeliveryMapper, SaleDelivery> implements ISaleDeliveryService {
+
+	@Autowired
+	private SaleDeliveryMapper saleDeliveryMapper;
+	@Autowired
+	private SaleDeliveryShipMapper saleDeliveryShipMapper;
+	@Autowired
+	private SaleDeliveryDetailsMapper saleDeliveryDetailsMapper;
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveMain(SaleDelivery saleDelivery, List<SaleDeliveryShip> saleDeliveryShipList,List<SaleDeliveryDetails> saleDeliveryDetailsList) {
+		saleDeliveryMapper.insert(saleDelivery);
+		if(saleDeliveryShipList!=null && saleDeliveryShipList.size()>0) {
+			for(SaleDeliveryShip entity:saleDeliveryShipList) {
+				//外键设置
+				entity.setHeadId(saleDelivery.getId());
+				saleDeliveryShipMapper.insert(entity);
+			}
+		}
+		if(saleDeliveryDetailsList!=null && saleDeliveryDetailsList.size()>0) {
+			for(SaleDeliveryDetails entity:saleDeliveryDetailsList) {
+				//外键设置
+				entity.setHeadId(saleDelivery.getId());
+				saleDeliveryDetailsMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateMain(SaleDelivery saleDelivery,List<SaleDeliveryShip> saleDeliveryShipList,List<SaleDeliveryDetails> saleDeliveryDetailsList) {
+		saleDeliveryMapper.updateById(saleDelivery);
+		
+		//1.先删除子表数据
+		saleDeliveryShipMapper.deleteByMainId(saleDelivery.getId());
+		saleDeliveryDetailsMapper.deleteByMainId(saleDelivery.getId());
+		
+		//2.子表数据重新插入
+		if(saleDeliveryShipList!=null && saleDeliveryShipList.size()>0) {
+			for(SaleDeliveryShip entity:saleDeliveryShipList) {
+				//外键设置
+				entity.setHeadId(saleDelivery.getId());
+				saleDeliveryShipMapper.insert(entity);
+			}
+		}
+		if(saleDeliveryDetailsList!=null && saleDeliveryDetailsList.size()>0) {
+			for(SaleDeliveryDetails entity:saleDeliveryDetailsList) {
+				//外键设置
+				entity.setHeadId(saleDelivery.getId());
+				saleDeliveryDetailsMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delMain(String id) {
+		saleDeliveryShipMapper.deleteByMainId(id);
+		saleDeliveryDetailsMapper.deleteByMainId(id);
+		saleDeliveryMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			saleDeliveryShipMapper.deleteByMainId(id.toString());
+			saleDeliveryDetailsMapper.deleteByMainId(id.toString());
+			saleDeliveryMapper.deleteById(id);
+		}
+	}
+	
+}

+ 27 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleDeliveryShipServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.saleCode.service.impl;
+
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import org.jeecg.modules.saleCode.mapper.SaleDeliveryShipMapper;
+import org.jeecg.modules.saleCode.service.ISaleDeliveryShipService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 发货通知单 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@Service
+public class SaleDeliveryShipServiceImpl extends ServiceImpl<SaleDeliveryShipMapper, SaleDeliveryShip> implements ISaleDeliveryShipService {
+	
+	@Autowired
+	private SaleDeliveryShipMapper saleDeliveryShipMapper;
+	
+	@Override
+	public List<SaleDeliveryShip> selectByMainId(String mainId) {
+		return saleDeliveryShipMapper.selectByMainId(mainId);
+	}
+}

+ 11 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleOrderProductServiceImpl.java

@@ -1,8 +1,13 @@
 package org.jeecg.modules.saleCode.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.saleCode.entity.SaleOrderProduct;
 import org.jeecg.modules.saleCode.mapper.SaleOrderProductMapper;
 import org.jeecg.modules.saleCode.service.ISaleOrderProductService;
+import org.jeecg.modules.saleCode.vo.SaleOrderAlert;
 import org.springframework.stereotype.Service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,4 +29,10 @@ public class SaleOrderProductServiceImpl extends ServiceImpl<SaleOrderProductMap
 	public List<SaleOrderProduct> selectByMainId(String mainId) {
 		return saleOrderProductMapper.selectByMainId(mainId);
 	}
+
+
+	@Override
+	public IPage<SaleOrderAlert> selectSaleOrderDetailAlert(Page<SaleOrderAlert> page, QueryWrapper<SaleOrderAlert> queryWrapper){
+		return saleOrderProductMapper.selectSaleOrderDetailAlert(page,queryWrapper);
+	}
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleQuotationHisServiceImpl.java

@@ -38,6 +38,7 @@ public class SaleQuotationHisServiceImpl extends ServiceImpl<SaleQuotationHisMap
 		if(saleQuotationShipHisList!=null && saleQuotationShipHisList.size()>0) {
 			for(SaleQuotationShipHis entity:saleQuotationShipHisList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleQuotationHis.getId());
 				saleQuotationShipHisMapper.insert(entity);
 			}
@@ -45,6 +46,7 @@ public class SaleQuotationHisServiceImpl extends ServiceImpl<SaleQuotationHisMap
 		if(saleQuotationProductHisList!=null && saleQuotationProductHisList.size()>0) {
 			for(SaleQuotationProductHis entity:saleQuotationProductHisList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleQuotationHis.getId());
 				saleQuotationProductHisMapper.insert(entity);
 			}
@@ -64,6 +66,7 @@ public class SaleQuotationHisServiceImpl extends ServiceImpl<SaleQuotationHisMap
 		if(saleQuotationShipHisList!=null && saleQuotationShipHisList.size()>0) {
 			for(SaleQuotationShipHis entity:saleQuotationShipHisList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleQuotationHis.getId());
 				saleQuotationShipHisMapper.insert(entity);
 			}
@@ -71,6 +74,7 @@ public class SaleQuotationHisServiceImpl extends ServiceImpl<SaleQuotationHisMap
 		if(saleQuotationProductHisList!=null && saleQuotationProductHisList.size()>0) {
 			for(SaleQuotationProductHis entity:saleQuotationProductHisList) {
 				//外键设置
+				entity.setId(null);
 				entity.setHeadId(saleQuotationHis.getId());
 				saleQuotationProductHisMapper.insert(entity);
 			}

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleContractAlert.java

@@ -92,6 +92,7 @@ public class SaleContractAlert {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
 	@ApiModelProperty(value = "产品分类(production class)")
+	@Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
 	private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -232,6 +233,9 @@ public class SaleContractAlert {
 	@ApiModelProperty(value = "备注(childNotes)")
 	private String childNotes;
 
+	//供应商
+	private String supplierId;
+	private String supplierName;
 	/**
 	 * 中间人
 	 */

+ 1 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleContractPage.java

@@ -149,6 +149,7 @@ public class SaleContractPage {
 	@Dict(dicCode = "yes_or_no")
     private Integer isClose;
 
+	private String sourceCode;
 	@ExcelCollection(name="销售合同-船明细")
 	@ApiModelProperty(value = "销售合同-船明细")
 	private List<SaleContractShip> saleContractShipList;

+ 265 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleDeliveryAlert.java

@@ -0,0 +1,265 @@
+package org.jeecg.modules.saleCode.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 发货通知单弹框明细(deivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="SaleDeliveryAlert", description="发货通知单(delivery notice)")
+@Data
+public class SaleDeliveryAlert implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String headId;
+    private String childId;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**关闭(close)1是0否*/
+	@Excel(name = "关闭(close)1是0否", width = 15)
+    @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String close;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**发货日期*/
+	@Excel(name = "发货日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "发货日期")
+    private Date deliveryDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+    @ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+    @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String headModel;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**币种(currency)*/
+	@Excel(name = "币种(currency)", width = 15)
+    @ApiModelProperty(value = "币种(currency)")
+    private String currency;
+	/**交货条款(delivery terms)*/
+	@Excel(name = "交货条款(delivery terms)", width = 15)
+    @ApiModelProperty(value = "交货条款(delivery terms)")
+    private String deliveryTerms;
+	/**发货方式(delivery type)*/
+	@Excel(name = "发货方式(delivery type)", width = 15)
+    @ApiModelProperty(value = "发货方式(delivery type)")
+    private String delivery;
+	/**交货地点(delivery address)*/
+	@Excel(name = "交货地点(delivery address)", width = 15)
+    @ApiModelProperty(value = "交货地点(delivery address)")
+    private String deliveryAddress;
+	/**质保期(warranty period)*/
+	@Excel(name = "质保期(warranty period)", width = 15)
+    @ApiModelProperty(value = "质保期(warranty period)")
+    private String warrantyPeriod;
+	/**是否出口(export) 1是0否*/
+	@Excel(name = "是否出口(export) 1是0否", width = 15)
+    @ApiModelProperty(value = "是否出口(export) 1是0否")
+    private String isExport;
+	/**销售部门(sale department)*/
+	@Excel(name = "销售部门(sale department)", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)")
+    private String saleDepartment;
+	/**业务员(salesman)*/
+	@Excel(name = "业务员(salesman)", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)")
+    private String salesman;
+	/**销售部门(sale department)名称*/
+	@Excel(name = "销售部门(sale department)名称", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)名称")
+    private String saleDepartmentName;
+	/**业务员(salesman)名称*/
+	@Excel(name = "业务员(salesman)名称", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)名称")
+    private String salesmanName;
+	/**包装要求(packageb requirement)*/
+	@Excel(name = "包装要求(packageb requirement)", width = 15)
+    @ApiModelProperty(value = "包装要求(packageb requirement)")
+    private String packagebRequirement;
+	/**收货地址(address)*/
+	@Excel(name = "收货地址(address)", width = 15)
+    @ApiModelProperty(value = "收货地址(address)")
+    private String address;
+	/**联系人(linkman)*/
+	@Excel(name = "联系人(linkman)", width = 15)
+    @ApiModelProperty(value = "联系人(linkman)")
+    private String linkMan;
+	/**联系电话(linknumber)*/
+	@Excel(name = "联系电话(linknumber)", width = 15)
+    @ApiModelProperty(value = "联系电话(linknumber)")
+    private String linkNumber;
+	/**F号(F number)*/
+	@Excel(name = "F号(F number)", width = 15)
+    @ApiModelProperty(value = "F号(F number)")
+    private String fnumber;
+	/**提单号(B/L NO)*/
+	@Excel(name = "提单号(B/L NO)", width = 15)
+    @ApiModelProperty(value = "提单号(B/L NO)")
+    private String blno;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+
+    /**交期*/
+    @Excel(name = "交期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "交期")
+    private Date deliveryTime;
+    /**产品id*/
+    @Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+    /**产品分类*/
+    @Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+    /**产品编码*/
+    @Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+    /**产品中文名*/
+    @Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+    /**产品英文名*/
+    @Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+    /**规格*/
+    @Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+    /**型号*/
+    @Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String childModel;
+    /**备件号*/
+    @Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+    /**图号*/
+    @Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+    /**订货号*/
+    @Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+    /**厂家*/
+    @Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+    /**质量等级*/
+    @Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+    /**订单数量(order quantity)*/
+    @Excel(name = "订单数量(order quantity)", width = 15)
+    @ApiModelProperty(value = "订单数量(order quantity)")
+    private java.math.BigDecimal orderQuantity;
+    /**订单金额(order money)*/
+    @Excel(name = "订单金额(order money)", width = 15)
+    @ApiModelProperty(value = "订单金额(order money)")
+    private java.math.BigDecimal orderMoney;
+    /**已发货数量(delivery quantity)*/
+    @Excel(name = "已发货数量(delivery quantity)", width = 15)
+    @ApiModelProperty(value = "已发货数量(delivery quantity)")
+    private java.math.BigDecimal deliveryQuantity;
+    /**已发货金额(delivery money)*/
+    @Excel(name = "已发货金额(delivery money)", width = 15)
+    @ApiModelProperty(value = "已发货金额(delivery money)")
+    private java.math.BigDecimal deliveryMoney;
+    /**数量(quantity)*/
+    @Excel(name = "数量(quantity)", width = 15)
+    @ApiModelProperty(value = "数量(quantity)")
+    private java.math.BigDecimal quantity;
+    /**金额(money)*/
+    @Excel(name = "金额(money)", width = 15)
+    @ApiModelProperty(value = "金额(money)")
+    private java.math.BigDecimal money;
+    /*
+    单价
+     */
+    private java.math.BigDecimal taxPrice;
+    /**备注(notes)*/
+    @Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String childNotes;
+}

+ 187 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleDeliveryPage.java

@@ -0,0 +1,187 @@
+package org.jeecg.modules.saleCode.vo;
+
+import java.util.List;
+import org.jeecg.modules.saleCode.entity.SaleDelivery;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryShip;
+import org.jeecg.modules.saleCode.entity.SaleDeliveryDetails;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 发货通知单(delivery notice)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="sale_deliveryPage对象", description="发货通知单(delivery notice)")
+public class SaleDeliveryPage {
+
+	/**主键id*/
+	@ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+	@ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+	@ApiModelProperty(value = "提交(submit)1是0否")
+    private String submit;
+	/**关闭(close)1是0否*/
+	@Excel(name = "关闭(close)1是0否", width = 15)
+	@ApiModelProperty(value = "关闭(close)1是0否")
+    private String close;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+	@ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    private Integer delFlag;
+	/**发货日期*/
+	@Excel(name = "发货日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "发货日期")
+    private Date deliveryDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+	@ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+	@ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+	@ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+	@ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+	@ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+	@ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+	@ApiModelProperty(value = "优先级(priority)")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+	@ApiModelProperty(value = "产品分类(production class)")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+	@ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+	@ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**币种(currency)*/
+	@Excel(name = "币种(currency)", width = 15)
+	@ApiModelProperty(value = "币种(currency)")
+    private String currency;
+	/**交货条款(delivery terms)*/
+	@Excel(name = "交货条款(delivery terms)", width = 15)
+	@ApiModelProperty(value = "交货条款(delivery terms)")
+    private String deliveryTerms;
+	/**发货方式(delivery type)*/
+	@Excel(name = "发货方式(delivery type)", width = 15)
+	@ApiModelProperty(value = "发货方式(delivery type)")
+    private String delivery;
+	/**交货地点(delivery address)*/
+	@Excel(name = "交货地点(delivery address)", width = 15)
+	@ApiModelProperty(value = "交货地点(delivery address)")
+    private String deliveryAddress;
+	/**质保期(warranty period)*/
+	@Excel(name = "质保期(warranty period)", width = 15)
+	@ApiModelProperty(value = "质保期(warranty period)")
+    private String warrantyPeriod;
+	/**是否出口(export) 1是0否*/
+	@Excel(name = "是否出口(export) 1是0否", width = 15)
+	@ApiModelProperty(value = "是否出口(export) 1是0否")
+    private String isExport;
+	/**销售部门(sale department)*/
+	@Excel(name = "销售部门(sale department)", width = 15)
+	@ApiModelProperty(value = "销售部门(sale department)")
+    private String saleDepartment;
+	/**业务员(salesman)*/
+	@Excel(name = "业务员(salesman)", width = 15)
+	@ApiModelProperty(value = "业务员(salesman)")
+    private String salesman;
+	/**销售部门(sale department)名称*/
+	@Excel(name = "销售部门(sale department)名称", width = 15)
+	@ApiModelProperty(value = "销售部门(sale department)名称")
+    private String saleDepartmentName;
+	/**业务员(salesman)名称*/
+	@Excel(name = "业务员(salesman)名称", width = 15)
+	@ApiModelProperty(value = "业务员(salesman)名称")
+    private String salesmanName;
+	/**包装要求(packageb requirement)*/
+	@Excel(name = "包装要求(packageb requirement)", width = 15)
+	@ApiModelProperty(value = "包装要求(packageb requirement)")
+    private String packagebRequirement;
+	/**收货地址(address)*/
+	@Excel(name = "收货地址(address)", width = 15)
+	@ApiModelProperty(value = "收货地址(address)")
+    private String address;
+	/**联系人(linkman)*/
+	@Excel(name = "联系人(linkman)", width = 15)
+	@ApiModelProperty(value = "联系人(linkman)")
+    private String linkMan;
+	/**联系电话(linknumber)*/
+	@Excel(name = "联系电话(linknumber)", width = 15)
+	@ApiModelProperty(value = "联系电话(linknumber)")
+    private String linkNumber;
+	/**F号(F number)*/
+	@Excel(name = "F号(F number)", width = 15)
+	@ApiModelProperty(value = "F号(F number)")
+    private String fnumber;
+	/**提单号(B/L NO)*/
+	@Excel(name = "提单号(B/L NO)", width = 15)
+	@ApiModelProperty(value = "提单号(B/L NO)")
+    private String blno;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+	@ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**来源*/
+	@Excel(name = "来源", width = 15)
+	@ApiModelProperty(value = "来源")
+    private String sourceCode;
+
+	@ExcelCollection(name="发货通知单 - 船明细")
+	@ApiModelProperty(value = "发货通知单 - 船明细")
+	private List<SaleDeliveryShip> saleDeliveryShipList;
+	@ExcelCollection(name="发货通知单 - 产品明细")
+	@ApiModelProperty(value = "发货通知单 - 产品明细")
+	private List<SaleDeliveryDetails> saleDeliveryDetailsList;
+
+}

+ 321 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderAlert.java

@@ -0,0 +1,321 @@
+package org.jeecg.modules.saleCode.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 销售订单
+ * @Author: jeecg-boot
+ * @Date:   2024-11-27
+ * @Version: V1.0
+ */
+@ApiModel(value="SaleOrderAlert对象", description="销售订单")
+@Data
+public class SaleOrderAlert implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String headId;
+    private String childId;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**客户确认(1-已确认,0-未确认)*/
+	@Excel(name = "客户确认(1-已确认,0-未确认)", width = 15)
+    @ApiModelProperty(value = "客户确认(1-已确认,0-未确认)")
+    @Dict(dicCode = "customer_confirm")
+    private Integer status;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**关闭(close)1是0否*/
+	@Excel(name = "关闭(close)1是0否", width = 15)
+    @ApiModelProperty(value = "关闭(close)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String close;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+    @ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**中间人(intermediator)*/
+	@Excel(name = "中间人(intermediator)", width = 15)
+    @ApiModelProperty(value = "中间人(intermediator)")
+    private String intermediator;
+	/**中间人名称*/
+	@Excel(name = "中间人名称", width = 15)
+    @ApiModelProperty(value = "中间人名称")
+    private String intermediatorName;
+	/**优先级(priority)*/
+	@Excel(name = "优先级(priority)", width = 15)
+    @ApiModelProperty(value = "优先级(priority)")
+    @Dict(dicCode = "priority")
+    private String priority;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String headModel;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**币种(currency)*/
+	@Excel(name = "币种(currency)", width = 15)
+    @ApiModelProperty(value = "币种(currency)")
+    private String currency;
+	/**汇率(exchange rate)*/
+	@Excel(name = "汇率(exchange rate)", width = 15)
+    @ApiModelProperty(value = "汇率(exchange rate)")
+    private java.math.BigDecimal exchangeRate;
+	/**交货条款(delivery terms)*/
+	@Excel(name = "交货条款(delivery terms)", width = 15)
+    @ApiModelProperty(value = "交货条款(delivery terms)")
+    private String deliveryTerms;
+	/**付款条件(payment terms)*/
+	@Excel(name = "付款条件(payment terms)", width = 15)
+    @ApiModelProperty(value = "付款条件(payment terms)")
+    private String paymentTerms;
+	/**交期(delivery time)*/
+	@Excel(name = "交期(delivery time)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "交期(delivery time)")
+    private Date deliveryTime;
+	/**发货方式(delivery)*/
+	@Excel(name = "发货方式(delivery)", width = 15)
+    @ApiModelProperty(value = "发货方式(delivery)")
+    private String delivery;
+    /**运输方式(delivery)*/
+    @Excel(name = "运输方式(transport)", width = 15)
+    @ApiModelProperty(value = "运输方式(transport)")
+    private String transport;
+	/**交货地点(delivery address)*/
+	@Excel(name = "交货地点(delivery address)", width = 15)
+    @ApiModelProperty(value = "交货地点(delivery address)")
+    private String deliveryAddress;
+	/**开票抬头(Invoice header)*/
+	@Excel(name = "开票抬头(Invoice header)", width = 15)
+    @ApiModelProperty(value = "开票抬头(Invoice header)")
+    private String invoiceHeader;
+	/**质保期(warranty period)*/
+	@Excel(name = "质保期(warranty period)", width = 15)
+    @ApiModelProperty(value = "质保期(warranty period)")
+    private String warrantyPeriod;
+	/**是否出口(export) 1是0否*/
+	@Excel(name = "是否出口(export) 1是0否", width = 15)
+    @ApiModelProperty(value = "是否出口(export) 1是0否")
+    private String isExport;
+	/**包装要求(packageb requirement)*/
+	@Excel(name = "包装要求(packageb requirement)", width = 15)
+    @ApiModelProperty(value = "包装要求(packageb requirement)")
+    private String packagebRequirement;
+	/**销售部门(sale department)*/
+	@Excel(name = "销售部门(sale department)", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)")
+    private String saleDepartment;
+	/**业务员(salesman)*/
+	@Excel(name = "业务员(salesman)", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)")
+    private String salesman;
+	/**销售部门(sale department)名称*/
+	@Excel(name = "销售部门(sale department)名称", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)名称")
+    private String saleDepartmentName;
+	/**业务员(salesman)名称*/
+	@Excel(name = "业务员(salesman)名称", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)名称")
+    private String salesmanName;
+	/**附件(attachs)*/
+	@Excel(name = "附件(attachs)", width = 15)
+    @ApiModelProperty(value = "附件(attachs)")
+    private String attachs;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**客户订单号(customer order number)*/
+	@Excel(name = "客户订单号(customer order number)", width = 15)
+    @ApiModelProperty(value = "客户订单号(customer order number)")
+    private String customerOrder;
+	/**折上折(double discount)*/
+	@Excel(name = "折上折(double discount)", width = 15)
+    @ApiModelProperty(value = "折上折(double discount)")
+    private java.math.BigDecimal doubleDiscount;
+	/**折后金额(converted amount)*/
+	@Excel(name = "折后金额(converted amount)", width = 15)
+    @ApiModelProperty(value = "折后金额(converted amount)")
+    private String convertedAmount;
+	/**质保条款(warranty terms)*/
+	@Excel(name = "质保条款(warranty terms)", width = 15)
+    @ApiModelProperty(value = "质保条款(warranty terms)")
+    private String warrantyTerms;
+	/**预付比例(advance ratio)*/
+	@Excel(name = "预付比例(advance ratio)", width = 15)
+    @ApiModelProperty(value = "预付比例(advance ratio)")
+    private String advanceRatio;
+	/**版本号*/
+	@Excel(name = "版本号", width = 15)
+    @ApiModelProperty(value = "版本号")
+    private String version;
+
+//	/订单金额(order money)
+    private java.math.BigDecimal orderMoney;
+//    发货金额(delivery money)
+    private java.math.BigDecimal deliveryMoney;
+//    发票金额(invoice money)
+    private java.math.BigDecimal invoiceMoney;
+//    收款金额(collected money)
+    private java.math.BigDecimal collectedMoney;
+
+
+    /**交期*/
+    @Excel(name = "交期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "交期")
+    private Date childDeliveryTime;
+    /**产品id*/
+    @Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+    /**产品分类*/
+    @Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+    /**产品编码*/
+    @Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+    /**产品中文名*/
+    @Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+    /**产品英文名*/
+    @Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+    /**规格*/
+    @Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+    /**型号*/
+    @Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String childModel;
+    /**备件号*/
+    @Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+    /**图号*/
+    @Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+    /**订货号*/
+    @Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+    /**厂家*/
+    @Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+    /**质量等级*/
+    @Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+    /**数量*/
+    @Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private Double quantity;
+    /**税率(tax rate)*/
+    @Excel(name = "税率(tax rate)", width = 15)
+    @ApiModelProperty(value = "税率(tax rate)")
+    private java.math.BigDecimal taxRate;
+    /**折扣(discount)*/
+    @Excel(name = "折扣(discount)", width = 15)
+    @ApiModelProperty(value = "折扣(discount)")
+    private java.math.BigDecimal discount;
+    /**含税单价(tax price)*/
+    @Excel(name = "含税单价(tax price)", width = 15)
+    @ApiModelProperty(value = "含税单价(tax price)")
+    private java.math.BigDecimal taxPrice;
+    /**含税金额(tax amount)*/
+    @Excel(name = "含税金额(tax amount)", width = 15)
+    @ApiModelProperty(value = "含税金额(tax amount)")
+    private java.math.BigDecimal taxAmount;
+    /**折后单价(discounted unit price)*/
+    @Excel(name = "折后单价(discounted unit price)", width = 15)
+    @ApiModelProperty(value = "折后单价(discounted unit price)")
+    private java.math.BigDecimal discountedPrice;
+    /**折后金额(converted amount)*/
+    @Excel(name = "折后金额(converted amount)", width = 15)
+    @ApiModelProperty(value = "折后金额(converted amount)")
+    private java.math.BigDecimal discountedAmount;
+    /**备注(notes)*/
+    @Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String childNotes;
+    //供应商
+    private String supplierId;
+    private String supplierName;
+}

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderHisPage.java

@@ -34,6 +34,14 @@ public class SaleOrderHisPage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;
@@ -146,6 +154,10 @@ public class SaleOrderHisPage {
 	@Excel(name = "发货方式(delivery)", width = 15)
 	@ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+	/**运输方式(delivery)*/
+	@Excel(name = "运输方式(transport)", width = 15)
+	@ApiModelProperty(value = "运输方式(transport)")
+	private String transport;
 	/**交货地点(delivery address)*/
 	@Excel(name = "交货地点(delivery address)", width = 15)
 	@ApiModelProperty(value = "交货地点(delivery address)")

+ 12 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleOrderPage.java

@@ -30,6 +30,14 @@ public class SaleOrderPage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;
@@ -142,6 +150,10 @@ public class SaleOrderPage {
 	@Excel(name = "发货方式(delivery)", width = 15)
 	@ApiModelProperty(value = "发货方式(delivery)")
     private String delivery;
+	/**运输方式(delivery)*/
+	@Excel(name = "运输方式(transport)", width = 15)
+	@ApiModelProperty(value = "运输方式(transport)")
+	private String transport;
 	/**交货地点(delivery address)*/
 	@Excel(name = "交货地点(delivery address)", width = 15)
 	@ApiModelProperty(value = "交货地点(delivery address)")

+ 6 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationAlert.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecg.modules.saleCode.entity.SaleQuotationProduct;
 import org.jeecg.modules.saleCode.entity.SaleQuotationShip;
 import org.jeecgframework.poi.excel.annotation.Excel;
@@ -100,6 +101,7 @@ public class SaleQuotationAlert {
 	/**产品分类(production class)*/
 	@Excel(name = "产品分类(production class)", width = 15)
 	@ApiModelProperty(value = "产品分类(production class)")
+	@Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
     private String productionClass;
 	/**机型(model)*/
 	@Excel(name = "机型(model)", width = 15)
@@ -283,5 +285,9 @@ public class SaleQuotationAlert {
 	@ApiModelProperty(value = "备注(notes)")
 	private String notes;
 	private String sourceId;
+	//供应商
+	private String supplierId;
+	private String supplierName;
+
 
 }

+ 8 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationHisPage.java

@@ -34,6 +34,14 @@ public class SaleQuotationHisPage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;

+ 8 - 0
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleQuotationPage.java

@@ -33,6 +33,14 @@ public class SaleQuotationPage {
 	/**创建人*/
 	@ApiModelProperty(value = "创建人")
     private String createBy;
+	/**确认人*/
+	@ApiModelProperty(value = "确认人")
+	private String confirmBy;
+	/**确认时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "确认时间")
+	private Date confirmTime;
 	/**创建时间*/
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

+ 351 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreCheckController.java

@@ -0,0 +1,351 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.entity.StorePurchaseIn;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.storeCode.entity.StoreCheckDetails;
+import org.jeecg.modules.storeCode.entity.StoreCheck;
+import org.jeecg.modules.storeCode.vo.StoreCheckPage;
+import org.jeecg.modules.storeCode.service.IStoreCheckService;
+import org.jeecg.modules.storeCode.service.IStoreCheckDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+/**
+ * @Description: 盘盈盘亏(inventory check)
+ * @Author: jeecg-boot
+ * @Date: 2024-12-11
+ * @Version: V1.0
+ */
+@Api(tags = "盘盈盘亏(inventory check)")
+@RestController
+@RequestMapping("/storeCode/storeCheck")
+@Slf4j
+public class StoreCheckController {
+    @Autowired
+    private IStoreCheckService storeCheckService;
+    @Autowired
+    private IStoreCheckDetailsService storeCheckDetailsService;
+    @Autowired
+    private ISerialPatternService serialPatternService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param storeCheck
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "盘盈盘亏(inventory check)-分页列表查询")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-分页列表查询", notes = "盘盈盘亏(inventory check)-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<StoreCheck>> queryPageList(StoreCheck storeCheck,
+                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                   HttpServletRequest req) {
+        QueryWrapper<StoreCheck> queryWrapper = QueryGenerator.initQueryWrapper(storeCheck, req.getParameterMap());
+        Page<StoreCheck> page = new Page<StoreCheck>(pageNo, pageSize);
+        IPage<StoreCheck> pageList = storeCheckService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param storeCheckPage
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏(inventory check)-添加")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-添加", notes = "盘盈盘亏(inventory check)-添加")
+    @RequiresPermissions("storeCode:store_check:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody StoreCheckPage storeCheckPage) {
+        StoreCheck storeCheck = new StoreCheck();
+        BeanUtils.copyProperties(storeCheckPage, storeCheck);
+
+        String code = storeCheck.getBillCode();
+        if (StringUtils.isNotBlank(code)) {
+
+            QueryWrapper<StoreCheck> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("bill_code", code);
+            queryWrapper.eq("del_flag", "0");
+
+            List<StoreCheck> list = storeCheckService.list(queryWrapper);
+            if (list.size() != 0) {
+                return Result.error("盘盈盘亏编码重复,请修改!");
+            }
+        } else {
+
+            Result<String> result = serialPatternService.getNextSerial("store_check", "bill_code");
+            if (!result.isSuccess()) {
+                return result;
+            }
+            storeCheck.setBillCode(result.getMessage());
+        }
+
+        storeCheckService.saveMain(storeCheck, storeCheckPage.getStoreCheckDetailsList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param storeCheckPage
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏(inventory check)-编辑")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-编辑", notes = "盘盈盘亏(inventory check)-编辑")
+    @RequiresPermissions("storeCode:store_check:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody StoreCheckPage storeCheckPage) {
+        StoreCheck storeCheck = new StoreCheck();
+        BeanUtils.copyProperties(storeCheckPage, storeCheck);
+        StoreCheck storeCheckEntity = storeCheckService.getById(storeCheck.getId());
+        if (storeCheckEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storeCheckService.updateMain(storeCheck, storeCheckPage.getStoreCheckDetailsList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏(inventory check)-通过id删除")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-通过id删除", notes = "盘盈盘亏(inventory check)-通过id删除")
+    @RequiresPermissions("storeCode:store_check:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+
+        StoreCheck storeCheckEntity = storeCheckService.getById(id);
+        if (storeCheckEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+
+        String submit = storeCheckEntity.getSubmit();
+        if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+            return Result.error("已提交的数据无法删除");
+        }
+
+        storeCheckService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏(inventory check)-批量删除")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-批量删除", notes = "盘盈盘亏(inventory check)-批量删除")
+    @RequiresPermissions("storeCode:store_check:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        for (String o : ids.split(",")) {
+
+            StoreCheck storeCheckEntity = storeCheckService.getById(o);
+            if (storeCheckEntity == null) {
+                return Result.error("未找到对应数据");
+            }
+
+            String submit = storeCheckEntity.getSubmit();
+            if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+                return Result.error("单号" + storeCheckEntity.getBillCode() + "已提交,无法删除");
+            }
+        }
+
+        this.storeCheckService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+
+    /**
+     * 批量提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏-批量提交")
+    @ApiOperation(value = "盘盈盘亏-批量提交", notes = "盘盈盘亏-批量提交")
+    @GetMapping(value = "/submitBatch")
+    public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeCheckService.submitBatch(ids);
+    }
+
+    /**
+     * 批量取消提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "盘盈盘亏-批量取消提交")
+    @ApiOperation(value = "盘盈盘亏-批量取消提交", notes = "盘盈盘亏-批量取消提交")
+    @GetMapping(value = "/returnSubmitBatch")
+    public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeCheckService.returnSubmitBatch(ids);
+    }
+
+
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "盘盈盘亏(inventory check)-通过id查询")
+    @ApiOperation(value = "盘盈盘亏(inventory check)-通过id查询", notes = "盘盈盘亏(inventory check)-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<StoreCheck> queryById(@RequestParam(name = "id", required = true) String id) {
+        StoreCheck storeCheck = storeCheckService.getById(id);
+        if (storeCheck == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(storeCheck);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "盘盈盘亏子表 - 产品明细通过主表ID查询")
+    @ApiOperation(value = "盘盈盘亏子表 - 产品明细主表ID查询", notes = "盘盈盘亏子表 - 产品明细-通主表ID查询")
+    @GetMapping(value = "/queryStoreCheckDetailsByMainId")
+    public Result<List<StoreCheckDetails>> queryStoreCheckDetailsListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StoreCheckDetails> storeCheckDetailsList = storeCheckDetailsService.selectByMainId(id);
+        return Result.OK(storeCheckDetailsList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param storeCheck
+     */
+    @RequiresPermissions("storeCode:store_check:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StoreCheck storeCheck) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<StoreCheck> queryWrapper = QueryGenerator.initQueryWrapper(storeCheck, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<StoreCheck> storeCheckList = storeCheckService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<StoreCheckPage> pageList = new ArrayList<StoreCheckPage>();
+        for (StoreCheck main : storeCheckList) {
+            StoreCheckPage vo = new StoreCheckPage();
+            BeanUtils.copyProperties(main, vo);
+            List<StoreCheckDetails> storeCheckDetailsList = storeCheckDetailsService.selectByMainId(main.getId());
+            vo.setStoreCheckDetailsList(storeCheckDetailsList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "盘盈盘亏(inventory check)列表");
+        mv.addObject(NormalExcelConstants.CLASS, StoreCheckPage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("盘盈盘亏(inventory check)数据", "导出人:" + sysUser.getRealname(), "盘盈盘亏(inventory check)"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("storeCode:store_check:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<StoreCheckPage> list = ExcelImportUtil.importExcel(file.getInputStream(), StoreCheckPage.class, params);
+                for (StoreCheckPage page : list) {
+                    StoreCheck po = new StoreCheck();
+                    BeanUtils.copyProperties(page, po);
+                    storeCheckService.saveMain(po, page.getStoreCheckDetailsList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+}

+ 207 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreOnhandController.java

@@ -0,0 +1,207 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.entity.StoreOnhand;
+import org.jeecg.modules.storeCode.entity.StorePurchaseOther;
+import org.jeecg.modules.storeCode.service.IStoreOnhandService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 现存量
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@Api(tags="现存量")
+@RestController
+@RequestMapping("/storeCode/storeOnhand")
+@Slf4j
+public class StoreOnhandController extends JeecgController<StoreOnhand, IStoreOnhandService> {
+	@Autowired
+	private IStoreOnhandService storeOnhandService;
+	 @Autowired
+	 private ISerialPatternService serialPatternService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param storeOnhand
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "现存量-分页列表查询")
+	@ApiOperation(value="现存量-分页列表查询", notes="现存量-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<StoreOnhand>> queryPageList(StoreOnhand storeOnhand,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+        QueryWrapper<StoreOnhand> queryWrapper = QueryGenerator.initQueryWrapper(storeOnhand, req.getParameterMap());
+		Page<StoreOnhand> page = new Page<StoreOnhand>(pageNo, pageSize);
+		IPage<StoreOnhand> pageList = storeOnhandService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param storeOnhand
+	 * @return
+	 */
+	@AutoLog(value = "现存量-添加")
+	@ApiOperation(value="现存量-添加", notes="现存量-添加")
+	@RequiresPermissions("storeCode:store_onhand:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody StoreOnhand storeOnhand) {
+
+		String code = storeOnhand.getBatchCode();
+		if (StringUtils.isNotBlank(code)) {
+
+			QueryWrapper<StoreOnhand> queryWrapper = new QueryWrapper();
+			queryWrapper.eq("bill_code", code);
+			queryWrapper.eq("del_flag", "0");
+
+			List<StoreOnhand> list = storeOnhandService.list(queryWrapper);
+			if (list.size() != 0) {
+				return Result.error("现存量批次重复,请修改!");
+			}
+		} else {
+
+			Result<String> result = serialPatternService.getNextSerial("store_onhand", "batch_code");
+			if (!result.isSuccess()) {
+				return result;
+			}
+			storeOnhand.setBatchCode(result.getMessage());
+		}
+
+		storeOnhandService.save(storeOnhand);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param storeOnhand
+	 * @return
+	 */
+	@AutoLog(value = "现存量-编辑")
+	@ApiOperation(value="现存量-编辑", notes="现存量-编辑")
+	@RequiresPermissions("storeCode:store_onhand:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody StoreOnhand storeOnhand) {
+		storeOnhandService.updateById(storeOnhand);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "现存量-通过id删除")
+	@ApiOperation(value="现存量-通过id删除", notes="现存量-通过id删除")
+	@RequiresPermissions("storeCode:store_onhand:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		storeOnhandService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "现存量-批量删除")
+	@ApiOperation(value="现存量-批量删除", notes="现存量-批量删除")
+	@RequiresPermissions("storeCode:store_onhand:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.storeOnhandService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "现存量-通过id查询")
+	@ApiOperation(value="现存量-通过id查询", notes="现存量-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<StoreOnhand> queryById(@RequestParam(name="id",required=true) String id) {
+		StoreOnhand storeOnhand = storeOnhandService.getById(id);
+		if(storeOnhand==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(storeOnhand);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param storeOnhand
+    */
+    @RequiresPermissions("storeCode:store_onhand:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StoreOnhand storeOnhand) {
+        return super.exportXls(request, storeOnhand, StoreOnhand.class, "现存量");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("storeCode:store_onhand:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, StoreOnhand.class);
+    }
+
+}

+ 346 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreOtherOutController.java

@@ -0,0 +1,346 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.entity.StoreCheck;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.storeCode.entity.StoreOtherOutDetails;
+import org.jeecg.modules.storeCode.entity.StoreOtherOut;
+import org.jeecg.modules.storeCode.vo.StoreOtherOutPage;
+import org.jeecg.modules.storeCode.service.IStoreOtherOutService;
+import org.jeecg.modules.storeCode.service.IStoreOtherOutDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+/**
+ * @Description: 其他出库(other out)
+ * @Author: jeecg-boot
+ * @Date: 2024-12-11
+ * @Version: V1.0
+ */
+@Api(tags = "其他出库(other out)")
+@RestController
+@RequestMapping("/storeCode/storeOtherOut")
+@Slf4j
+public class StoreOtherOutController {
+    @Autowired
+    private IStoreOtherOutService storeOtherOutService;
+    @Autowired
+    private IStoreOtherOutDetailsService storeOtherOutDetailsService;
+    @Autowired
+    private ISerialPatternService serialPatternService;
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param storeOtherOut
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "其他出库(other out)-分页列表查询")
+    @ApiOperation(value = "其他出库(other out)-分页列表查询", notes = "其他出库(other out)-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<StoreOtherOut>> queryPageList(StoreOtherOut storeOtherOut,
+                                                      @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                      HttpServletRequest req) {
+        QueryWrapper<StoreOtherOut> queryWrapper = QueryGenerator.initQueryWrapper(storeOtherOut, req.getParameterMap());
+        Page<StoreOtherOut> page = new Page<StoreOtherOut>(pageNo, pageSize);
+        IPage<StoreOtherOut> pageList = storeOtherOutService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param storeOtherOutPage
+     * @return
+     */
+    @AutoLog(value = "其他出库(other out)-添加")
+    @ApiOperation(value = "其他出库(other out)-添加", notes = "其他出库(other out)-添加")
+    @RequiresPermissions("storeCode:store_other_out:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody StoreOtherOutPage storeOtherOutPage) {
+        StoreOtherOut storeOtherOut = new StoreOtherOut();
+        BeanUtils.copyProperties(storeOtherOutPage, storeOtherOut);
+
+        String code = storeOtherOut.getBillCode();
+        if (StringUtils.isNotBlank(code)) {
+
+            QueryWrapper<StoreOtherOut> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("bill_code", code);
+            queryWrapper.eq("del_flag", "0");
+
+            List<StoreOtherOut> list = storeOtherOutService.list(queryWrapper);
+            if (list.size() != 0) {
+                return Result.error("其他出库编码重复,请修改!");
+            }
+        } else {
+
+            Result<String> result = serialPatternService.getNextSerial("store_other_out", "bill_code");
+            if (!result.isSuccess()) {
+                return result;
+            }
+            storeOtherOut.setBillCode(result.getMessage());
+        }
+
+        storeOtherOutService.saveMain(storeOtherOut, storeOtherOutPage.getStoreOtherOutDetailsList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param storeOtherOutPage
+     * @return
+     */
+    @AutoLog(value = "其他出库(other out)-编辑")
+    @ApiOperation(value = "其他出库(other out)-编辑", notes = "其他出库(other out)-编辑")
+    @RequiresPermissions("storeCode:store_other_out:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody StoreOtherOutPage storeOtherOutPage) {
+        StoreOtherOut storeOtherOut = new StoreOtherOut();
+        BeanUtils.copyProperties(storeOtherOutPage, storeOtherOut);
+        StoreOtherOut storeOtherOutEntity = storeOtherOutService.getById(storeOtherOut.getId());
+        if (storeOtherOutEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storeOtherOutService.updateMain(storeOtherOut, storeOtherOutPage.getStoreOtherOutDetailsList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "其他出库(other out)-通过id删除")
+    @ApiOperation(value = "其他出库(other out)-通过id删除", notes = "其他出库(other out)-通过id删除")
+    @RequiresPermissions("storeCode:store_other_out:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        StoreOtherOut storeOtherOutEntity = storeOtherOutService.getById(id);
+        if (storeOtherOutEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        String submit = storeOtherOutEntity.getSubmit();
+        if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+            return Result.error("已提交的数据无法删除");
+        }
+
+        storeOtherOutService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他出库(other out)-批量删除")
+    @ApiOperation(value = "其他出库(other out)-批量删除", notes = "其他出库(other out)-批量删除")
+    @RequiresPermissions("storeCode:store_other_out:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        for (String o : ids.split(",")) {
+
+            StoreOtherOut storeOtherOutEntity = storeOtherOutService.getById(o);
+            if (storeOtherOutEntity == null) {
+                return Result.error("未找到对应数据");
+            }
+            String submit = storeOtherOutEntity.getSubmit();
+            if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+                return Result.error("单号" + storeOtherOutEntity.getBillCode() + "已提交,无法删除");
+            }
+        }
+        
+        this.storeOtherOutService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 批量提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他出库-批量提交")
+    @ApiOperation(value = "其他出库-批量提交", notes = "其他出库-批量提交")
+    @GetMapping(value = "/submitBatch")
+    public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeOtherOutService.submitBatch(ids);
+    }
+
+    /**
+     * 批量取消提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他出库-批量取消提交")
+    @ApiOperation(value = "其他出库-批量取消提交", notes = "其他出库-批量取消提交")
+    @GetMapping(value = "/returnSubmitBatch")
+    public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeOtherOutService.returnSubmitBatch(ids);
+    }
+
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "其他出库(other out)-通过id查询")
+    @ApiOperation(value = "其他出库(other out)-通过id查询", notes = "其他出库(other out)-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<StoreOtherOut> queryById(@RequestParam(name = "id", required = true) String id) {
+        StoreOtherOut storeOtherOut = storeOtherOutService.getById(id);
+        if (storeOtherOut == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(storeOtherOut);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "其他出库子表 - 产品明细通过主表ID查询")
+    @ApiOperation(value = "其他出库子表 - 产品明细主表ID查询", notes = "其他出库子表 - 产品明细-通主表ID查询")
+    @GetMapping(value = "/queryStoreOtherOutDetailsByMainId")
+    public Result<List<StoreOtherOutDetails>> queryStoreOtherOutDetailsListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StoreOtherOutDetails> storeOtherOutDetailsList = storeOtherOutDetailsService.selectByMainId(id);
+        return Result.OK(storeOtherOutDetailsList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param storeOtherOut
+     */
+    @RequiresPermissions("storeCode:store_other_out:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StoreOtherOut storeOtherOut) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<StoreOtherOut> queryWrapper = QueryGenerator.initQueryWrapper(storeOtherOut, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<StoreOtherOut> storeOtherOutList = storeOtherOutService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<StoreOtherOutPage> pageList = new ArrayList<StoreOtherOutPage>();
+        for (StoreOtherOut main : storeOtherOutList) {
+            StoreOtherOutPage vo = new StoreOtherOutPage();
+            BeanUtils.copyProperties(main, vo);
+            List<StoreOtherOutDetails> storeOtherOutDetailsList = storeOtherOutDetailsService.selectByMainId(main.getId());
+            vo.setStoreOtherOutDetailsList(storeOtherOutDetailsList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "其他出库(other out)列表");
+        mv.addObject(NormalExcelConstants.CLASS, StoreOtherOutPage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("其他出库(other out)数据", "导出人:" + sysUser.getRealname(), "其他出库(other out)"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("storeCode:store_other_out:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<StoreOtherOutPage> list = ExcelImportUtil.importExcel(file.getInputStream(), StoreOtherOutPage.class, params);
+                for (StoreOtherOutPage page : list) {
+                    StoreOtherOut po = new StoreOtherOut();
+                    BeanUtils.copyProperties(page, po);
+                    storeOtherOutService.saveMain(po, page.getStoreOtherOutDetailsList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+}

+ 404 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StorePurchaseInController.java

@@ -0,0 +1,404 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.vo.StorePurchaseInAlert;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.storeCode.entity.StorePurchaseInShip;
+import org.jeecg.modules.storeCode.entity.StorePurchaseInDetails;
+import org.jeecg.modules.storeCode.entity.StorePurchaseIn;
+import org.jeecg.modules.storeCode.vo.StorePurchaseInPage;
+import org.jeecg.modules.storeCode.service.IStorePurchaseInService;
+import org.jeecg.modules.storeCode.service.IStorePurchaseInShipService;
+import org.jeecg.modules.storeCode.service.IStorePurchaseInDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+/**
+ * @Description: 入库单(采购 / 异常)
+ * @Author: jeecg-boot
+ * @Date: 2024-12-04
+ * @Version: V1.0
+ */
+@Api(tags = "入库单(采购/异常)")
+@RestController
+@RequestMapping("/storeCode/storePurchaseIn")
+@Slf4j
+public class StorePurchaseInController {
+    @Autowired
+    private IStorePurchaseInService storePurchaseInService;
+    @Autowired
+    private IStorePurchaseInShipService storePurchaseInShipService;
+    @Autowired
+    private IStorePurchaseInDetailsService storePurchaseInDetailsService;
+    @Autowired
+    private ISerialPatternService serialPatternService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param storePurchaseIn
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "入库单(采购/异常)-分页列表查询")
+    @ApiOperation(value = "入库单(采购/异常)-分页列表查询", notes = "入库单(采购/异常)-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<StorePurchaseIn>> queryPageList(StorePurchaseIn storePurchaseIn,
+                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                        HttpServletRequest req) {
+        QueryWrapper<StorePurchaseIn> queryWrapper = QueryGenerator.initQueryWrapper(storePurchaseIn, req.getParameterMap());
+        Page<StorePurchaseIn> page = new Page<StorePurchaseIn>(pageNo, pageSize);
+        IPage<StorePurchaseIn> pageList = storePurchaseInService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    @ApiOperation(value = "采购异常入库明细(不良品清单)", notes = "采购异常入库明细(不良品清单)")
+    @GetMapping(value = "/selectContractDetailAlert")
+    public Result<IPage<StorePurchaseInAlert>> selectContractDetailAlert(StorePurchaseInAlert saleInquiryForm,
+                                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                   HttpServletRequest req) {
+
+        //1采购入库 2异常采购入库
+        saleInquiryForm.setType("2");
+//      是否合格(qualified)1是 0否
+        saleInquiryForm.setQualified("0");
+        QueryWrapper<StorePurchaseInAlert> queryWrapper = QueryGenerator.initQueryWrapper(saleInquiryForm, req.getParameterMap());
+        Page<StorePurchaseInAlert> page = new Page<StorePurchaseInAlert>(pageNo, pageSize);
+        IPage<StorePurchaseInAlert> pageList = storePurchaseInDetailsService.selectStorePurchaseInAlert(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+
+
+    /**
+     * 添加
+     *
+     * @param storePurchaseInPage
+     * @return
+     */
+    @AutoLog(value = "入库单(采购/异常)-添加")
+    @ApiOperation(value = "入库单(采购/异常)-添加", notes = "入库单(采购/异常)-添加")
+//    @RequiresPermissions("storeCode:store_purchase_in:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody StorePurchaseInPage storePurchaseInPage) {
+        StorePurchaseIn storePurchaseIn = new StorePurchaseIn();
+        BeanUtils.copyProperties(storePurchaseInPage, storePurchaseIn);
+
+        String code = storePurchaseIn.getBillCode();
+        if (StringUtils.isNotBlank(code)) {
+
+            QueryWrapper<StorePurchaseIn> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("bill_code", code);
+            queryWrapper.eq("del_flag", "0");
+
+            List<StorePurchaseIn> list = storePurchaseInService.list(queryWrapper);
+            if (list.size() != 0) {
+                return Result.error("入库订单编码重复,请修改!");
+            }
+        } else {
+
+            Result<String> result = serialPatternService.getNextSerial("store_purchase_in", "bill_code");
+            if (!result.isSuccess()) {
+                return result;
+            }
+            storePurchaseIn.setBillCode(result.getMessage());
+        }
+
+        storePurchaseInService.saveMain(storePurchaseIn, storePurchaseInPage.getStorePurchaseInShipList(), storePurchaseInPage.getStorePurchaseInDetailsList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param storePurchaseInPage
+     * @return
+     */
+    @AutoLog(value = "入库单(采购/异常)-编辑")
+    @ApiOperation(value = "入库单(采购/异常)-编辑", notes = "入库单(采购/异常)-编辑")
+//    @RequiresPermissions("storeCode:store_purchase_in:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody StorePurchaseInPage storePurchaseInPage) {
+        StorePurchaseIn storePurchaseIn = new StorePurchaseIn();
+        BeanUtils.copyProperties(storePurchaseInPage, storePurchaseIn);
+        StorePurchaseIn storePurchaseInEntity = storePurchaseInService.getById(storePurchaseIn.getId());
+        if (storePurchaseInEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storePurchaseInService.updateMain(storePurchaseIn, storePurchaseInPage.getStorePurchaseInShipList(), storePurchaseInPage.getStorePurchaseInDetailsList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "入库单(采购/异常)-通过id删除")
+    @ApiOperation(value = "入库单(采购/异常)-通过id删除", notes = "入库单(采购/异常)-通过id删除")
+//    @RequiresPermissions("storeCode:store_purchase_in:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+
+        StorePurchaseIn order = storePurchaseInService.getById(id);
+        if (order == null) {
+            return Result.error("未找到对应数据");
+        }
+
+        String submit = order.getSubmit();
+        if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+            return Result.error("已提交的数据无法删除");
+        }
+
+        storePurchaseInService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "入库单(采购/异常)-批量删除")
+    @ApiOperation(value = "入库单(采购/异常)-批量删除", notes = "入库单(采购/异常)-批量删除")
+//    @RequiresPermissions("storeCode:store_purchase_in:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        for (String o : ids.split(",")) {
+
+            StorePurchaseIn order = storePurchaseInService.getById(o);
+            if (order == null) {
+                return Result.error("未找到对应数据");
+            }
+
+            String submit = order.getSubmit();
+            if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+                return Result.error("单号" + order.getBillCode() + "已提交,无法删除");
+            }
+        }
+
+        this.storePurchaseInService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+
+    }
+
+
+    /**
+     * 处理
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "采购入库单-处理")
+    @ApiOperation(value = "采购入库单-处理", notes = "采购入库单-处理")
+    @GetMapping(value = "/hasDeal")
+    public Result<String> hasDeal(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storePurchaseInService.hasDeal(ids);
+    }
+
+    /**
+     * 批量提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "采购入库单-批量提交")
+    @ApiOperation(value = "采购入库单-批量提交", notes = "采购入库单-批量提交")
+    @GetMapping(value = "/submitBatch")
+    public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storePurchaseInService.submitBatch(ids);
+    }
+
+    /**
+     * 批量取消提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "采购入库单-批量取消提交")
+    @ApiOperation(value = "采购入库单-批量取消提交", notes = "采购入库单-批量取消提交")
+    @GetMapping(value = "/returnSubmitBatch")
+    public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storePurchaseInService.returnSubmitBatch(ids);
+    }
+
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "入库单(采购/异常)-通过id查询")
+    @ApiOperation(value = "入库单(采购/异常)-通过id查询", notes = "入库单(采购/异常)-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<StorePurchaseIn> queryById(@RequestParam(name = "id", required = true) String id) {
+        StorePurchaseIn storePurchaseIn = storePurchaseInService.getById(id);
+        if (storePurchaseIn == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(storePurchaseIn);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "入库单(采购/异常)子表- 船明细通过主表ID查询")
+    @ApiOperation(value = "入库单(采购/异常)子表- 船明细主表ID查询", notes = "入库单(采购/异常)子表- 船明细-通主表ID查询")
+    @GetMapping(value = "/queryStorePurchaseInShipByMainId")
+    public Result<List<StorePurchaseInShip>> queryStorePurchaseInShipListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StorePurchaseInShip> storePurchaseInShipList = storePurchaseInShipService.selectByMainId(id);
+        return Result.OK(storePurchaseInShipList);
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "入库单(采购/异常)子表- 产品明细通过主表ID查询")
+    @ApiOperation(value = "入库单(采购/异常)子表- 产品明细主表ID查询", notes = "入库单(采购/异常)子表- 产品明细-通主表ID查询")
+    @GetMapping(value = "/queryStorePurchaseInDetailsByMainId")
+    public Result<List<StorePurchaseInDetails>> queryStorePurchaseInDetailsListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StorePurchaseInDetails> storePurchaseInDetailsList = storePurchaseInDetailsService.selectByMainId(id);
+        return Result.OK(storePurchaseInDetailsList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param storePurchaseIn
+     */
+//    @RequiresPermissions("storeCode:store_purchase_in:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StorePurchaseIn storePurchaseIn) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<StorePurchaseIn> queryWrapper = QueryGenerator.initQueryWrapper(storePurchaseIn, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<StorePurchaseIn> storePurchaseInList = storePurchaseInService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<StorePurchaseInPage> pageList = new ArrayList<StorePurchaseInPage>();
+        for (StorePurchaseIn main : storePurchaseInList) {
+            StorePurchaseInPage vo = new StorePurchaseInPage();
+            BeanUtils.copyProperties(main, vo);
+            List<StorePurchaseInShip> storePurchaseInShipList = storePurchaseInShipService.selectByMainId(main.getId());
+            vo.setStorePurchaseInShipList(storePurchaseInShipList);
+            List<StorePurchaseInDetails> storePurchaseInDetailsList = storePurchaseInDetailsService.selectByMainId(main.getId());
+            vo.setStorePurchaseInDetailsList(storePurchaseInDetailsList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "入库单(采购/异常)列表");
+        mv.addObject(NormalExcelConstants.CLASS, StorePurchaseInPage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("入库单(采购/异常)数据", "导出人:" + sysUser.getRealname(), "入库单(采购/异常)"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+//    @RequiresPermissions("storeCode:store_purchase_in:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<StorePurchaseInPage> list = ExcelImportUtil.importExcel(file.getInputStream(), StorePurchaseInPage.class, params);
+                for (StorePurchaseInPage page : list) {
+                    StorePurchaseIn po = new StorePurchaseIn();
+                    BeanUtils.copyProperties(page, po);
+                    storePurchaseInService.saveMain(po, page.getStorePurchaseInShipList(), page.getStorePurchaseInDetailsList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+}

+ 370 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StorePurchaseOtherController.java

@@ -0,0 +1,370 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.entity.StorePurchaseIn;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.storeCode.entity.StorePurchaseOtherShip;
+import org.jeecg.modules.storeCode.entity.StorePurchaseOtherDetails;
+import org.jeecg.modules.storeCode.entity.StorePurchaseOther;
+import org.jeecg.modules.storeCode.vo.StorePurchaseOtherPage;
+import org.jeecg.modules.storeCode.service.IStorePurchaseOtherService;
+import org.jeecg.modules.storeCode.service.IStorePurchaseOtherShipService;
+import org.jeecg.modules.storeCode.service.IStorePurchaseOtherDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+/**
+ * @Description: 其他入库单
+ * @Author: jeecg-boot
+ * @Date: 2024-12-04
+ * @Version: V1.0
+ */
+@Api(tags = "其他入库单")
+@RestController
+@RequestMapping("/storeCode/storePurchaseOther")
+@Slf4j
+public class StorePurchaseOtherController {
+    @Autowired
+    private IStorePurchaseOtherService storePurchaseOtherService;
+    @Autowired
+    private IStorePurchaseOtherShipService storePurchaseOtherShipService;
+    @Autowired
+    private IStorePurchaseOtherDetailsService storePurchaseOtherDetailsService;
+    @Autowired
+    private ISerialPatternService serialPatternService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param storePurchaseOther
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "其他入库单-分页列表查询")
+    @ApiOperation(value = "其他入库单-分页列表查询", notes = "其他入库单-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<StorePurchaseOther>> queryPageList(StorePurchaseOther storePurchaseOther,
+                                                           @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                           HttpServletRequest req) {
+        QueryWrapper<StorePurchaseOther> queryWrapper = QueryGenerator.initQueryWrapper(storePurchaseOther, req.getParameterMap());
+        Page<StorePurchaseOther> page = new Page<StorePurchaseOther>(pageNo, pageSize);
+        IPage<StorePurchaseOther> pageList = storePurchaseOtherService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param storePurchaseOtherPage
+     * @return
+     */
+    @AutoLog(value = "其他入库单-添加")
+    @ApiOperation(value = "其他入库单-添加", notes = "其他入库单-添加")
+    @RequiresPermissions("storeCode:store_purchase_other:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody StorePurchaseOtherPage storePurchaseOtherPage) {
+        StorePurchaseOther storePurchaseOther = new StorePurchaseOther();
+        BeanUtils.copyProperties(storePurchaseOtherPage, storePurchaseOther);
+
+        String code = storePurchaseOther.getBillCode();
+        if (StringUtils.isNotBlank(code)) {
+
+            QueryWrapper<StorePurchaseOther> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("bill_code", code);
+            queryWrapper.eq("del_flag", "0");
+
+            List<StorePurchaseOther> list = storePurchaseOtherService.list(queryWrapper);
+            if (list.size() != 0) {
+                return Result.error("其他入库订单编码重复,请修改!");
+            }
+        } else {
+
+            Result<String> result = serialPatternService.getNextSerial("store_purchase_other", "bill_code");
+            if (!result.isSuccess()) {
+                return result;
+            }
+            storePurchaseOther.setBillCode(result.getMessage());
+        }
+
+        storePurchaseOtherService.saveMain(storePurchaseOther, storePurchaseOtherPage.getStorePurchaseOtherShipList(), storePurchaseOtherPage.getStorePurchaseOtherDetailsList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param storePurchaseOtherPage
+     * @return
+     */
+    @AutoLog(value = "其他入库单-编辑")
+    @ApiOperation(value = "其他入库单-编辑", notes = "其他入库单-编辑")
+    @RequiresPermissions("storeCode:store_purchase_other:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody StorePurchaseOtherPage storePurchaseOtherPage) {
+        StorePurchaseOther storePurchaseOther = new StorePurchaseOther();
+        BeanUtils.copyProperties(storePurchaseOtherPage, storePurchaseOther);
+        StorePurchaseOther storePurchaseOtherEntity = storePurchaseOtherService.getById(storePurchaseOther.getId());
+        if (storePurchaseOtherEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storePurchaseOtherService.updateMain(storePurchaseOther, storePurchaseOtherPage.getStorePurchaseOtherShipList(), storePurchaseOtherPage.getStorePurchaseOtherDetailsList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "其他入库单-通过id删除")
+    @ApiOperation(value = "其他入库单-通过id删除", notes = "其他入库单-通过id删除")
+    @RequiresPermissions("storeCode:store_purchase_other:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+
+        StorePurchaseOther order = storePurchaseOtherService.getById(id);
+        if (order == null) {
+            return Result.error("未找到对应数据");
+        }
+        String submit = order.getSubmit();
+        if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+            return Result.error("已提交的数据无法删除");
+        }
+        storePurchaseOtherService.delMain(id);
+
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他入库单-批量删除")
+    @ApiOperation(value = "其他入库单-批量删除", notes = "其他入库单-批量删除")
+    @RequiresPermissions("storeCode:store_purchase_other:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        for (String o : ids.split(",")) {
+            StorePurchaseOther order = storePurchaseOtherService.getById(o);
+            if (order == null) {
+                return Result.error("未找到对应数据");
+            }
+            String submit = order.getSubmit();
+            if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+                return Result.error("单号" + order.getBillCode() + "已提交,无法删除");
+            }
+
+        }
+
+        this.storePurchaseOtherService.delBatchMain(Arrays.asList(ids.split(",")));
+        
+        return Result.OK("批量删除成功!");
+    }
+
+
+    /**
+     * 批量提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他入库单-批量提交")
+    @ApiOperation(value = "其他入库单-批量提交", notes = "其他入库单-批量提交")
+    @GetMapping(value = "/submitBatch")
+    public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storePurchaseOtherService.submitBatch(ids);
+    }
+
+    /**
+     * 批量取消提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "其他入库单-批量取消提交")
+    @ApiOperation(value = "其他入库单-批量取消提交", notes = "其他入库单-批量取消提交")
+    @GetMapping(value = "/returnSubmitBatch")
+    public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storePurchaseOtherService.returnSubmitBatch(ids);
+    }
+
+
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "其他入库单-通过id查询")
+    @ApiOperation(value = "其他入库单-通过id查询", notes = "其他入库单-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<StorePurchaseOther> queryById(@RequestParam(name = "id", required = true) String id) {
+        StorePurchaseOther storePurchaseOther = storePurchaseOtherService.getById(id);
+        if (storePurchaseOther == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(storePurchaseOther);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "其他入库单子表 - 船明细通过主表ID查询")
+    @ApiOperation(value = "其他入库单子表 - 船明细主表ID查询", notes = "其他入库单子表 - 船明细-通主表ID查询")
+    @GetMapping(value = "/queryStorePurchaseOtherShipByMainId")
+    public Result<List<StorePurchaseOtherShip>> queryStorePurchaseOtherShipListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StorePurchaseOtherShip> storePurchaseOtherShipList = storePurchaseOtherShipService.selectByMainId(id);
+        return Result.OK(storePurchaseOtherShipList);
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "其他入库单子表 - 产品明细通过主表ID查询")
+    @ApiOperation(value = "其他入库单子表 - 产品明细主表ID查询", notes = "其他入库单子表 - 产品明细-通主表ID查询")
+    @GetMapping(value = "/queryStorePurchaseOtherDetailsByMainId")
+    public Result<List<StorePurchaseOtherDetails>> queryStorePurchaseOtherDetailsListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StorePurchaseOtherDetails> storePurchaseOtherDetailsList = storePurchaseOtherDetailsService.selectByMainId(id);
+        return Result.OK(storePurchaseOtherDetailsList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param storePurchaseOther
+     */
+    @RequiresPermissions("storeCode:store_purchase_other:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StorePurchaseOther storePurchaseOther) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<StorePurchaseOther> queryWrapper = QueryGenerator.initQueryWrapper(storePurchaseOther, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<StorePurchaseOther> storePurchaseOtherList = storePurchaseOtherService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<StorePurchaseOtherPage> pageList = new ArrayList<StorePurchaseOtherPage>();
+        for (StorePurchaseOther main : storePurchaseOtherList) {
+            StorePurchaseOtherPage vo = new StorePurchaseOtherPage();
+            BeanUtils.copyProperties(main, vo);
+            List<StorePurchaseOtherShip> storePurchaseOtherShipList = storePurchaseOtherShipService.selectByMainId(main.getId());
+            vo.setStorePurchaseOtherShipList(storePurchaseOtherShipList);
+            List<StorePurchaseOtherDetails> storePurchaseOtherDetailsList = storePurchaseOtherDetailsService.selectByMainId(main.getId());
+            vo.setStorePurchaseOtherDetailsList(storePurchaseOtherDetailsList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "其他入库单列表");
+        mv.addObject(NormalExcelConstants.CLASS, StorePurchaseOtherPage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("其他入库单数据", "导出人:" + sysUser.getRealname(), "其他入库单"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("storeCode:store_purchase_other:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<StorePurchaseOtherPage> list = ExcelImportUtil.importExcel(file.getInputStream(), StorePurchaseOtherPage.class, params);
+                for (StorePurchaseOtherPage page : list) {
+                    StorePurchaseOther po = new StorePurchaseOther();
+                    BeanUtils.copyProperties(page, po);
+                    storePurchaseOtherService.saveMain(po, page.getStorePurchaseOtherShipList(), page.getStorePurchaseOtherDetailsList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+}

+ 382 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/controller/StoreSaleOutController.java

@@ -0,0 +1,382 @@
+package org.jeecg.modules.storeCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.storeCode.entity.StoreCheck;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.storeCode.entity.StoreSaleOutShip;
+import org.jeecg.modules.storeCode.entity.StoreSaleOutDetails;
+import org.jeecg.modules.storeCode.entity.StoreSaleOut;
+import org.jeecg.modules.storeCode.vo.StoreSaleOutPage;
+import org.jeecg.modules.storeCode.service.IStoreSaleOutService;
+import org.jeecg.modules.storeCode.service.IStoreSaleOutShipService;
+import org.jeecg.modules.storeCode.service.IStoreSaleOutDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+/**
+ * @Description: 销售出库(sale out)
+ * @Author: jeecg-boot
+ * @Date: 2024-12-11
+ * @Version: V1.0
+ */
+@Api(tags = "销售出库(sale out)")
+@RestController
+@RequestMapping("/storeCode/storeSaleOut")
+@Slf4j
+public class StoreSaleOutController {
+    @Autowired
+    private IStoreSaleOutService storeSaleOutService;
+    @Autowired
+    private IStoreSaleOutShipService storeSaleOutShipService;
+    @Autowired
+    private IStoreSaleOutDetailsService storeSaleOutDetailsService;
+    @Autowired
+    private ISerialPatternService serialPatternService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param storeSaleOut
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "销售出库(sale out)-分页列表查询")
+    @ApiOperation(value = "销售出库(sale out)-分页列表查询", notes = "销售出库(sale out)-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<StoreSaleOut>> queryPageList(StoreSaleOut storeSaleOut,
+                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                     HttpServletRequest req) {
+        QueryWrapper<StoreSaleOut> queryWrapper = QueryGenerator.initQueryWrapper(storeSaleOut, req.getParameterMap());
+        Page<StoreSaleOut> page = new Page<StoreSaleOut>(pageNo, pageSize);
+        IPage<StoreSaleOut> pageList = storeSaleOutService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param storeSaleOutPage
+     * @return
+     */
+    @AutoLog(value = "销售出库(sale out)-添加")
+    @ApiOperation(value = "销售出库(sale out)-添加", notes = "销售出库(sale out)-添加")
+    @RequiresPermissions("storeCode:store_sale_out:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody StoreSaleOutPage storeSaleOutPage) {
+        StoreSaleOut storeSaleOut = new StoreSaleOut();
+        BeanUtils.copyProperties(storeSaleOutPage, storeSaleOut);
+
+        String code = storeSaleOut.getBillCode();
+        if (StringUtils.isNotBlank(code)) {
+
+            QueryWrapper<StoreSaleOut> queryWrapper = new QueryWrapper();
+            queryWrapper.eq("bill_code", code);
+            queryWrapper.eq("del_flag", "0");
+
+            List<StoreSaleOut> list = storeSaleOutService.list(queryWrapper);
+            if (list.size() != 0) {
+                return Result.error("销售出库编码重复,请修改!");
+            }
+        } else {
+
+            Result<String> result = serialPatternService.getNextSerial("store_sale_out", "bill_code");
+            if (!result.isSuccess()) {
+                return result;
+            }
+            storeSaleOut.setBillCode(result.getMessage());
+        }
+        storeSaleOutService.saveMain(storeSaleOut, storeSaleOutPage.getStoreSaleOutShipList(), storeSaleOutPage.getStoreSaleOutDetailsList());
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param storeSaleOutPage
+     * @return
+     */
+    @AutoLog(value = "销售出库(sale out)-编辑")
+    @ApiOperation(value = "销售出库(sale out)-编辑", notes = "销售出库(sale out)-编辑")
+    @RequiresPermissions("storeCode:store_sale_out:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody StoreSaleOutPage storeSaleOutPage) {
+        StoreSaleOut storeSaleOut = new StoreSaleOut();
+        BeanUtils.copyProperties(storeSaleOutPage, storeSaleOut);
+        StoreSaleOut storeSaleOutEntity = storeSaleOutService.getById(storeSaleOut.getId());
+        if (storeSaleOutEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storeSaleOutService.updateMain(storeSaleOut, storeSaleOutPage.getStoreSaleOutShipList(), storeSaleOutPage.getStoreSaleOutDetailsList());
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 上传修改签单
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "销售出库(sale out)-上传修改签单")
+    @ApiOperation(value = "销售出库(sale out)-上传修改签单", notes = "销售出库(sale out)-上传修改签单")
+    @GetMapping(value = "/updateSigning")
+    public Result<String> updateSigning(@RequestParam(name = "id", required = true) String id,@RequestParam(name = "signing", required = true) String signing) {
+        StoreSaleOut storeSaleOutEntity = storeSaleOutService.getById(id);
+        if (storeSaleOutEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        storeSaleOutEntity.setSigning(signing);
+        storeSaleOutService.updateById(storeSaleOutEntity);
+        return Result.OK("执行成功!");
+    }
+
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "销售出库(sale out)-通过id删除")
+    @ApiOperation(value = "销售出库(sale out)-通过id删除", notes = "销售出库(sale out)-通过id删除")
+    @RequiresPermissions("storeCode:store_sale_out:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        StoreSaleOut storeSaleOutEntity = storeSaleOutService.getById(id);
+        if (storeSaleOutEntity == null) {
+            return Result.error("未找到对应数据");
+        }
+        String submit = storeSaleOutEntity.getSubmit();
+        if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+            return Result.error("已提交的数据无法删除");
+        }
+        storeSaleOutService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "销售出库(sale out)-批量删除")
+    @ApiOperation(value = "销售出库(sale out)-批量删除", notes = "销售出库(sale out)-批量删除")
+    @RequiresPermissions("storeCode:store_sale_out:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        for (String o : ids.split(",")) {
+            StoreSaleOut storeSaleOutEntity = storeSaleOutService.getById(o);
+            if (storeSaleOutEntity == null) {
+                return Result.error("未找到对应数据");
+            }
+            String submit = storeSaleOutEntity.getSubmit();
+            if (StringUtils.isNotBlank(submit) && submit.equals("1")) {
+                return Result.error("单号" + storeSaleOutEntity.getBillCode() + "已提交,无法删除");
+            }
+        }
+
+        this.storeSaleOutService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 批量提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "销售出库-批量提交")
+    @ApiOperation(value = "销售出库-批量提交", notes = "销售出库-批量提交")
+    @GetMapping(value = "/submitBatch")
+    public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeSaleOutService.submitBatch(ids);
+    }
+
+    /**
+     * 批量取消提交
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "销售出库-批量取消提交")
+    @ApiOperation(value = "销售出库-批量取消提交", notes = "销售出库-批量取消提交")
+    @GetMapping(value = "/returnSubmitBatch")
+    public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+        return storeSaleOutService.returnSubmitBatch(ids);
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "销售出库(sale out)-通过id查询")
+    @ApiOperation(value = "销售出库(sale out)-通过id查询", notes = "销售出库(sale out)-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<StoreSaleOut> queryById(@RequestParam(name = "id", required = true) String id) {
+        StoreSaleOut storeSaleOut = storeSaleOutService.getById(id);
+        if (storeSaleOut == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(storeSaleOut);
+
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "销售出库子表 - 船明细通过主表ID查询")
+    @ApiOperation(value = "销售出库子表 - 船明细主表ID查询", notes = "销售出库子表 - 船明细-通主表ID查询")
+    @GetMapping(value = "/queryStoreSaleOutShipByMainId")
+    public Result<List<StoreSaleOutShip>> queryStoreSaleOutShipListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StoreSaleOutShip> storeSaleOutShipList = storeSaleOutShipService.selectByMainId(id);
+        return Result.OK(storeSaleOutShipList);
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "销售出库子表 - 产品明细通过主表ID查询")
+    @ApiOperation(value = "销售出库子表 - 产品明细主表ID查询", notes = "销售出库子表 - 产品明细-通主表ID查询")
+    @GetMapping(value = "/queryStoreSaleOutDetailsByMainId")
+    public Result<List<StoreSaleOutDetails>> queryStoreSaleOutDetailsListByMainId(@RequestParam(name = "id", required = true) String id) {
+        List<StoreSaleOutDetails> storeSaleOutDetailsList = storeSaleOutDetailsService.selectByMainId(id);
+        return Result.OK(storeSaleOutDetailsList);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param storeSaleOut
+     */
+    @RequiresPermissions("storeCode:store_sale_out:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, StoreSaleOut storeSaleOut) {
+        // Step.1 组装查询条件查询数据
+        QueryWrapper<StoreSaleOut> queryWrapper = QueryGenerator.initQueryWrapper(storeSaleOut, request.getParameterMap());
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //配置选中数据查询条件
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            queryWrapper.in("id", selectionList);
+        }
+        //Step.2 获取导出数据
+        List<StoreSaleOut> storeSaleOutList = storeSaleOutService.list(queryWrapper);
+
+        // Step.3 组装pageList
+        List<StoreSaleOutPage> pageList = new ArrayList<StoreSaleOutPage>();
+        for (StoreSaleOut main : storeSaleOutList) {
+            StoreSaleOutPage vo = new StoreSaleOutPage();
+            BeanUtils.copyProperties(main, vo);
+            List<StoreSaleOutShip> storeSaleOutShipList = storeSaleOutShipService.selectByMainId(main.getId());
+            vo.setStoreSaleOutShipList(storeSaleOutShipList);
+            List<StoreSaleOutDetails> storeSaleOutDetailsList = storeSaleOutDetailsService.selectByMainId(main.getId());
+            vo.setStoreSaleOutDetailsList(storeSaleOutDetailsList);
+            pageList.add(vo);
+        }
+
+        // Step.4 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "销售出库(sale out)列表");
+        mv.addObject(NormalExcelConstants.CLASS, StoreSaleOutPage.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("销售出库(sale out)数据", "导出人:" + sysUser.getRealname(), "销售出库(sale out)"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("storeCode:store_sale_out:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            // 获取上传文件对象
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<StoreSaleOutPage> list = ExcelImportUtil.importExcel(file.getInputStream(), StoreSaleOutPage.class, params);
+                for (StoreSaleOutPage page : list) {
+                    StoreSaleOut po = new StoreSaleOut();
+                    BeanUtils.copyProperties(page, po);
+                    storeSaleOutService.saveMain(po, page.getStoreSaleOutShipList(), page.getStoreSaleOutDetailsList());
+                }
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.OK("文件导入失败!");
+    }
+
+}

+ 91 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreCheck.java

@@ -0,0 +1,91 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 盘盈盘亏(inventory check)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_check对象", description="盘盈盘亏(inventory check)")
+@Data
+@TableName("store_check")
+public class StoreCheck implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    private String submit;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+}

+ 127 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreCheckDetails.java

@@ -0,0 +1,127 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 盘盈盘亏子表 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_check_details对象", description="盘盈盘亏子表 - 产品明细")
+@Data
+@TableName("store_check_details")
+public class StoreCheckDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(盘盈盘亏)*/
+    @ApiModelProperty(value = "表头主键(盘盈盘亏)")
+    private String headId;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**批号(batch code)*/
+	@Excel(name = "批号(batch code)", width = 15)
+    @ApiModelProperty(value = "批号(batch code)")
+    private String batchCode;
+	/**库存数量(inventory quantity)*/
+	@Excel(name = "库存数量(inventory quantity)", width = 15)
+    @ApiModelProperty(value = "库存数量(inventory quantity)")
+    private java.math.BigDecimal inventoryQuantity;
+	/**盘点数量(counted quantity)*/
+	@Excel(name = "盘点数量(counted quantity)", width = 15)
+    @ApiModelProperty(value = "盘点数量(counted quantity)")
+    private java.math.BigDecimal countedQuantity;
+	/**盘盈/盘亏(inventory profit/loss)*/
+	@Excel(name = "盘盈/盘亏(inventory profit/loss)", width = 15)
+    @ApiModelProperty(value = "盘盈/盘亏(inventory profit/loss)")
+    private java.math.BigDecimal inventory;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**来源id*/
+	@Excel(name = "来源id", width = 15)
+    @ApiModelProperty(value = "来源id")
+    private String sourceId;
+}

+ 176 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOnhand.java

@@ -0,0 +1,176 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 现存量
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@Data
+@TableName("store_onhand")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="store_onhand对象", description="现存量")
+public class StoreOnhand implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**仓库名称*/
+	@Excel(name = "仓库名称", width = 15)
+    @ApiModelProperty(value = "仓库名称")
+    private String warehouseName;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**供应商(supplier)*/
+	@Excel(name = "供应商(supplier)", width = 15)
+    @ApiModelProperty(value = "供应商(supplier)")
+    private String supplier;
+	/**供应商名称*/
+	@Excel(name = "供应商名称", width = 15)
+    @ApiModelProperty(value = "供应商名称")
+    private String supplierName;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+    /**产品编码*/
+    @Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名(chinese name)*/
+	@Excel(name = "产品中文名(chinese name)", width = 15)
+    @ApiModelProperty(value = "产品中文名(chinese name)")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**机型*/
+	@Excel(name = "机型", width = 15)
+    @ApiModelProperty(value = "机型")
+    private String headModel;
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**订货号*/
+	@Excel(name = "订货号", width = 15)
+    @ApiModelProperty(value = "订货号")
+    private String orderno;
+	/**厂家*/
+	@Excel(name = "厂家", width = 15)
+    @ApiModelProperty(value = "厂家")
+    private String factory;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**批号(batch code)*/
+	@Excel(name = "批号(batch code)", width = 15)
+    @ApiModelProperty(value = "批号(batch code)")
+    private String batchCode;
+	/**数量(quantity)*/
+	@Excel(name = "数量(quantity)", width = 15)
+    @ApiModelProperty(value = "数量(quantity)")
+    private BigDecimal quantity;
+	/**初始数量*/
+	@Excel(name = "初始数量", width = 15)
+    @ApiModelProperty(value = "初始数量")
+    private BigDecimal initialQuantity;
+	/**来源主键(来源子表)*/
+	@Excel(name = "来源主键(来源子表)", width = 15)
+    @ApiModelProperty(value = "来源主键(来源子表)")
+    private String sourceId;
+	/**来源编号(入库单)*/
+	@Excel(name = "来源编号(入库单)", width = 15)
+    @ApiModelProperty(value = "来源编号(入库单)")
+    private String sourceCode;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private Date storeDate;
+}

+ 99 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOtherOut.java

@@ -0,0 +1,99 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 其他出库(other out)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_other_out对象", description="其他出库(other out)")
+@Data
+@TableName("store_other_out")
+public class StoreOtherOut implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    private String submit;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+    @ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+}

+ 119 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreOtherOutDetails.java

@@ -0,0 +1,119 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 其他出库子表 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_other_out_details对象", description="其他出库子表 - 产品明细")
+@Data
+@TableName("store_other_out_details")
+public class StoreOtherOutDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(其他出库单)*/
+    @ApiModelProperty(value = "表头主键(其他出库单)")
+    private String headId;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**出库数量(stock out quantity)*/
+	@Excel(name = "出库数量(stock out quantity)", width = 15)
+    @ApiModelProperty(value = "出库数量(stock out quantity)")
+    private java.math.BigDecimal stockOutQuantity;
+	/**库存选择(Inventory selection)*/
+	@Excel(name = "库存选择(Inventory selection)", width = 15)
+    @ApiModelProperty(value = "库存选择(Inventory selection)")
+    private String inventorySelection;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**来源*/
+	@Excel(name = "来源", width = 15)
+    @ApiModelProperty(value = "来源")
+    private String sourceId;
+}

+ 142 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseIn.java

@@ -0,0 +1,142 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 入库单(采购/异常)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_in对象", description="入库单(采购/异常)")
+@Data
+@TableName("store_purchase_in")
+public class StorePurchaseIn implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**供应商(supplier)*/
+	@Excel(name = "供应商(supplier)", width = 15)
+    @ApiModelProperty(value = "供应商(supplier)")
+    private String supplier;
+	/**供应商名称*/
+	@Excel(name = "供应商名称", width = 15)
+    @ApiModelProperty(value = "供应商名称")
+    private String supplierName;
+	/**发货方式(delivery)*/
+	@Excel(name = "发货方式(delivery)", width = 15)
+    @ApiModelProperty(value = "发货方式(delivery)")
+    private String delivery;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**附件(attachs)*/
+	@Excel(name = "附件(attachs)", width = 15)
+    @ApiModelProperty(value = "附件(attachs)")
+    private String attachs;
+	/**到货详情(arrival details)*/
+	@Excel(name = "到货详情(arrival details)", width = 15)
+    @ApiModelProperty(value = "到货详情(arrival details)")
+    private String arrivalDetails;
+	/**1采购入库 2异常采购入库*/
+	@Excel(name = "1采购入库 2异常采购入库", width = 15)
+    @ApiModelProperty(value = "1采购入库 2异常采购入库")
+    private String type;
+    private String sourceCode;
+
+    @ApiModelProperty(value = "1已处理 0未处理")
+    @Dict(dicCode = "yes_or_no")
+    private String hasDeal;
+}

+ 146 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseInDetails.java

@@ -0,0 +1,146 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 入库单(采购/异常)子表- 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_in_details对象", description="入库单(采购/异常)子表- 产品明细")
+@Data
+@TableName("store_purchase_in_details")
+public class StorePurchaseInDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(采购入库单)*/
+    @ApiModelProperty(value = "表头主键(采购入库单)")
+    private String headId;
+	/**到货日期(arrival date)*/
+	@Excel(name = "到货日期(arrival date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "到货日期(arrival date)")
+    private Date arrivalDate;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**需要船检证书(1是 0否)*/
+	@Excel(name = "需要船检证书(1是 0否)", width = 15)
+    @ApiModelProperty(value = "需要船检证书(1是 0否)")
+    private String needShip;
+	/**船检证书*/
+	@Excel(name = "船检证书", width = 15)
+    @ApiModelProperty(value = "船检证书")
+    private String shipInspection;
+	/**到货数量(arrival quantity)*/
+	@Excel(name = "到货数量(arrival quantity)", width = 15)
+    @ApiModelProperty(value = "到货数量(arrival quantity)")
+    private java.math.BigDecimal arrivalQuantity;
+	/**入库数量(stock in quantity)*/
+	@Excel(name = "入库数量(stock in quantity)", width = 15)
+    @ApiModelProperty(value = "入库数量(stock in quantity)")
+    private java.math.BigDecimal stockInQuantity;
+	/**合格(qualified)*/
+	@Excel(name = "合格(qualified)1是 0否", width = 15)
+    @ApiModelProperty(value = "合格(qualified)1是 0否")
+    private String qualified;
+	/**批号(batch code)*/
+	@Excel(name = "批号(batch code)", width = 15)
+    @ApiModelProperty(value = "批号(batch code)")
+    private String batchCode;
+	/**现存量id*/
+	@Excel(name = "现存量id", width = 15)
+    @ApiModelProperty(value = "现存量id")
+    private String batchId;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**厂家(factory)*/
+	@Excel(name = "厂家(factory)", width = 15)
+    @ApiModelProperty(value = "厂家(factory)")
+    private String factory;
+    private String sourceId;
+}

+ 87 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseInShip.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 入库单(采购/异常)子表- 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_in_ship对象", description="入库单(采购/异常)子表- 船明细")
+@Data
+@TableName("store_purchase_in_ship")
+public class StorePurchaseInShip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(采购入库)*/
+    @ApiModelProperty(value = "表头主键(采购入库)")
+    private String headId;
+	/**船id*/
+	@Excel(name = "船id", width = 15)
+    @ApiModelProperty(value = "船id")
+    private String shipId;
+	/**船名*/
+	@Excel(name = "船名", width = 15)
+    @ApiModelProperty(value = "船名")
+    private String shipName;
+	/**主机号*/
+	@Excel(name = "主机号", width = 15)
+    @ApiModelProperty(value = "主机号")
+    private String hostNumber;
+	/**工程编号*/
+	@Excel(name = "工程编号", width = 15)
+    @ApiModelProperty(value = "工程编号")
+    private String projectNo;
+	/**船厂*/
+	@Excel(name = "船厂", width = 15)
+    @ApiModelProperty(value = "船厂")
+    private String shipFactory;
+	/**船东*/
+	@Excel(name = "船东", width = 15)
+    @ApiModelProperty(value = "船东")
+    private String shipowner;
+}

+ 126 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOther.java

@@ -0,0 +1,126 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 其他入库单
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_other对象", description="其他入库单")
+@Data
+@TableName("store_purchase_other")
+public class StorePurchaseOther implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private String submit;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**供应商(supplier)*/
+	@Excel(name = "供应商(supplier)", width = 15)
+    @ApiModelProperty(value = "供应商(supplier)")
+    private String supplier;
+	/**供应商名称*/
+	@Excel(name = "供应商名称", width = 15)
+    @ApiModelProperty(value = "供应商名称")
+    private String supplierName;
+	/**业务类型(busyness type)*/
+	@Excel(name = "业务类型(busyness type)", width = 15)
+    @ApiModelProperty(value = "业务类型(busyness type)")
+    private String busynessType;
+	/**产品分类(production class)*/
+	@Excel(name = "产品分类(production class)", width = 15)
+    @ApiModelProperty(value = "产品分类(production class)")
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+	/**机型(model)*/
+	@Excel(name = "机型(model)", width = 15)
+    @ApiModelProperty(value = "机型(model)")
+    private String model;
+	/**厂家(maker)*/
+	@Excel(name = "厂家(maker)", width = 15)
+    @ApiModelProperty(value = "厂家(maker)")
+    private String maker;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**附件(attachs)*/
+	@Excel(name = "附件(attachs)", width = 15)
+    @ApiModelProperty(value = "附件(attachs)")
+    private String attachs;
+    private String sourceCode;
+}

+ 126 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOtherDetails.java

@@ -0,0 +1,126 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 其他入库单子表 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_other_details对象", description="其他入库单子表 - 产品明细")
+@Data
+@TableName("store_purchase_other_details")
+public class StorePurchaseOtherDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(其他入库单)*/
+    @ApiModelProperty(value = "表头主键(其他入库单)")
+    private String headId;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**厂家(factory)*/
+	@Excel(name = "厂家(factory)", width = 15)
+    @ApiModelProperty(value = "厂家(factory)")
+    private String factory;
+	/**入库数量(stock in quantity)*/
+	@Excel(name = "入库数量(stock in quantity)", width = 15)
+    @ApiModelProperty(value = "入库数量(stock in quantity)")
+    private BigDecimal stockInQuantity;
+	/**批号(batch code)*/
+	@Excel(name = "批号(batch code)", width = 15)
+    @ApiModelProperty(value = "批号(batch code)")
+    private String batchCode;
+	/**批号id*/
+	@Excel(name = "批号id", width = 15)
+    @ApiModelProperty(value = "批号id")
+    private String batchId;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+    private String sourceId;
+}

+ 87 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StorePurchaseOtherShip.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 其他入库单子表 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-04
+ * @Version: V1.0
+ */
+@ApiModel(value="store_purchase_other_ship对象", description="其他入库单子表 - 船明细")
+@Data
+@TableName("store_purchase_other_ship")
+public class StorePurchaseOtherShip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(其他入库)*/
+    @ApiModelProperty(value = "表头主键(其他入库)")
+    private String headId;
+	/**船id*/
+	@Excel(name = "船id", width = 15)
+    @ApiModelProperty(value = "船id")
+    private String shipId;
+	/**船名*/
+	@Excel(name = "船名", width = 15)
+    @ApiModelProperty(value = "船名")
+    private String shipName;
+	/**主机号*/
+	@Excel(name = "主机号", width = 15)
+    @ApiModelProperty(value = "主机号")
+    private String hostNumber;
+	/**工程编号*/
+	@Excel(name = "工程编号", width = 15)
+    @ApiModelProperty(value = "工程编号")
+    private String projectNo;
+	/**船厂*/
+	@Excel(name = "船厂", width = 15)
+    @ApiModelProperty(value = "船厂")
+    private String shipFactory;
+	/**船东*/
+	@Excel(name = "船东", width = 15)
+    @ApiModelProperty(value = "船东")
+    private String shipowner;
+}

+ 131 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOut.java

@@ -0,0 +1,131 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 销售出库(sale out)
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_sale_out对象", description="销售出库(sale out)")
+@Data
+@TableName("store_sale_out")
+public class StoreSaleOut implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**是否出口(export)(1是 0否)*/
+	@Excel(name = "是否出口(export)(1是 0否)", width = 15)
+    @ApiModelProperty(value = "是否出口(export)(1是 0否)")
+    private String isExport;
+	/**是否开票申请(1是 0否)*/
+	@Excel(name = "是否开票申请(1是 0否)", width = 15)
+    @ApiModelProperty(value = "是否开票申请(1是 0否)")
+    private String applyInvoice;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15)
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    private String submit;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目(project)*/
+	@Excel(name = "项目(project)", width = 15)
+    @ApiModelProperty(value = "项目(project)")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**客户(customer)*/
+	@Excel(name = "客户(customer)", width = 15)
+    @ApiModelProperty(value = "客户(customer)")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**销售部门(sale department)*/
+	@Excel(name = "销售部门(sale department)", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)")
+    private String saleDepartment;
+	/**业务员(salesman)*/
+	@Excel(name = "业务员(salesman)", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)")
+    private String salesman;
+	/**销售部门(sale department)名称*/
+	@Excel(name = "销售部门(sale department)名称", width = 15)
+    @ApiModelProperty(value = "销售部门(sale department)名称")
+    private String saleDepartmentName;
+	/**业务员(salesman)名称*/
+	@Excel(name = "业务员(salesman)名称", width = 15)
+    @ApiModelProperty(value = "业务员(salesman)名称")
+    private String salesmanName;
+	/**仓库(warehouse)*/
+	@Excel(name = "仓库(warehouse)", width = 15)
+    @ApiModelProperty(value = "仓库(warehouse)")
+    private String warehouse;
+	/**货位(goods allocation)*/
+	@Excel(name = "货位(goods allocation)", width = 15)
+    @ApiModelProperty(value = "货位(goods allocation)")
+    private String goodsAllocation;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**签单(Signing)*/
+	@Excel(name = "签单(Signing)", width = 15)
+    @ApiModelProperty(value = "签单(Signing)")
+    private String signing;
+    @Dict(dictTable = "base_product_class", dicCode = "id", dicText = "name")
+    private String productionClass;
+    private String model;
+    private String maker;
+}

+ 129 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOutDetails.java

@@ -0,0 +1,129 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 销售出库子表 - 产品明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_sale_out_details对象", description="销售出库子表 - 产品明细")
+@Data
+@TableName("store_sale_out_details")
+public class StoreSaleOutDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(销售出库单)*/
+    @ApiModelProperty(value = "表头主键(销售出库单)")
+    private String headId;
+	/**发货日期(delivery date)*/
+	@Excel(name = "发货日期(delivery date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "发货日期(delivery date)")
+    private Date deliveryDate;
+	/**产品id*/
+	@Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+	/**产品分类*/
+	@Excel(name = "产品分类", width = 15)
+    @ApiModelProperty(value = "产品分类")
+    private String productClass;
+	/**产品编码*/
+	@Excel(name = "产品编码", width = 15)
+    @ApiModelProperty(value = "产品编码")
+    private String productCode;
+	/**产品中文名*/
+	@Excel(name = "产品中文名", width = 15)
+    @ApiModelProperty(value = "产品中文名")
+    private String chineseName;
+	/**产品英文名*/
+	@Excel(name = "产品英文名", width = 15)
+    @ApiModelProperty(value = "产品英文名")
+    private String englishName;
+	/**规格*/
+	@Excel(name = "规格", width = 15)
+    @ApiModelProperty(value = "规格")
+    private String specifications;
+	/**型号*/
+	@Excel(name = "型号", width = 15)
+    @ApiModelProperty(value = "型号")
+    private String model;
+	/**备件号*/
+	@Excel(name = "备件号", width = 15)
+    @ApiModelProperty(value = "备件号")
+    private String partno;
+	/**图号*/
+	@Excel(name = "图号", width = 15)
+    @ApiModelProperty(value = "图号")
+    private String drawingno;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private String qualityGrade;
+	/**发货数量(delivery quantity)*/
+	@Excel(name = "发货数量(delivery quantity)", width = 15)
+    @ApiModelProperty(value = "发货数量(delivery quantity)")
+    private java.math.BigDecimal deliveryQuantity;
+	/**出库数量(stock out quantity)*/
+	@Excel(name = "出库数量(stock out quantity)", width = 15)
+    @ApiModelProperty(value = "出库数量(stock out quantity)")
+    private java.math.BigDecimal stockOutQuantity;
+	/**库存选择(Inventory selection)*/
+	@Excel(name = "库存选择(Inventory selection)", width = 15)
+    @ApiModelProperty(value = "库存选择(Inventory selection)")
+    private String inventorySelection;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**来源*/
+	@Excel(name = "来源", width = 15)
+    @ApiModelProperty(value = "来源")
+    private String sourceId;
+}

+ 87 - 0
srm-module-code/src/main/java/org/jeecg/modules/storeCode/entity/StoreSaleOutShip.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.storeCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 销售出库子表 - 船明细
+ * @Author: jeecg-boot
+ * @Date:   2024-12-11
+ * @Version: V1.0
+ */
+@ApiModel(value="store_sale_out_ship对象", description="销售出库子表 - 船明细")
+@Data
+@TableName("store_sale_out_ship")
+public class StoreSaleOutShip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@Excel(name = "状态(1-启用,0-停用)", width = 15)
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除状态(0-正常,1-已删除)", width = 15)
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(销售出库)*/
+    @ApiModelProperty(value = "表头主键(销售出库)")
+    private String headId;
+	/**船id*/
+	@Excel(name = "船id", width = 15)
+    @ApiModelProperty(value = "船id")
+    private String shipId;
+	/**船名*/
+	@Excel(name = "船名", width = 15)
+    @ApiModelProperty(value = "船名")
+    private String shipName;
+	/**主机号*/
+	@Excel(name = "主机号", width = 15)
+    @ApiModelProperty(value = "主机号")
+    private String hostNumber;
+	/**工程编号*/
+	@Excel(name = "工程编号", width = 15)
+    @ApiModelProperty(value = "工程编号")
+    private String projectNo;
+	/**船厂*/
+	@Excel(name = "船厂", width = 15)
+    @ApiModelProperty(value = "船厂")
+    private String shipFactory;
+	/**船东*/
+	@Excel(name = "船东", width = 15)
+    @ApiModelProperty(value = "船东")
+    private String shipowner;
+}

部分文件因文件數量過多而無法顯示