Commit e5d3ac96eb22c781c769bc5d1b807d9bcf6b14a8

Authored by chenhang4442024
1 parent f21c137d

fix:第二版财务,全部更新

Showing 27 changed files with 1649 additions and 344 deletions
src/main/java/com/order/erp/common/utils/EasyPdfUtils.java
... ... @@ -357,7 +357,12 @@ public class EasyPdfUtils {
357 357 cellList.add(createCell("客户订单号", 110F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
358 358 cellList.add(createCell("客户款号", 110F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
359 359 cellList.add(createCell("REFERENCE", 100F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
360   - cellList.add(createCell("订单颜色", 120F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
  360 + //针对于A01订单单独设置,A01不需要订单颜色。
  361 + if(pdfVOList.get(0).getProjectNo().contains("A01")){
  362 + cellList.add(createCell("COLLECTION", 120F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
  363 + }else{
  364 + cellList.add(createCell("订单颜色", 120F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
  365 + }
361 366 cellList.add(createCell("颜色中文", 100F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
362 367 cellList.add(createCell("订单图片", 110F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
363 368 cellList.add(createCell("产品意见", 150F, 60F, 16F, XEasyPdfDefaultFontStyle.BOLD));
... ... @@ -381,7 +386,11 @@ public class EasyPdfUtils {
381 386 dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCustomerPo()) ? producePdfVO.getCustomerPo() : "", 110F));
382 387 dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCustomerStyle()) ? producePdfVO.getCustomerStyle() : "", 110F));
383 388 dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getModeleLo()) ? producePdfVO.getModeleLo() : "", 100F));
384   - dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getPoColor()) ? producePdfVO.getPoColor() : "", 120F));
  389 + if(producePdfVO.getProjectNo().contains("A01")){
  390 + dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCollection()) ? producePdfVO.getCollection() : "", 120F));
  391 + }else{
  392 + dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getPoColor()) ? producePdfVO.getPoColor() : "", 120F));
  393 + }
385 394 dataCellList.add(createCell(StringUtils.isNotEmpty(producePdfVO.getCnColor()) ? producePdfVO.getCnColor() : "", 100F));
386 395 if (StringUtils.isNotBlank(producePdfVO.getPicUrl())) {
387 396 URL url = new URL(producePdfVO.getPicUrl());
... ...
src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
... ... @@ -45,7 +45,7 @@ public class InvoiceBillOrderController {
45 45 }
46 46  
47 47 /**
48   - * 基础订单查询
  48 + * 基础订单查询 完成
49 49 *
50 50 * @param queryVO 查询条件
51 51 * @return 查询结果
... ... @@ -56,7 +56,7 @@ public class InvoiceBillOrderController {
56 56 }
57 57  
58 58 /**
59   - * 分析列表
  59 + * 分析列表 完成
60 60 *
61 61 * @param queryVO 查询条件
62 62 * @return 查询结果
... ... @@ -67,7 +67,7 @@ public class InvoiceBillOrderController {
67 67 }
68 68  
69 69 /**
70   - * 导出分析列表
  70 + * 导出分析列表 完成
71 71 *
72 72 * @param queryVO 查询条件
73 73 * @return 查询结果
... ... @@ -80,7 +80,7 @@ public class InvoiceBillOrderController {
80 80 }
81 81  
82 82 /**
83   - * 创建invoice单据
  83 + * 创建invoice单据 完成 1
84 84 *
85 85 * @param createVO 数据VO
86 86 * @return 新增结果
... ... @@ -91,7 +91,7 @@ public class InvoiceBillOrderController {
91 91 }
92 92  
93 93 /**
94   - * 获取必须回款日期
  94 + * 获取必须回款日期 完成 1
95 95 *
96 96 * @param createVO 数据VO
97 97 * @return 新增结果
... ... @@ -102,7 +102,7 @@ public class InvoiceBillOrderController {
102 102 }
103 103  
104 104 /**
105   - * 更新扣款信息
  105 + * 更新扣款信息 完成 1
106 106 *
107 107 * @param deductInfoVO 数据VO
108 108 * @return 编辑结果
... ... @@ -113,7 +113,7 @@ public class InvoiceBillOrderController {
113 113 }
114 114  
115 115 /**
116   - * 更新其他金额信息
  116 + * 更新其他金额信息 完成 1
117 117 *
118 118 * @param amountInfoVO 数据VO
119 119 * @return 编辑结果
... ... @@ -124,7 +124,7 @@ public class InvoiceBillOrderController {
124 124 }
125 125  
126 126 /**
127   - * 提交审核
  127 + * 提交审核 完成 1
128 128 *
129 129 * @param commitApplyVO 数据VO
130 130 * @return 编辑结果
... ... @@ -135,7 +135,7 @@ public class InvoiceBillOrderController {
135 135 }
136 136  
137 137 /**
138   - * 删除数据
  138 + * 删除数据 完成 1
139 139 *
140 140 * @param invoiceBillOrderQueryVO 查询条件
141 141 * @return 删除是否成功
... ... @@ -145,7 +145,7 @@ public class InvoiceBillOrderController {
145 145 return invoiceBillOrderService.deleteById(invoiceBillOrderQueryVO);
146 146 }
147 147 /**
148   - * 获取扣款单
  148 + * 获取扣款单 完成 1
149 149 *
150 150 * @param invoiceBillOrderQueryVO 查询条件
151 151 * @return 扣款单
... ... @@ -155,7 +155,7 @@ public class InvoiceBillOrderController {
155 155 return invoiceBillOrderService.getDeductUrlById(invoiceBillOrderQueryVO);
156 156 }
157 157 /**
158   - * 重新上传报关单
  158 + * 重新上传报关单 完成 1
159 159 *
160 160 * @param bgUrl 报关单
161 161 * @return
... ... @@ -176,7 +176,7 @@ public class InvoiceBillOrderController {
176 176 invoiceBillOrderService.exportReceipt(response,queryVO);
177 177 }
178 178 /**
179   - * 设置必须回款日期
  179 + * 设置必须回款日期 完成 1
180 180 * @param createVO 必须回款日期
181 181 * @return
182 182 */
... ... @@ -184,5 +184,15 @@ public class InvoiceBillOrderController {
184 184 public void setBackRefundDate(@RequestBody InvoiceBillCreateVO createVO) {
185 185 invoiceBillOrderService.setBackRefundDate(createVO);
186 186 }
  187 +
  188 + /**
  189 + *设置备注信息 完成 1
  190 + * @param createVO 备注信息
  191 + * @return
  192 + */
  193 + @PostMapping("/notes")
  194 + public void byIdAddNotes(@RequestBody InvoiceBillCreateVO createVO) {
  195 + invoiceBillOrderService.byIdAddNotes(createVO);
  196 + }
187 197 }
188 198  
... ...
src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
... ... @@ -45,7 +45,7 @@ public class ProducePaymentCheckBillOrderController {
45 45 }
46 46  
47 47 /**
48   - * 基础订单查询
  48 + * 基础订单查询 wanchen
49 49 *
50 50 * @param queryVO 查询条件
51 51 * @return 查询结果
... ... @@ -56,7 +56,7 @@ public class ProducePaymentCheckBillOrderController {
56 56 }
57 57  
58 58 /**
59   - * 分析列表
  59 + * 分析列表 wanchen
60 60 *
61 61 * @param queryVO 查询条件
62 62 * @return 查询结果
... ... @@ -67,7 +67,7 @@ public class ProducePaymentCheckBillOrderController {
67 67 }
68 68  
69 69 /**
70   - * 导出分析列表
  70 + * 导出分析列表 wanchen
71 71 *
72 72 * @param queryVO 查询条件
73 73 * @return 查询结果
... ... @@ -80,7 +80,7 @@ public class ProducePaymentCheckBillOrderController {
80 80 }
81 81  
82 82 /**
83   - * 创建生产科应付单据
  83 + * 创建生产科应付单据 wanchen 2
84 84 *
85 85 * @param createVO 数据VO
86 86 * @return 新增结果
... ... @@ -91,7 +91,7 @@ public class ProducePaymentCheckBillOrderController {
91 91 }
92 92  
93 93 /**
94   - * 获取生产科应回款日期
  94 + * 获取生产科应回款日期 wanchen 2
95 95 *
96 96 * @param createVO 数据VO
97 97 * @return 新增结果
... ... @@ -102,7 +102,7 @@ public class ProducePaymentCheckBillOrderController {
102 102 }
103 103  
104 104 /**
105   - * 更新扣款信息
  105 + * 更新扣款信息 wanchen
106 106 *
107 107 * @param deductInfoVO 数据VO
108 108 * @return 编辑结果
... ... @@ -113,7 +113,7 @@ public class ProducePaymentCheckBillOrderController {
113 113 }
114 114  
115 115 /**
116   - * 更新其他金额信息
  116 + * 更新其他金额信息 wanchen
117 117 *
118 118 * @param amountInfoVO 数据VO
119 119 * @return 编辑结果
... ... @@ -124,7 +124,7 @@ public class ProducePaymentCheckBillOrderController {
124 124 }
125 125  
126 126 /**
127   - * 更新发票信息
  127 + * 更新发票信息 wanchen
128 128 *
129 129 * @param invoiceInfoVO 数据VO
130 130 * @return 编辑结果
... ... @@ -146,7 +146,7 @@ public class ProducePaymentCheckBillOrderController {
146 146 }
147 147  
148 148 /**
149   - * 删除数据
  149 + * 删除数据 wanchen
150 150 *
151 151 * @param producePaymentCheckBillOrderQueryVO 查询条件
152 152 * @return 删除是否成功
... ... @@ -156,7 +156,7 @@ public class ProducePaymentCheckBillOrderController {
156 156 return producePaymentCheckBillOrderService.deleteById(producePaymentCheckBillOrderQueryVO);
157 157 }
158 158 /**
159   - * 获取扣款单
  159 + * 获取扣款单 wanchen 2
160 160 *
161 161 * @param producePaymentCheckBillOrderQueryVO 查询条件
162 162 * @return 扣款单
... ... @@ -167,7 +167,7 @@ public class ProducePaymentCheckBillOrderController {
167 167 return producePaymentCheckBillOrderService.getDeductUrlById(producePaymentCheckBillOrderQueryVO);
168 168 }
169 169 /**
170   - * 获取生产科发票
  170 + * 获取生产科发票 wanchen 2
171 171 *
172 172 * @param producePaymentCheckBillOrderQueryVO 查询条件
173 173 * @return 扣款单
... ... @@ -187,10 +187,25 @@ public class ProducePaymentCheckBillOrderController {
187 187 public void exportReceipt(HttpServletResponse response, @RequestBody ProducePaymentCheckBillOrderDO queryVO) throws IOException {
188 188 producePaymentCheckBillOrderService.exportReceipt(response,queryVO);
189 189 }
190   -
  190 + /**
  191 + * 设置应付款日期 wanchen
  192 + *
  193 + * @param producePaymentCheckBillCreatevo 查询条件
  194 + * @return 日期
  195 + */
191 196 @PostMapping("/setPayedDate")
192 197 public void setPayedDate(@RequestBody ProducePaymentCheckBillCreateVO producePaymentCheckBillCreatevo) {
193 198 producePaymentCheckBillOrderService.setPayedDate(producePaymentCheckBillCreatevo);
194 199 }
  200 +
  201 + /**
  202 + *设置备注信息 wanchen 2
  203 + * @param producePaymentCheckBillCreatevo 备注信息
  204 + * @return
  205 + */
  206 + @PostMapping("/notes")
  207 + public void byIdAddNotes(@RequestBody ProducePaymentCheckBillCreateVO producePaymentCheckBillCreatevo) {
  208 + producePaymentCheckBillOrderService.byIdAddNotes(producePaymentCheckBillCreatevo);
  209 + }
195 210 }
196 211  
... ...
src/main/java/com/order/erp/domain/FinanceEnum.java 0 → 100644
  1 +package com.order.erp.domain;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * @author: xms
  8 + * @description: TODO
  9 + * @date: 2023/9/13 18:05
  10 + * @version: 1.0
  11 + */
  12 +@Getter
  13 +@AllArgsConstructor
  14 +public enum FinanceEnum {
  15 +//没有创建invocie号。
  16 + NOT_CREATED(-1,"未创建"),
  17 + //创建了invoice号没有提交审核,或者审核被驳回了。
  18 + UNPAID_PAYMENTS(0,"未收款"),
  19 + //审核通过了。
  20 + RECEIVED_PAYMENT(10,"已收款"),
  21 + ;
  22 + private Integer status;
  23 +
  24 + private String desc;
  25 +
  26 +}
... ...
src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
... ... @@ -29,6 +29,10 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable {
29 29 */
30 30 private String invoiceNo;
31 31 /**
  32 + * 订单id
  33 + */
  34 + private Long orderId ;
  35 + /**
32 36 * 报关单url地址
33 37 */
34 38 private String bgUrl;
... ... @@ -70,7 +74,7 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable {
70 74 */
71 75 private BigDecimal otherAmount;
72 76 /**
73   - * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
  77 + * 状态 -1:未创建、0:未收款,10:已收款
74 78 */
75 79 private Integer status;
76 80 //需要在表中添加字段。
... ... @@ -100,4 +104,8 @@ public class InvoiceBillOrderDO extends BaseDO implements Serializable {
100 104 * */
101 105 private String trackerUser;
102 106  
  107 + /**
  108 + * 备注信息
  109 + * */
  110 + private String notes;
103 111 }
... ...
src/main/java/com/order/erp/domain/dto/order/OrderBaseInfoDO.java
... ... @@ -22,7 +22,7 @@ import java.io.Serializable;
22 22 @SuperBuilder
23 23 public class OrderBaseInfoDO extends BaseDO implements Serializable {
24 24 private static final long serialVersionUID = -59225000333017917L;
25   -
  25 +//1
26 26 private Long id;
27 27 /**
28 28 * 客户编码
... ...
src/main/java/com/order/erp/domain/dto/order/OrderFieldLockApplyDO.java
... ... @@ -6,6 +6,7 @@ import lombok.*;
6 6 import lombok.experimental.SuperBuilder;
7 7  
8 8 import java.io.Serializable;
  9 +import java.util.List;
9 10  
10 11 /**
11 12 * 用户订单-字段锁定申请表(OrderFeildLockApply)实体类
... ... @@ -67,4 +68,9 @@ public class OrderFieldLockApplyDO extends BaseDO implements Serializable {
67 68 */
68 69 private String applyRemark;
69 70  
  71 + /**
  72 + * 这个字段完全是为财务板块创建的,因为提交审核是可以一起提交,所以你把选中的多个订单id都放到一起提交审核,在设置orderid时只能设置一个,所以你其他的几个你必须要找地方存储。所以才用这个,把其他几个都放在里面存储进去。
  73 + */
  74 + private String financeId;
  75 +
70 76 }
... ...
src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
... ... @@ -28,6 +28,11 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab
28 28 * 生产科对账单
29 29 */
30 30 private String checkNo;
  31 +
  32 + /**
  33 + * orderId
  34 + */
  35 + private Long orderId;
31 36 /**
32 37 * 发票url地址
33 38 */
... ... @@ -108,6 +113,9 @@ public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializab
108 113 * 跟单 --业务创建单子,跟单也能看到。
109 114 * */
110 115 private String trackerUser;
111   -
  116 + /**
  117 + * 备注。
  118 + * */
  119 + private String notes;
112 120  
113 121 }
... ...
src/main/java/com/order/erp/domain/pdf/OrderProducePdfVO.java
... ... @@ -53,6 +53,10 @@ public class OrderProducePdfVO implements Serializable {
53 53 * PO COLOR (订单颜色)
54 54 */
55 55 private String poColor;
  56 + /**
  57 + * collection(style description)
  58 + */
  59 + private String collection;
56 60  
57 61 /**
58 62 * 颜色中文
... ...
src/main/java/com/order/erp/domain/vo/order/FinanceOrderResultVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
  4 +import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
  5 +import lombok.*;
  6 +import lombok.experimental.SuperBuilder;
  7 +
  8 +import java.math.BigDecimal;
  9 +
  10 +@Data
  11 +@AllArgsConstructor
  12 +@ToString
  13 +@NoArgsConstructor
  14 +@EqualsAndHashCode(callSuper = false)
  15 +@SuperBuilder
  16 +
  17 +public class FinanceOrderResultVO extends OrderBaseInfoVO {
  18 +
  19 + //基本信息
  20 + /**
  21 + * orderId
  22 + */
  23 + private Long id;
  24 + /**
  25 + * 客户编码
  26 + */
  27 + private String customerCode;
  28 + /**
  29 + * 项目号
  30 + */
  31 + private String projectNo;
  32 + /**
  33 + * 生产科
  34 + */
  35 + private String productionDepartment;
  36 + /**
  37 + * 内部编号
  38 + */
  39 + private String innerNo;
  40 + /**
  41 + * 缩略图片地址
  42 + */
  43 + private String smallPicUrl;
  44 + /**
  45 + * 数量
  46 + */
  47 + private Integer orderCount;
  48 + /**
  49 + * 生成科拖货时间
  50 + */
  51 + private String productionDepartmentConsignTime;
  52 + /**
  53 + * 订单上HOD时间
  54 + */
  55 + private String orderHodTime;
  56 +
  57 +
  58 + //invoice信息
  59 + //应收款信息
  60 +// private InvoiceBillOrderDO invoiceBillOrderDO;
  61 + private Long invoiceId;
  62 + /**
  63 + * 发票单号
  64 + */
  65 + private String invoiceNo;
  66 + /**
  67 + * 报关单url地址
  68 + */
  69 + private String invoiceBgUrl;
  70 + /**
  71 + * 必须回款日期
  72 + */
  73 + private String invoiceBackRefundDate;
  74 + /**
  75 + * 实际回款日期
  76 + */
  77 + private String invoiceActualRefundDate;
  78 +
  79 + /**
  80 + * 发生扣款金额
  81 + */
  82 + private BigDecimal invoiceDeductAmount;
  83 + /**
  84 + * 扣款单url地址
  85 + */
  86 + private String invoiceDeductUrl;
  87 + /**
  88 + * 实际应收金额
  89 + */
  90 + private BigDecimal invoiceActualReceivableAmount;
  91 + /**
  92 + * 实际应付金额1
  93 + */
  94 + private BigDecimal invoiceActualPayedAmount1;
  95 + /**
  96 + * 实际应付金额2
  97 + */
  98 + private BigDecimal invoiceActualPayedAmount2;
  99 + /**
  100 + * 实际应付金额3
  101 + */
  102 + private BigDecimal invoiceActualPayedAmount3;
  103 + /**
  104 + * 其他费用金额
  105 + */
  106 + private BigDecimal invoiceOtherAmount;
  107 + /**
  108 + * 状态 -1:未创建、0:未收款,10:已收款
  109 + */
  110 + private Integer invoiceStatus;
  111 +
  112 + /**
  113 + * 备注信息
  114 + * */
  115 + private String invoiceNotes;
  116 +
  117 + //应付款信息
  118 +// private ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO;
  119 +
  120 + private Long checkId;
  121 + /**
  122 + * 生产科对账单
  123 + */
  124 + private String checkNo;
  125 + /**
  126 + * 发票url地址
  127 + */
  128 + private String checkInvoiceUrl;
  129 + /**
  130 + * 扣款单url地址
  131 + */
  132 + private String checkDeductUrl;
  133 + /**
  134 + * 生产科应付款日期
  135 + */
  136 + private String checkPayedDate;
  137 +
  138 + /**
  139 + * 生产科实际付款日期
  140 + */
  141 + private String checkActualPayedDate;
  142 +
  143 + /**
  144 + * 生产科扣款责任部门
  145 + */
  146 + private String checkDeductDept;
  147 + /**
  148 + * 生产科扣款金额
  149 + */
  150 + private BigDecimal checkDeductAmount;
  151 + /**
  152 + * 实际应付金额
  153 + */
  154 + private BigDecimal checkActualPayedAmount;
  155 + /**
  156 + * 实际应付金额1
  157 + */
  158 + private BigDecimal checkActualPayedAmount1;
  159 + /**
  160 + * 实际应付金额2
  161 + */
  162 + private BigDecimal checkActualPayedAmount2;
  163 + /**
  164 + * 实际应付金额3
  165 + */
  166 + private BigDecimal checkActualPayedAmount3;
  167 + /**
  168 + * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
  169 + */
  170 + private Integer checkPayStatus;
  171 + //需要在表中添加三个字段。
  172 + /**
  173 + * 生产科发票审核状态 0:待审核、1:审核通过,2:审核驳回
  174 + */
  175 + private Integer checkDepartmentInvoiceStatus;
  176 + /**
  177 + * 备注。
  178 + * */
  179 + private String checkNotes;
  180 +
  181 +
  182 + //利润信息
  183 +// private OrderProfitAnalysisVO profitAnalysisInfo;
  184 + /**
  185 + * 利润id。
  186 + * */
  187 + private Long profitId;
  188 + /**
  189 + * 客户单价$
  190 + */
  191 + private Double customerPrice;
  192 + /**
  193 + * 客户总价$
  194 + */
  195 + private Double customerTotalPrice;
  196 +
  197 + /**
  198 + * 生成科单价¥
  199 + */
  200 + private Double productionDepartmentPrice;
  201 + /**
  202 + * 生成科总价¥
  203 + */
  204 + private Double productionDepartmentTotalPrice;
  205 +
  206 +
  207 +
  208 +
  209 +}
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisResultVO.java
... ... @@ -42,7 +42,7 @@ public class InvoiceBillAnalysisResultVO implements Serializable {
42 42 private BigDecimal deductAmount;
43 43  
44 44 /**
45   - * 实际应收金额总计 实际应收1+2+3
  45 + * 实际收款金额汇总 实际收款1+2+3
46 46 */
47 47 private BigDecimal actualReceivableAmount;
48 48  
... ... @@ -61,9 +61,29 @@ public class InvoiceBillAnalysisResultVO implements Serializable {
61 61 * 未付金额合计
62 62 */
63 63 private BigDecimal otherTotalAmount;
64   -
65   - /**
66   - * 合计数据
67   - */
68   -
  64 + //可以省略!
  65 +// /**
  66 +// * 多个不同客户编码的订单合计数据 客户总金额汇总
  67 +// */
  68 +// private BigDecimal sumOrderCustomerTotalPrice;
  69 +// /**
  70 +// * 多个不同客户编码的订单合计数据 客户扣款金额汇总
  71 +// */
  72 +// private BigDecimal sumOrderDeductAmount;
  73 +// /**
  74 +// * 多个不同客户编码的订单合计数据 实际收款金额汇总
  75 +// */
  76 +// private BigDecimal sumOrderActualReceivableAmount;
  77 +// /**
  78 +// * 多个不同客户编码的订单合计数据 未收金额汇总
  79 +// */
  80 +// private BigDecimal sumOrderActualPayedAmount;
  81 +// /**
  82 +// * 多个不同客户编码的订单合计数据 实际应收金额汇总
  83 +// */
  84 +// private BigDecimal sumOrderOtherAmount;
  85 +// /**
  86 +// * 多个不同客户编码的订单合计数据 未付金额汇总
  87 +// */
  88 +// private BigDecimal sumOrderOtherTotalAmount;
69 89 }
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceBillCommitApplyVO.java
... ... @@ -4,6 +4,7 @@ import lombok.*;
4 4 import lombok.experimental.SuperBuilder;
5 5  
6 6 import java.io.Serializable;
  7 +import java.util.List;
7 8  
8 9 /**
9 10 * 应收款账单 -- 提交审核
... ... @@ -19,7 +20,8 @@ import java.io.Serializable;
19 20 @SuperBuilder
20 21 public class InvoiceBillCommitApplyVO implements Serializable {
21 22  
22   - private Long id;
  23 + private List<Long> id;
  24 + //日期
23 25 private String actualRefundDate;
24 26 private String payee;
25 27  
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceBillCreateVO.java
... ... @@ -43,5 +43,10 @@ public class InvoiceBillCreateVO implements Serializable {
43 43 */
44 44 private List<Long> orderIds;
45 45  
  46 + /**
  47 + * 备注
  48 + */
  49 + private String notes;
  50 +
46 51  
47 52 }
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
... ... @@ -30,43 +30,94 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable
30 30 private String invoiceNo;
31 31  
32 32 /**
33   - * 总经理审核状态 -1,未提交审核,0:待审核、1:审核通过,2:审核驳回
  33 + * 生产科对账单号
34 34 */
35   - private Integer status;
  35 + private String checkNo;
36 36  
37 37 /**
38   - * 客户编码
  38 + * 发票状态 总经理审核状态 -1,未创建,0:未收款、10:已收款
  39 + */
  40 + private Integer invoiceStatus;
  41 +
  42 + /**
  43 + * 对账单号状态 总经理审核状态 -1,未创建,0:未收款、10:已收款
  44 + */
  45 + private Integer checkNoStatus;
  46 +
  47 + /**
  48 + * order订单的客户编码
39 49 */
40 50 private String customerCode;
41 51  
42 52 /**
43   - * 项目号
  53 + * order订单的项目号
44 54 */
45 55 private String projectNo;
46 56  
47 57 /**
48   - * 生产科
  58 + * order订单的生产科
49 59 */
50 60 private String productionDepartment;
51 61  
52 62 /**
53   - * 内部编号
  63 + * order订单的内部编号
54 64 */
55 65 private String innerNo;
56 66  
57 67 /**
58   - * 客户po号
  68 + * order订单的客户po号
59 69 */
60 70 private String customerPo;
61 71  
62 72 /**
63   - * 开始时间
  73 + * invoice的开始时间
  74 + */
  75 + private String invoiceStartTime;
  76 +
  77 + /**
  78 + * invoice的结束时间
  79 + */
  80 + private String invoiceEndTime;
  81 + /**
  82 + * check的开始时间
64 83 */
65   - private String startTime;
  84 + private String checkStartTime;
66 85  
67 86 /**
68   - * 结束时间
  87 + * check的结束时间
  88 + */
  89 + private String checkEndTime;
  90 + /**
  91 + * order订单的开始时间
  92 + */
  93 + private String createStartTime;
  94 + /**
  95 + * order订单的结束时间
  96 + */
  97 + private String createEndTime;
  98 + /**
  99 + * order订单的生产科拖货开始时间
  100 + */
  101 + private String productionDepartmentConsignStartTime;
  102 + /**
  103 + * order订单的生产科拖货结束时间
  104 + */
  105 + private String productionDepartmentConsignEndTime;
  106 + /**
  107 + * order订单的HOD开始时间
  108 + */
  109 + private String orderHodStartTime;
  110 + /**
  111 + * order订单的HOD结束时间
  112 + */
  113 + private String orderHodEndTime;
  114 + /**
  115 + * 跟单员 用来判断跟单员只能看到跟单员的数据
  116 + */
  117 + private String trackerUserName;
  118 + /**
  119 + * 业务员 用来判断业务员只能看到业务员的数据
69 120 */
70   - private String endTime;
  121 + private String businessUserName;
71 122 }
72 123  
... ...
src/main/java/com/order/erp/domain/vo/order/InvoiceFieldVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import lombok.*;
  4 +import lombok.experimental.SuperBuilder;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.util.List;
  8 +
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class InvoiceFieldVO {
  16 +
  17 +
  18 + /**
  19 + * 订单id,这里取选中多个集合中的第第一个id作为申请id。
  20 + */
  21 + private List<Long> invoiceId;
  22 + /**
  23 + * 订单id,这里取选中多个集合中的第第一个id作为申请id。
  24 + */
  25 + private List<String> innerNo;
  26 + /**
  27 + * 发票单号
  28 + */
  29 + private String invoiceNo;
  30 + /**
  31 + * 必须回款日期
  32 + */
  33 + private String backRefundDate;
  34 + /**
  35 + * 实际回款日期
  36 + */
  37 + private String actualRefundDate;
  38 + /**
  39 + * 发生扣款金额
  40 + */
  41 + private BigDecimal deductAmount;
  42 + /**
  43 + * 其他费用金额
  44 + */
  45 + private BigDecimal otherAmount;
  46 + /**
  47 + * payee 收款单位
  48 + */
  49 + private String payee;
  50 + /**
  51 + * 实际收款金额汇总
  52 + * */
  53 + private BigDecimal totalPayAmount;
  54 + /**
  55 + * 客户总价金额汇总
  56 + * */
  57 + private BigDecimal totalCustomerAmount;
  58 + /**
  59 + * 跟单员
  60 + * */
  61 + private String trackerUser;
  62 + /**
  63 + * 业务员
  64 + * */
  65 + private String businesPerson;
  66 + /**
  67 + * 财务人员
  68 + * */
  69 + private String financePerson;
  70 +
  71 +}
... ...
src/main/java/com/order/erp/domain/vo/order/OrderLockFieldVO.java
... ... @@ -48,13 +48,18 @@ public class OrderLockFieldVO implements Serializable {
48 48 /**
49 49 * 应收款账单字段
50 50 */
51   - private InvoiceBillOrderDO invoiceBillOrderDO;
  51 +// private List<InvoiceBillOrderDO> invoiceBillOrderDOList;
  52 +
  53 + private InvoiceFieldVO invoiceFieldVO;
52 54  
53 55 /**
54 56 * 应付款账单字段
55 57 */
  58 + //这个专门给发票审核用的。
56 59 private ProducePaymentCheckBillOrderDO checkBillOrderDO;
57 60  
  61 + private ProducePaymentCheckBillFieldVO producePaymentCheckBillFieldVO;
  62 +
58 63 /**
59 64 * 导出指定订单id集合
60 65 */
... ...
src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillCommitApplyVO.java
... ... @@ -4,6 +4,7 @@ import lombok.*;
4 4 import lombok.experimental.SuperBuilder;
5 5  
6 6 import java.io.Serializable;
  7 +import java.util.List;
7 8  
8 9 /**
9 10 * 生产科对账单应收账单(ProducePaymentCheckBillOrder)实体类
... ... @@ -19,7 +20,7 @@ import java.io.Serializable;
19 20 @SuperBuilder
20 21 public class ProducePaymentCheckBillCommitApplyVO implements Serializable {
21 22  
22   - private Long id;
  23 + private List<Long> id;
23 24  
24 25 private String actualPayedDate;
25 26 }
... ...
src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillCreateVO.java
... ... @@ -35,6 +35,10 @@ public class ProducePaymentCheckBillCreateVO implements Serializable {
35 35 * 订单id集合
36 36 */
37 37 private List<Long> orderIds;
  38 + /**
  39 + * 备注
  40 + */
  41 + private String notes;
38 42  
39 43  
40 44 }
... ...
src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillFieldVO.java 0 → 100644
  1 +package com.order.erp.domain.vo.order;
  2 +
  3 +import lombok.*;
  4 +import lombok.experimental.SuperBuilder;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.util.List;
  8 +
  9 +@Data
  10 +@AllArgsConstructor
  11 +@ToString
  12 +@NoArgsConstructor
  13 +@EqualsAndHashCode(callSuper = false)
  14 +@SuperBuilder
  15 +public class ProducePaymentCheckBillFieldVO {
  16 +
  17 +
  18 + /**
  19 + * 订单id,这里选取多个集合中的第第一个id作为申请id。
  20 + */
  21 + private List<Long> producePaymentCheckBillId;
  22 + /**
  23 + * 内部编号。
  24 + */
  25 + private List<String> innerNo;
  26 +
  27 + /**
  28 + * 生产科对账单
  29 + */
  30 + private String checkNo;
  31 +
  32 + /**
  33 + * 发票url地址
  34 + */
  35 + private String invoiceUrl;
  36 + /**
  37 + * 生产科应付款日期
  38 + */
  39 + private String payedDate;
  40 +
  41 + /**
  42 + * 生产科实际付款日期
  43 + */
  44 + private String actualPayedDate;
  45 +
  46 + /**
  47 + * 生产科扣款金额
  48 + */
  49 + private BigDecimal deductAmount;
  50 + /**
  51 + * 实际应付金额
  52 + */
  53 + private BigDecimal actualPayedAmount;
  54 + /**
  55 + * 实际付款金额汇总
  56 + * */
  57 + private BigDecimal totalActualPayedAmount;
  58 +
  59 + /**
  60 + * 未付金额
  61 + * */
  62 + private BigDecimal unPayedAmount;
  63 + /**
  64 + * 跟单员
  65 + * */
  66 + private String trackerUser;
  67 + /**
  68 + * 业务员
  69 + * */
  70 + private String businesPerson;
  71 + /**
  72 + * 财务人员
  73 + * */
  74 + private String financePerson;
  75 + /**
  76 + * 生产科
  77 + * */
  78 + private String productionName;
  79 +
  80 +}
... ...
src/main/java/com/order/erp/mapper/order/InvoiceBillOrderMapper.java
1 1 package com.order.erp.mapper.order;
2 2  
3 3 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
4 6 import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
  7 +import com.order.erp.domain.vo.order.FinanceOrderResultVO;
  8 +import com.order.erp.domain.vo.order.InvoiceBillOrderQueryVO;
  9 +import org.apache.ibatis.annotations.Param;
5 10 import org.apache.ibatis.annotations.Select;
6 11  
7 12 import java.util.List;
... ... @@ -16,5 +21,7 @@ public interface InvoiceBillOrderMapper extends BaseMapper&lt;InvoiceBillOrderDO&gt; {
16 21 @Select("SELECT * FROM invoice_bill_order WHERE status in('-1','20') and enable_flag=10 and DATE_SUB(CURDATE(), INTERVAL 1 YEAR) <= date(create_time);")
17 22 List<InvoiceBillOrderDO> getOverEventList();
18 23  
  24 + IPage<FinanceOrderResultVO> byConditionGetOrder(@Param("page") Page<FinanceOrderResultVO> page, @Param("queryVO") InvoiceBillOrderQueryVO queryVO);
  25 +
19 26 }
20 27  
... ...
src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
... ... @@ -117,4 +117,6 @@ public interface InvoiceBillOrderService extends IService&lt;InvoiceBillOrderDO&gt; {
117 117  
118 118 ServerResult setBackRefundDate(InvoiceBillCreateVO createVO);
119 119  
  120 + ServerResult byIdAddNotes(InvoiceBillCreateVO createVO);
  121 +
120 122 }
... ...
src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
... ... @@ -109,4 +109,5 @@ public interface ProducePaymentCheckBillOrderService extends IService&lt;ProducePay
109 109  
110 110 List<ProducePaymentCheckBillOrderDO> getOverEventList();
111 111 ServerResult setPayedDate(ProducePaymentCheckBillCreateVO createVO);
  112 + ServerResult byIdAddNotes(ProducePaymentCheckBillCreateVO createVO);
112 113 }
... ...
src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
... ... @@ -20,6 +20,7 @@ import com.order.erp.common.utils.TransactionHelper;
20 20 import com.order.erp.config.DataScope;
21 21 import com.order.erp.domain.ApplyStatusEnum;
22 22 import com.order.erp.domain.ApplyTypeEnum;
  23 +import com.order.erp.domain.FinanceEnum;
23 24 import com.order.erp.domain.RoleEnum;
24 25 import com.order.erp.domain.dto.BaseDO;
25 26 import com.order.erp.domain.dto.SystemSettingDO;
... ... @@ -46,6 +47,7 @@ import java.time.LocalDateTime;
46 47 import java.util.*;
47 48 import java.util.function.Function;
48 49 import java.util.stream.Collectors;
  50 +import java.util.stream.Stream;
49 51  
50 52 /**
51 53 * 应收款账单表(InvoiceBillOrder)表服务实现类
... ... @@ -79,6 +81,9 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
79 81 @Resource
80 82 private TransactionHelper transactionHelper;
81 83  
  84 + @Resource
  85 + private ProducePaymentCheckBillOrderService producePaymentCheckBillOrderService;
  86 +
82 87  
83 88 /**
84 89 * 分页查询
... ... @@ -88,7 +93,12 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
88 93 */
89 94 @Override
90 95 public ServerResult listByPage(InvoiceBillOrderQueryVO queryVO) {
91   - RoleEnum role = dataScope.getRole();
  96 + //分页查询既会筛选基本信息也会筛选invoice信息。只能是选通过一边,要么是基本信息这边,要么是invoice这边,然后根据对应invoice或者orderId去查询。
  97 + //例如:查询基本信息中项目号为A01-C2409,并且invoice状态为已通过,那么就先去基本信息中查找A01-C2409,然后找到对应的invoice,判断A01-C2409对应的订单集合是否有invoice,有的话,就查找已通过的invocie。
  98 + //要是查询invoice为67,并且订单HOD时间小于2024-12-25,那么就先去invoice中查找是否有checkNo为67的订单,然后查找对应orderId,使用orderId去查找对应订单基本信息,查看是否有HOD小于2024-12-25的单子。
  99 +
  100 +
  101 + /* RoleEnum role = dataScope.getRole();
92 102 LambdaQueryWrapper<InvoiceBillOrderDO> queryWrapper = getQueryWrapper(queryVO);
93 103 //跟单也只能看到自己创建的 业务只能看到自己的
94 104 if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())){
... ... @@ -99,9 +109,192 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
99 109 }
100 110 Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
101 111 IPage<InvoiceBillOrderDO> iPage = page(page, queryWrapper);
102   - return ServerResult.success(iPage);
103   - }
  112 + //创建另一个page,包含订单基本信息与invoice,然后一起返回。
  113 + return ServerResult.success(iPage);*/
  114 +
  115 + //一个条件也没有。
  116 +// if(true) {
  117 +// Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
  118 +// IPage<OrderBaseInfoDO> iPage = orderBaseInfoService.page(page, new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).orderByDesc(OrderBaseInfoDO::getId));
  119 +// List<OrderBaseInfoDO> orderList = iPage.getRecords();
  120 +// //获取关联的信息。
  121 +// List<FinanceOrderResultVO> financeOrderResultVOList = null;
  122 +// if (CollectionUtils.isNotEmpty(orderList)) {
  123 +// List<Long> orderIds = orderList.stream().filter(Objects::nonNull).map(item -> item.getId()).collect(Collectors.toList());
  124 +// List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>()
  125 +// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillOrderDO::getOrderId, orderIds));
  126 +// List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = producePaymentCheckBillOrderService.list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
  127 +// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(ProducePaymentCheckBillOrderDO::getOrderId, orderIds));
  128 +// Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOList.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));
  129 +// Map<Long, ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOMap = producePaymentCheckBillOrderDOList.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));
  130 +// financeOrderResultVOList = orderList.stream().filter(Objects::nonNull).map(x -> {
  131 +// FinanceOrderResultVO financeOrderResultVO = new FinanceOrderResultVO();
  132 +// BeanUtils.copyProperties(x, financeOrderResultVO);
  133 +// if (invoiceBillOrderDOMap.containsKey(x.getId())) {
  134 +// InvoiceBillOrderDO invoiceBillOrderDO = invoiceBillOrderDOMap.get(x.getId());
  135 +// financeOrderResultVO.setInvoiceBillOrderDO(invoiceBillOrderDO);
  136 +// }
  137 +// if (producePaymentCheckBillOrderDOMap.containsKey(x.getId())) {
  138 +// ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = producePaymentCheckBillOrderDOMap.get(x.getId());
  139 +// financeOrderResultVO.setProducePaymentCheckBillOrderDO(producePaymentCheckBillOrderDO);
  140 +// }
  141 +// return financeOrderResultVO;
  142 +// }).collect(Collectors.toList());
  143 +// }
  144 +// IPage<FinanceOrderResultVO> financeOrderResultVOIPage = new Page<>();
  145 +// financeOrderResultVOIPage.setRecords(financeOrderResultVOList);
  146 +// BeanUtils.copyProperties(iPage, financeOrderResultVOIPage, "records");
  147 +// return ServerResult.success(financeOrderResultVOIPage);
  148 +// }
  149 +// else{
  150 + /* //上面单独再写一个if判断,要是一个条件都没有,就直接进行分页查询(只做一下权限)。 唯一问题:这里一下子需要查询多条数据。
  151 + RoleEnum role = dataScope.getRole();
  152 + List<OrderBaseInfoDO> orderBaseInfoDOList = ByOrderGetOrderId(queryVO, role);
  153 + if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
  154 + return ServerResult.success();
  155 + }
  156 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = ByInvoiceGetOrderId(queryVO, orderBaseInfoDOList);
  157 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = ByCheckGetOrderId(queryVO, orderBaseInfoDOList);
  158 +
  159 + //取交集
  160 +
  161 + //取交集。
  162 + // 获取每个集合的 id 列表,如果集合为空则返回空集合
  163 + Set<Long> orderIds1 = orderBaseInfoDOList != null
  164 + ? orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet())
  165 + : Collections.emptySet();
  166 +
  167 + Set<Long> orderIds2 = invoiceBillOrderDOS != null
  168 + ? invoiceBillOrderDOS.stream().map(InvoiceBillOrderDO::getOrderId).collect(Collectors.toSet())
  169 + : Collections.emptySet();
  170 +
  171 + Set<Long> orderIds3 = producePaymentCheckBillOrderDOS != null
  172 + ? producePaymentCheckBillOrderDOS.stream().map(ProducePaymentCheckBillOrderDO::getOrderId).collect(Collectors.toSet())
  173 + : Collections.emptySet();
  174 +
  175 + Set<Long> intersection = Stream.of(orderIds1, orderIds2, orderIds3)
  176 + .filter(CollectionUtils::isNotEmpty) // 过滤掉空集合
  177 + .reduce((set1, set2) -> {
  178 + set1.retainAll(set2); // 取交集
  179 + return set1;
  180 + })
  181 + .orElse(Collections.emptySet()); // 如果结果为空则返回空集合
  182 + if (CollectionUtils.isEmpty(intersection)) {
  183 + return ServerResult.success();
  184 + }
  185 +
  186 + //返回交集的订单数据。 todo
  187 + Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
  188 + IPage<OrderBaseInfoDO> iPage = orderBaseInfoService.page(page, new LambdaQueryWrapper<OrderBaseInfoDO>().in(OrderBaseInfoDO::getId, intersection));
  189 + List<OrderBaseInfoDO> orderList = iPage.getRecords();
  190 +
  191 +
  192 + //去对应的invoice中查找。
  193 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillOrderDO::getOrderId, intersection));
  194 + //去对应的check中查找。
  195 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = producePaymentCheckBillOrderService.list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(ProducePaymentCheckBillOrderDO::getOrderId, intersection));
  196 +
  197 + List<FinanceOrderResultVO> financeOrderResultVOS = null;
  198 + if (CollectionUtils.isNotEmpty(orderList)) {
  199 + // 将 Map 提升到方法范围内
  200 + Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = CollectionUtils.isNotEmpty(invoiceBillOrderDOList)
  201 + ? invoiceBillOrderDOList.stream().collect(Collectors.toMap(
  202 + InvoiceBillOrderDO::getOrderId,
  203 + Function.identity(),
  204 + (existing, replacement) -> existing))
  205 + : Collections.emptyMap();
  206 + Map<Long, ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOMap = CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)
  207 + ? producePaymentCheckBillOrderDOList.stream().collect(Collectors.toMap(
  208 + ProducePaymentCheckBillOrderDO::getOrderId,
  209 + Function.identity(),
  210 + (existing, replacement) -> existing))
  211 + : Collections.emptyMap();
  212 + financeOrderResultVOS = orderList.stream().map(result -> {
  213 + //到这复制订单基本信息。 一个整体包含订单基本信息,invoice信息,生产科对账单号信息。
  214 + FinanceOrderResultVO financeOrderResultVO = new FinanceOrderResultVO();
  215 + BeanUtils.copyProperties(result, financeOrderResultVO);
  216 + // 访问 invoiceBillOrderDOMap
  217 + if (invoiceBillOrderDOMap.containsKey(result.getId())) {
  218 + // 对 invoice 进行处理,填充到整体中,需要orderId一致。
  219 + financeOrderResultVO.setInvoiceBillOrderDO(invoiceBillOrderDOMap.get(result.getId()));
  220 + }
  221 + if (producePaymentCheckBillOrderDOMap.containsKey(result.getId())) {
  222 + // 对 check 进行处理,填充到整体中,需要orderId一致。
  223 + financeOrderResultVO.setProducePaymentCheckBillOrderDO(producePaymentCheckBillOrderDOMap.get(result.getId()));
  224 + }
  225 + return financeOrderResultVO;
  226 + }).collect(Collectors.toList());
  227 + }
  228 + IPage<FinanceOrderResultVO> finVoPage = new Page<>();
  229 + finVoPage.setRecords(financeOrderResultVOS);
  230 + BeanUtils.copyProperties(iPage, finVoPage, "records");
  231 + System.out.println("交集 ID 集合:" + intersection);
  232 + //返回所有的订单数据。 todo 没有筛选的情况。
  233 + return ServerResult.success(finVoPage);*/
  234 + RoleEnum role = dataScope.getRole();
  235 + Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
  236 + if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) {
  237 + queryVO.setTrackerUserName(dataScope.getLoginUserName());
  238 + IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page, queryVO);
  239 + return ServerResult.success(financeOrderResultVOIPage);
  240 + }
  241 + if (Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())) {
  242 + queryVO.setBusinessUserName(dataScope.getLoginUserName());
  243 + IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO);
  244 + return ServerResult.success(financeOrderResultVOIPage);
  245 + }
  246 + IPage<FinanceOrderResultVO> financeOrderResultVOIPage = baseMapper.byConditionGetOrder(page,queryVO);
  247 + return ServerResult.success(financeOrderResultVOIPage);
  248 + }
  249 +// }
  250 +
104 251  
  252 +
  253 +
  254 + private List<OrderBaseInfoDO> ByOrderGetOrderId(InvoiceBillOrderQueryVO queryVO,RoleEnum role){
  255 + LambdaQueryWrapper<OrderBaseInfoDO> lambdawrapper = new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  256 + .eq(StringUtils.isNotBlank(queryVO.getCustomerCode()), OrderBaseInfoDO::getCustomerCode, queryVO.getCustomerCode())
  257 + .eq(StringUtils.isNotBlank(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment())
  258 + .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo())
  259 + .eq(StringUtils.isNotBlank(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())
  260 + .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo())
  261 + .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime())
  262 + .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime())
  263 + .ge(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignStartTime())
  264 + .le(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignEndTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignEndTime())
  265 + .ge(StringUtils.isNotBlank(queryVO.getOrderHodStartTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodStartTime())
  266 + .le(StringUtils.isNotBlank(queryVO.getOrderHodEndTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodEndTime());
  267 + if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) {
  268 + lambdawrapper.eq(OrderBaseInfoDO::getCreateBy, dataScope.getLoginUserName());
  269 + }
  270 + if (Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())) {
  271 + lambdawrapper.eq(OrderBaseInfoDO::getBusinessPerson, dataScope.getLoginUserName());
  272 + }
  273 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(lambdawrapper);
  274 + return orderBaseInfoDOList;
  275 + }
  276 + private List<InvoiceBillOrderDO> ByInvoiceGetOrderId(InvoiceBillOrderQueryVO queryVO,List<OrderBaseInfoDO> orderBaseInfoDOList){
  277 + LambdaQueryWrapper<InvoiceBillOrderDO> LambdaQueryWrapper = new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  278 + .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo())
  279 + .eq(Objects.nonNull(queryVO.getInvoiceStatus()), InvoiceBillOrderDO::getStatus, queryVO.getInvoiceStatus())
  280 + .ge(StringUtils.isNotBlank(queryVO.getInvoiceStartTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceStartTime())
  281 + .le(StringUtils.isNotBlank(queryVO.getInvoiceEndTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceEndTime());
  282 + if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){
  283 + LambdaQueryWrapper.in(InvoiceBillOrderDO::getOrderId, orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList()));
  284 + }
  285 + return list(LambdaQueryWrapper);
  286 + }
  287 + private List<ProducePaymentCheckBillOrderDO> ByCheckGetOrderId(InvoiceBillOrderQueryVO queryVO,List<OrderBaseInfoDO> orderBaseInfoDOList){
  288 + LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> wrapper = new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  289 + .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), ProducePaymentCheckBillOrderDO::getCheckNo, queryVO.getCheckNo())
  290 + .eq(Objects.nonNull(queryVO.getInvoiceStatus()), ProducePaymentCheckBillOrderDO::getStatus, queryVO.getCheckNoStatus())
  291 + .ge(StringUtils.isNotBlank(queryVO.getCheckStartTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getCheckStartTime())
  292 + .le(StringUtils.isNotBlank(queryVO.getCheckEndTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getCheckEndTime());
  293 + if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){
  294 + wrapper.in(ProducePaymentCheckBillOrderDO::getOrderId, orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList()));
  295 + }
  296 + return producePaymentCheckBillOrderService.list(wrapper);
  297 + }
105 298 /**
106 299 * @param queryVO
107 300 * @return
... ... @@ -109,10 +302,10 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
109 302 private LambdaQueryWrapper<InvoiceBillOrderDO> getQueryWrapper(InvoiceBillOrderQueryVO queryVO) {
110 303 LambdaQueryWrapper<InvoiceBillOrderDO> queryWrapper = new LambdaQueryWrapper<InvoiceBillOrderDO>()
111 304 .eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
112   - .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo())
113   - .eq(Objects.nonNull(queryVO.getStatus()), InvoiceBillOrderDO::getStatus, queryVO.getStatus())
114   - .ge(StringUtils.isNotBlank(queryVO.getStartTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getStartTime())
115   - .le(StringUtils.isNotBlank(queryVO.getEndTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getEndTime())
  305 + /* .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo())
  306 + .eq(Objects.nonNull(queryVO.getInvoiceStatus()), InvoiceBillOrderDO::getStatus, queryVO.getInvoiceStatus())
  307 + .ge(StringUtils.isNotBlank(queryVO.getInvoiceStartTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceStartTime())
  308 + .le(StringUtils.isNotBlank(queryVO.getInvoiceEndTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceEndTime())*/
116 309 .orderByDesc(InvoiceBillOrderDO::getId);
117 310 if (CollectionUtils.isNotEmpty(queryVO.getIds())) {
118 311 queryWrapper.in(InvoiceBillOrderDO::getId, queryVO.getIds());
... ... @@ -125,13 +318,16 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
125 318  
126 319 @Override
127 320 public ServerResult listBaseOrderInfoBy(InvoiceBaseOrderQueryVO queryVO) {
128   - List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
129   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
130   - .eq(InvoiceBillMappingDO::getInvoiceNo, queryVO.getInvoiceNo()));
  321 +// List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
  322 +// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  323 +// .eq(InvoiceBillMappingDO::getInvoiceNo, queryVO.getInvoiceNo()));
  324 +
  325 + List<InvoiceBillOrderDO> mappingDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  326 + .eq(InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo()));
131 327 if (CollectionUtils.isEmpty(mappingDOS)) {
132 328 return ServerResult.success();
133 329 }
134   - Set<Long> orderIds = mappingDOS.stream().map(InvoiceBillMappingDO::getOrderId).collect(Collectors.toSet());
  330 + Set<Long> orderIds = mappingDOS.stream().map(InvoiceBillOrderDO::getOrderId).collect(Collectors.toSet());
135 331 //返回数据包含利润信息。
136 332 //创建返回的数据,里面包含订单信息和利润信息,然后放到list集合中。
137 333 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
... ... @@ -308,16 +504,17 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
308 504 if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) {
309 505 return null;
310 506 }
311   - Set<Long> ids = invoiceBillOrderDOS.stream().map(InvoiceBillOrderDO::getId).collect(Collectors.toSet());
312   - List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getInvoiceBillId, ids));
313   - if (CollectionUtils.isEmpty(invoiceBillMappingDOS)) {
314   - return null;
315   - }
316   - Map<Long, InvoiceBillMappingDO> orderBillMap = invoiceBillMappingDOS.stream().collect(Collectors.toMap(InvoiceBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
317   - List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap);
318   - Map<String, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getInvoiceNo, Function.identity(), (x, y) -> x));
  507 +// List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getInvoiceBillId, ids));
  508 +// if (CollectionUtils.isEmpty(invoiceBillMappingDOS)) {
  509 +// return null;
  510 +// }
  511 + Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));
  512 + //第一版,上面为第二版 Map<Long, InvoiceBillMappingDO> orderBillMap = invoiceBillMappingDOS.stream().collect(Collectors.toMap(InvoiceBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
  513 + List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(invoiceBillOrderDOMap);
  514 +//第一版,上面为第二版 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap);
  515 + Map<String, InvoiceBillOrderDO> invoiceBillMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getInvoiceNo, Function.identity(), (x, y) -> x));
319 516 Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(InvoiceOrderBaseItemVO::getInvoiceCode));
320   - List<InvoiceBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(invoiceBillOrderDOMap, baseItemMap);
  517 + List<InvoiceBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(invoiceBillMap, baseItemMap);
321 518 return wrapperAnalysisResultVO(exportVOS);
322 519 }
323 520  
... ... @@ -472,7 +669,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
472 669 * @param mappingDOMap
473 670 * @return
474 671 */
475   - private List<InvoiceOrderBaseItemVO> getInvoiceOrderBaseItems(Map<Long, InvoiceBillMappingDO> mappingDOMap) {
  672 + private List<InvoiceOrderBaseItemVO> getInvoiceOrderBaseItems(Map<Long, InvoiceBillOrderDO> mappingDOMap) {
476 673 Set<Long> orderIds = mappingDOMap.keySet();
477 674 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
478 675 List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(OrderProfitAnalysisDO::getOrderId, orderIds));
... ... @@ -494,7 +691,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
494 691 }
495 692  
496 693 if (mappingDOMap.containsKey(orderId)) {
497   - InvoiceBillMappingDO mappingDO = mappingDOMap.get(orderId);
  694 + InvoiceBillOrderDO mappingDO = mappingDOMap.get(orderId);
498 695 itemVO.setInvoiceCode(mappingDO.getInvoiceNo());
499 696 }
500 697 baseItemVOS.add(itemVO);
... ... @@ -507,18 +704,23 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
507 704 * @return
508 705 */
509 706 private Set<Long> filterBillOrderIdsBy(InvoiceBillOrderQueryVO queryVO) {
  707 + //根据基本信息得到对应的订单id。
510 708 List<Long> orderIds = filterOrderIdsBy(queryVO);
511 709 if (CollectionUtils.isEmpty(orderIds)) {
512 710 return null;
513 711 }
514   - List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
515   - .in(CollectionUtils.isNotEmpty(orderIds), InvoiceBillMappingDO::getOrderId, orderIds));
  712 +// List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  713 +// .in(CollectionUtils.isNotEmpty(orderIds), InvoiceBillMappingDO::getOrderId, orderIds));
  714 + //不再从invoiceBillMappingDO里面查询关联的数据,而是应该从invoice中查询。
  715 + List<InvoiceBillOrderDO> mappingDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  716 + .in(CollectionUtils.isNotEmpty(orderIds), InvoiceBillOrderDO::getOrderId, orderIds));
516 717 if (CollectionUtils.isEmpty(mappingDOS)) {
517 718 Set<Long> ids = new HashSet<>();
518 719 ids.add(-1L);
519 720 return ids;
520 721 }
521   - return mappingDOS.stream().map(InvoiceBillMappingDO::getInvoiceBillId).collect(Collectors.toSet());
  722 +// return mappingDOS.stream().map(InvoiceBillMappingDO::getInvoiceBillId).collect(Collectors.toSet());
  723 + return mappingDOS.stream().map(InvoiceBillOrderDO::getId).collect(Collectors.toSet());
522 724 }
523 725  
524 726 /**
... ... @@ -542,6 +744,24 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
542 744 if (StringUtils.isNotBlank(queryVO.getProjectNo())) {
543 745 flag = flag | true;
544 746 }
  747 + if(StringUtils.isNotBlank(queryVO.getCreateStartTime())){
  748 + flag = flag | true;
  749 + }
  750 + if(StringUtils.isNotBlank(queryVO.getCreateEndTime())){
  751 + flag = flag | true;
  752 + }
  753 + if(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime())){
  754 + flag = flag | true;
  755 + }
  756 + if(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignEndTime())){
  757 + flag = flag | true;
  758 + }
  759 + if(StringUtils.isNotBlank(queryVO.getOrderHodStartTime())){
  760 + flag = flag | true;
  761 + }
  762 + if(StringUtils.isNotBlank(queryVO.getOrderHodEndTime())){
  763 + flag = flag | true;
  764 + }
545 765 if (!flag) {
546 766 return null;
547 767 }
... ... @@ -551,7 +771,13 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
551 771 .eq(StringUtils.isNotBlank(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment())
552 772 .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo())
553 773 .eq(StringUtils.isNotBlank(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())
554   - .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo());
  774 + .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo())
  775 + .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime())
  776 + .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime())
  777 + .ge(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignStartTime())
  778 + .le(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignEndTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignEndTime())
  779 + .ge(StringUtils.isNotBlank(queryVO.getOrderHodStartTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodStartTime())
  780 + .le(StringUtils.isNotBlank(queryVO.getOrderHodEndTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodEndTime());
555 781 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
556 782 if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
557 783 List<Long> orderIds = new ArrayList<>();
... ... @@ -575,7 +801,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
575 801  
576 802 List<OrderBaseInfoDO> orderBaseInfoDOList = validaBillOrder(createVO);
577 803  
578   - InvoiceBillOrderDO invoiceBillOrderDO = buildInvoiceBillOrderDO(createVO);
  804 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = buildInvoiceBillOrderDO(createVO,orderBaseInfoDOList);
579 805  
580 806 List<OrderBaseInfoDO> containInvoiceOrderBaseInfoList=orderBaseInfoDOList.stream().map(x->{
581 807 x.setInvoiceNo(createVO.getInvoiceNo());
... ... @@ -583,49 +809,48 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
583 809 }).collect(Collectors.toList());
584 810  
585 811 boolean success= transactionHelper.run(() -> {
586   - save(invoiceBillOrderDO);
  812 + saveBatch(invoiceBillOrderDOList);
587 813 orderBaseInfoService.updateBatchById(containInvoiceOrderBaseInfoList);
588   - invoiceBillMappingService.saveBatch(buildInvoiceBillMappingDOS(createVO, invoiceBillOrderDO));
589 814 return true;
590 815 });
591   - if(success) {
592   - //在创建时获取到客户总金额。
593   - List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
594   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
595   - .eq(InvoiceBillMappingDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo()));
596   - if (CollectionUtils.isNotEmpty(invoiceBillMappingDOS)) {
597   - List<Long> orderIds = invoiceBillMappingDOS.stream().map(InvoiceBillMappingDO::getOrderId).collect(Collectors.toList());
598   - List<OrderProfitAnalysisDO> orderProfitAnalysisList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
599   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
600   - .in(OrderProfitAnalysisDO::getOrderId, orderIds));
601   - List<OrderProfitAnalysisDO> orderProfitAnalysisDOS = orderProfitAnalysisList.stream()
602   - .collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity(), (existing, replacement) -> existing))
603   - .values()
604   - .stream()
605   - .collect(Collectors.toList());
606   - if (CollectionUtils.isNotEmpty(orderProfitAnalysisDOS)) {
607   - BigDecimal totalPrice = orderProfitAnalysisDOS.stream().map(order->BigDecimal.valueOf(order.getCustomerTotalPrice()))
608   - .reduce(BigDecimal.ZERO,BigDecimal::add);
609   - if(Objects.nonNull(totalPrice)){
610   - //客户总价金额汇总。 美元
611   - invoiceBillOrderDO.setTotalCustomerAmount(totalPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
612   - //设置实际应收金额汇总,要是没有发生扣款,也会被设置。
613   - invoiceBillOrderDO.setActualReceivableAmount(invoiceBillOrderDO.getTotalCustomerAmount());
614   - }else{
615   - invoiceBillOrderDO.setTotalCustomerAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
616   - invoiceBillOrderDO.setActualReceivableAmount(invoiceBillOrderDO.getTotalCustomerAmount());
617   - }
618   -
619   - }
620   - }
621   - //设置发生扣款金额汇总,避免没有发生扣款金额,也能在审核界面有对应的值。
622   - invoiceBillOrderDO.setDeductAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
623   - //设置其他费用汇总,避免没有发生扣款金额,也能在审核界面有对应的值。
624   - invoiceBillOrderDO.setOtherAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
625   - //设置实际付款金额。
626   - invoiceBillOrderDO.setTotalPayAmount(BigDecimal.ZERO.setScale(2,BigDecimal.ROUND_HALF_UP));
627   - updateById(invoiceBillOrderDO);
628   - }
  816 + Map<Long, OrderProfitAnalysisDO> orderProfitAnalysisMap;
  817 + //提前获取金额数据,避免后续多次查询。
  818 + List<OrderProfitAnalysisDO> orderProfitAnalysisList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  819 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  820 + .in(OrderProfitAnalysisDO::getOrderId, createVO.getOrderIds()));
  821 + if(CollectionUtils.isNotEmpty(orderProfitAnalysisList)){
  822 + orderProfitAnalysisMap = orderProfitAnalysisList.stream().collect(Collectors.toMap(
  823 + OrderProfitAnalysisDO::getOrderId, // key:使用 orderId 作为键
  824 + Function.identity(), // value:使用对象本身作为值
  825 + (existing, replacement) -> existing // 冲突时保留已有的值
  826 + ));
  827 + } else {
  828 + orderProfitAnalysisMap = null;
  829 + }
  830 + if(success) {
  831 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(invoiceNo -> {
  832 + if (orderProfitAnalysisMap != null) {
  833 + if (orderProfitAnalysisMap.containsKey(invoiceNo.getOrderId())) {
  834 + OrderProfitAnalysisDO orderProfitAnalysisDO = orderProfitAnalysisMap.get(invoiceNo.getOrderId());
  835 + invoiceNo.setTotalCustomerAmount(
  836 + //如果CustomerTotalPrice为空,则设置为0.0
  837 + //设置实际应收金额汇总,要是没有发生扣款,也会被设置。
  838 + BigDecimal.valueOf(Optional.ofNullable(orderProfitAnalysisDO.getCustomerTotalPrice()).orElse(0.0))
  839 + .setScale(2, RoundingMode.HALF_UP)
  840 + );
  841 + invoiceNo.setActualReceivableAmount(invoiceNo.getTotalCustomerAmount());
  842 + }
  843 + }
  844 + //设置发生扣款金额汇总,避免没有发生扣款金额,也能在审核界面有对应的值。
  845 + invoiceNo.setDeductAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
  846 + //设置其他费用汇总,避免没有发生扣款金额,也能在审核界面有对应的值。
  847 + invoiceNo.setOtherAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
  848 + //设置实际付款金额。
  849 + invoiceNo.setTotalPayAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
  850 + return invoiceNo;
  851 + }).collect(Collectors.toList());
  852 + updateBatchById(invoiceBillOrderDOS);
  853 + }
629 854 return ServerResult.success();
630 855 }
631 856  
... ... @@ -704,16 +929,18 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
704 929 * @param createVO
705 930 * @return
706 931 */
707   - private InvoiceBillOrderDO buildInvoiceBillOrderDO(InvoiceBillCreateVO createVO) {
708   - List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(createVO.getOrderIds());
709   - return InvoiceBillOrderDO.builder()
710   - .invoiceNo(createVO.getInvoiceNo())
711   - .bgUrl(createVO.getBgUrl())
712   - .backRefundDate(createVO.getBackRefundDate())
713   - .status(ApplyStatusEnum.NO_COMMIT.getStatus())
714   - .businesPerson(orderBaseInfoDOList.get(0).getBusinessPerson())
715   - .trackerUser(orderBaseInfoDOList.get(0).getCreateBy())
716   - .build();
  932 + private List<InvoiceBillOrderDO> buildInvoiceBillOrderDO(InvoiceBillCreateVO createVO,List<OrderBaseInfoDO> orderBaseInfoDOList) {
  933 + return orderBaseInfoDOList.stream().map(x->{
  934 + return InvoiceBillOrderDO.builder()
  935 + .invoiceNo(createVO.getInvoiceNo())
  936 + .orderId(x.getId())
  937 + .bgUrl(createVO.getBgUrl())
  938 + .backRefundDate(createVO.getBackRefundDate())
  939 + .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
  940 + .businesPerson(x.getBusinessPerson())
  941 + .trackerUser(x.getCreateBy())
  942 + .build();
  943 + }).collect(Collectors.toList());
717 944 }
718 945  
719 946 /**
... ... @@ -773,17 +1000,15 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
773 1000 throw new BusinessException("订单中包含利润未审批的订单,无法创建!");
774 1001 }
775 1002  
776   - String invoiceNo = createVO.getInvoiceNo();
777   -
778 1003 List<InvoiceBillOrderDO> invoiceBillOrderDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>()
779 1004 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
780   - .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceNo));
  1005 + .eq(InvoiceBillOrderDO::getInvoiceNo, createVO.getInvoiceNo()));
781 1006 if (CollectionUtils.isNotEmpty(invoiceBillOrderDOS)) {
782 1007 throw new BusinessException("存在相同的invoice订单!");
783 1008 }
784   -
785   - List<InvoiceBillMappingDO> invoiceBillMappingDOList = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getOrderId, createVO.getOrderIds()));
786   - if (CollectionUtils.isNotEmpty(invoiceBillMappingDOList)) {
  1009 + //该订单已绑定其他订单。
  1010 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillOrderDO::getOrderId,createVO.getOrderIds()));
  1011 + if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){
787 1012 throw new BusinessException("该勾选的订单已经绑定其他账单了!");
788 1013 }
789 1014 return orderBaseInfoDOList;
... ... @@ -804,11 +1029,13 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
804 1029 if (Objects.isNull(invoiceBillOrderDo)) {
805 1030 throw new BusinessException("应收款单据不存在");
806 1031 }
807   - if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && Constant.ENABLE_TEN==invoiceBillOrderDo.getStatus()){
808   - throw new BusinessException("应收款单据已审核通过,无法编辑");
  1032 + if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==invoiceBillOrderDo.getStatus()){
  1033 + throw new BusinessException("应收款单据已收款,无法编辑");
809 1034 }
  1035 + //todo 审核有问题 完成1
  1036 +// checkCommitApply(invoiceBillOrderDo.getId());
  1037 + checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId())));
810 1038  
811   - checkCommitApply(invoiceBillOrderDo.getId());
812 1039 if(StringUtils.isNotBlank(invoiceBillOrderDo.getDeductUrl())){
813 1040 //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。
814 1041 if(StringUtils.isNotBlank(deductInfoVO.getDeductUrl())){
... ... @@ -842,9 +1069,12 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
842 1069 if (Objects.isNull(invoiceBillOrderDo)) {
843 1070 throw new BusinessException("应收款单据不存在");
844 1071 }
845   -
846   - checkCommitApply(invoiceBillOrderDo.getId());
847   -
  1072 + //todo 审核有问题 完成2
  1073 +// checkCommitApply(invoiceBillOrderDo.getId());
  1074 + if(Objects.nonNull(invoiceBillOrderDo.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==invoiceBillOrderDo.getStatus()){
  1075 + throw new BusinessException("已完成收款,无法更新!");
  1076 + }
  1077 + checkApply(new ArrayList<>(Arrays.asList(amountInfoVO.getId())));
848 1078  
849 1079 invoiceBillOrderDo.setActualPayedAmount1(amountInfoVO.getActualPayedAmount1() !=null ? amountInfoVO.getActualPayedAmount1() : BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
850 1080 invoiceBillOrderDo.setActualPayedAmount2(amountInfoVO.getActualPayedAmount2() !=null ? amountInfoVO.getActualPayedAmount2() : BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
... ... @@ -871,46 +1101,104 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
871 1101 }
872 1102 }
873 1103  
  1104 + //选中提交。
  1105 +
874 1106 @Override
875 1107 public ServerResult commitApply(InvoiceBillCommitApplyVO commitApplyVO) {
876   - InvoiceBillOrderDO invoiceBillOrderDO = getById(commitApplyVO.getId());
877   - if (Objects.isNull(invoiceBillOrderDO)) {
  1108 + if(CollectionUtils.isEmpty(commitApplyVO.getId())){
  1109 + throw new BusinessException("id参数不能为空!");
  1110 + }
  1111 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(InvoiceBillOrderDO::getEnableFlag,Constant.ENABLE_TEN)
  1112 + .in(InvoiceBillOrderDO::getId,commitApplyVO.getId()));
  1113 + if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) {
878 1114 throw new BusinessException("账单不存在!");
879 1115 }
880   - if(Constant.ENABLE_TEN==invoiceBillOrderDO.getStatus()){
881   - throw new BusinessException("该订单已通过审核!");
  1116 + boolean isTure = invoiceBillOrderDOS.stream().filter(Objects::nonNull).allMatch(invoiceBillOrderDO -> invoiceBillOrderDO.getInvoiceNo().equals(invoiceBillOrderDOS.get(0).getInvoiceNo()));
  1117 + if(!isTure){
  1118 + throw new BusinessException("勾选订单的invoice需一致");
882 1119 }
  1120 + //判断选择订单中是否包含已审核通过的订单。 todo:这里需要在审核处理之后,给orderid设置状态,给外带的finacneId集合也设置状态,这里才能生效。
  1121 + boolean isTrue = invoiceBillOrderDOS.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(invoiceBillOrder.getStatus()));
  1122 + if(isTrue){
  1123 + throw new BusinessException("订单中包含已收款的数据,无法提交!");
  1124 + }
  1125 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(invoice -> invoice.getOrderId()).collect(Collectors.toSet()));
  1126 + //实际收款金额汇总
  1127 + BigDecimal totalPayAmount = BigDecimal.ZERO;
  1128 + //客户总价金额汇总
  1129 + BigDecimal totalCustomerAmount = BigDecimal.ZERO;
  1130 + //发生扣款金额汇总
  1131 + BigDecimal deductAmount = BigDecimal.ZERO;
  1132 + //其他费用汇总
  1133 + BigDecimal otherAmount = BigDecimal.ZERO;
  1134 + //todo 还需要判断一下,是否提交的订单中包含正在处于审核中的订单,要是有正在审核的订单,那就不允许提交。 已完成,应该就是这样审核的。
  1135 + checkApply(commitApplyVO.getId());
883 1136 Long userId = dataScope.getLoginUserId();
884 1137 String loginUserName = dataScope.getLoginUserName();
885   - checkApply(commitApplyVO.getId(), userId);
886 1138  
887   - invoiceBillOrderDO.setActualRefundDate(commitApplyVO.getActualRefundDate());
888   - invoiceBillOrderDO.setPayee(commitApplyVO.getPayee());
889   - //这里设置财务人员,是因为他们最后是点击提交审核的人员,所以当时候申请人就是获取FinancePerson这个变量。
890   - invoiceBillOrderDO.setFinancePerson(loginUserName);
891   - OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(invoiceBillOrderDO, userId);
  1139 + List<InvoiceBillOrderDO> invoiceBillOrderDO = invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(invoiceBillOrderDo -> {
  1140 + invoiceBillOrderDo.setActualRefundDate(commitApplyVO.getActualRefundDate());
  1141 + invoiceBillOrderDo.setPayee(commitApplyVO.getPayee());
  1142 + //这里设置财务人员,是因为他们最后是点击提交审核的人员,所以当时候申请人就是获取FinancePerson这个变量。
  1143 + invoiceBillOrderDo.setFinancePerson(loginUserName);
  1144 + invoiceBillOrderDo.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
  1145 + return invoiceBillOrderDo;
  1146 + }).collect(Collectors.toList());
  1147 + for( InvoiceBillOrderDO invoiceBillOrderDo : invoiceBillOrderDOS){
  1148 + totalPayAmount=totalPayAmount.add(invoiceBillOrderDo.getTotalPayAmount()).setScale(2, RoundingMode.HALF_UP);
  1149 + totalCustomerAmount=totalCustomerAmount.add(invoiceBillOrderDo.getTotalCustomerAmount()).setScale(2, RoundingMode.HALF_UP);
  1150 + deductAmount=deductAmount.add(invoiceBillOrderDo.getDeductAmount()).setScale(2, RoundingMode.HALF_UP);
  1151 + otherAmount=otherAmount.add(invoiceBillOrderDo.getOtherAmount()).setScale(2, RoundingMode.HALF_UP);
  1152 + }
  1153 + InvoiceFieldVO invoiceFieldVO = InvoiceFieldVO.builder().invoiceNo(invoiceBillOrderDOS.get(0).getInvoiceNo())
  1154 + .invoiceId(invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(InvoiceBillOrderDO::getId).collect(Collectors.toList()))
  1155 + .payee(commitApplyVO.getPayee())
  1156 + .innerNo(orderBaseInfoDOList.stream().filter(Objects::nonNull).map(orderBaseInfoDO-> orderBaseInfoDO.getInnerNo()).distinct().collect(Collectors.toList()))
  1157 + .backRefundDate(invoiceBillOrderDOS.get(0).getBackRefundDate())
  1158 + .actualRefundDate(commitApplyVO.getActualRefundDate())
  1159 + .businesPerson(invoiceBillOrderDOS.get(0).getBusinesPerson())
  1160 + .trackerUser(invoiceBillOrderDOS.get(0).getTrackerUser())
  1161 + .financePerson(loginUserName)
  1162 + .totalCustomerAmount(totalCustomerAmount)
  1163 + .deductAmount(deductAmount)
  1164 + .otherAmount(otherAmount)
  1165 + .totalPayAmount(totalPayAmount).build();
  1166 + OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(invoiceFieldVO, userId);
892 1167 transactionHelper.run(() -> {
893 1168 orderFieldLockApplyService.save(applyDO);
894   - invoiceBillOrderDO.setStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus());
895   - updateById(invoiceBillOrderDO);
  1169 + updateBatchById(invoiceBillOrderDO);
896 1170 });
897 1171 return ServerResult.success();
898 1172 }
899 1173  
900 1174 /**
901 1175 * @param id
902   - * @param userId
  1176 + *
903 1177 */
904   - private void checkApply(Long id, Long userId) {
905   - List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
906   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
907   - .eq(OrderFieldLockApplyDO::getOrderId, id)
908   - .eq(OrderFieldLockApplyDO::getApplyUserId, userId)
909   - .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
910   - .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
911   - if (CollectionUtils.isNotEmpty(applyDOS)) {
912   - throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
913   - }
  1178 + private void checkApply(List<Long> id) {
  1179 + //如果提交审核的个数大于1,就代表一起提交,就需要逐个判断。 不,应该是不管是否大于1都需要判断。因为即使是一个提交审核,你目前提交的这个id说不定是别人的finance里面附带的。
  1180 + //获取全部待审核的数据
  1181 + List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
  1182 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  1183 + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
  1184 + .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));;
  1185 + if(CollectionUtils.isNotEmpty(applyDOS)){
  1186 + Set<Long> setApplyIds = applyDOS.stream()
  1187 + .filter(Objects::nonNull)
  1188 + .flatMap(applyDO -> {
  1189 + // 将 orderId 和 finacneId 合并为一个流
  1190 + Stream<Long> orderIdStream = Stream.of(applyDO.getOrderId());
  1191 + Stream<Long> financeIdStream = (applyDO.getFinanceId() != null && !applyDO.getFinanceId().isEmpty())
  1192 + ? Arrays.stream(applyDO.getFinanceId().split(","))
  1193 + .map(Long::valueOf)
  1194 + : Stream.empty();
  1195 + return Stream.concat(orderIdStream, financeIdStream);
  1196 + })
  1197 + .collect(Collectors.toSet());
  1198 + if(id.stream().anyMatch(ids -> setApplyIds.contains(ids))){
  1199 + throw new BusinessException("申请单中包含处于审核的订单,请等审核完成后再申请!");
  1200 + }
  1201 + }
914 1202 }
915 1203  
916 1204 /**
... ... @@ -930,25 +1218,43 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
930 1218 }
931 1219  
932 1220 /**
933   - * @param invoiceBillOrderDO
  1221 + * @param invoiceFieldvo
934 1222 * @param userId
935 1223 * @return
936 1224 */
937   - private OrderFieldLockApplyDO initOrderFieldLockApplyDO(InvoiceBillOrderDO invoiceBillOrderDO, Long userId) {
  1225 + private OrderFieldLockApplyDO initOrderFieldLockApplyDO(InvoiceFieldVO invoiceFieldvo, Long userId) {
938 1226 OrderLockFieldVO lockFieldVO = new OrderLockFieldVO();
939   - lockFieldVO.setInvoiceBillOrderDO(invoiceBillOrderDO);
940   - return OrderFieldLockApplyDO.builder()
941   - .applyUserId(userId)
942   - .auditUserId(null)
943   - .fields(JSONObject.toJSONString(lockFieldVO))
944   - .orderId(invoiceBillOrderDO.getId())
945   - .type(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
946   - .remark(ApplyTypeEnum.INVOICE_BILL_APPLY.getDesc())
947   - .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
948   - .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode())
949   - .build();
  1227 + lockFieldVO.setInvoiceFieldVO(invoiceFieldvo);
  1228 + List<Long> financeIds = invoiceFieldvo.getInvoiceId().subList(1, invoiceFieldvo.getInvoiceId().size());
  1229 + if (invoiceFieldvo.getInvoiceId().size() > 1) {
  1230 + //单独针对财务多个订单提交审核来创建的。
  1231 + return OrderFieldLockApplyDO.builder()
  1232 + .applyUserId(userId)
  1233 + .auditUserId(null)
  1234 + .fields(JSONObject.toJSONString(lockFieldVO))
  1235 + .orderId(invoiceFieldvo.getInvoiceId().get(0))
  1236 + .financeId(null==financeIds || financeIds.isEmpty() ? "" :financeIds.stream().map(String::valueOf).collect(Collectors.joining(",")))
  1237 + .type(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
  1238 + .remark(ApplyTypeEnum.INVOICE_BILL_APPLY.getDesc())
  1239 + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
  1240 + //这里设置审核角色有财务并不是让财务审核,会对财务屏蔽审核按钮,只是让它能够看到审核的单子
  1241 + .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode())
  1242 + .build();
  1243 + } else {
  1244 + return OrderFieldLockApplyDO.builder()
  1245 + .applyUserId(userId)
  1246 + .auditUserId(null)
  1247 + .fields(JSONObject.toJSONString(lockFieldVO))
  1248 + //这个orderId设置应该怎么设置呢? 先这样写吧。取集合中的第一个作为orderId。 目前没有相当好的办法! 后续是创建一个集合finance附加属性,用来存储其他的所有的id。到时候取出来,与orderid放在一起设置状态,这样就能保证每一状态都被设置。
  1249 + .orderId(invoiceFieldvo.getInvoiceId().get(0))
  1250 + .type(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
  1251 + .remark(ApplyTypeEnum.INVOICE_BILL_APPLY.getDesc())
  1252 + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
  1253 + //这里设置审核角色有财务并不是让财务审核,会对财务屏蔽审核按钮,只是让它能够看到审核的单子
  1254 + .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode())
  1255 + .build();
  1256 + }
950 1257 }
951   -
952 1258 /**
953 1259 * 通过主键删除数据
954 1260 *
... ... @@ -957,7 +1263,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
957 1263 */
958 1264 @Override
959 1265 public ServerResult deleteById(InvoiceBillOrderQueryVO invoiceBillOrderQueryVO) {
960   - //其实是不能批量删除的,前端是一个一个删除按钮点击的,但是这里还是使用数组接受的。这里是传的一个id
  1266 + //删除前端要判断一下,要是勾选多条,这个invoice是否一致。一致才能删除
961 1267 List<Long> ids = invoiceBillOrderQueryVO.getIds();
962 1268 if (CollUtil.isEmpty(ids)) {
963 1269 return ServerResult.fail("ids 参数不能为空");
... ... @@ -966,17 +1272,33 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
966 1272 if (CollUtil.isEmpty(invoiceBillOrderList)) {
967 1273 return ServerResult.success();
968 1274 }
969   - checkApplyByIds(ids, dataScope.getLoginUserId());
970   - invoiceBillOrderList.stream().forEach(invoiceBillOrderDO -> {
971   - if(Constant.ENABLE_TEN==invoiceBillOrderDO.getStatus()){
972   - throw new BusinessException("该订单已通过审核,无法删除!");
973   - }
974   - });
  1275 + boolean isTure = invoiceBillOrderList.stream().allMatch(invoiceBillOrderDO -> invoiceBillOrderDO.getInvoiceNo().equals(invoiceBillOrderList.get(0).getInvoiceNo()));
  1276 + if(!isTure){
  1277 + throw new BusinessException("勾选订单的invoice需一致");
  1278 + }
  1279 +
  1280 + //有一个审核通过不能删除。之所以这样做,是因为避免忘记其他订单创建invoice,然后遗落了,所以需要删掉重新创建,避免每一个都提交审核并且审核后通过了了。
  1281 + boolean anyPaid = invoiceBillOrderList.stream().filter(Objects::nonNull)
  1282 + .anyMatch(invoiceBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus()== invoiceBillOrderDO.getStatus());
  1283 + if (anyPaid) {
  1284 + throw new BusinessException("包含已收款的订单,无法删除!");
  1285 + }
  1286 + //todo 还需要检查一下是否处于审核状态,处于审核状态就无法删除! 完成3
  1287 + checkApply(ids);
  1288 + List<Long> orderIds = invoiceBillOrderList.stream()
  1289 + .map(InvoiceBillOrderDO::getOrderId)
  1290 + .collect(Collectors.toList());
  1291 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
  1292 + List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoDOList.stream().map(order -> {
  1293 + //这里要删除对应invoiceNo号,但是为了删除后产生空指针异常,所以定义为"N/N";
  1294 + order.setInvoiceNo("N/N");
  1295 + return order;
  1296 + }).collect(Collectors.toList());
975 1297 transactionHelper.run(() -> {
976 1298 removeByIds(ids);
977   - invoiceBillMappingService.remove(new LambdaQueryWrapper<InvoiceBillMappingDO>().in(InvoiceBillMappingDO::getInvoiceBillId, ids));
  1299 + //删除关联的order。
  1300 + orderBaseInfoService.updateBatchById(orderBaseInfoDOS);
978 1301 });
979   -
980 1302 return ServerResult.success();
981 1303 }
982 1304  
... ... @@ -1021,9 +1343,15 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
1021 1343 if(StringUtils.isBlank(bgUrl.getBgUrl())){
1022 1344 return ServerResult.fail("上传报关单不能为空");
1023 1345 }
1024   - //重新上传报关单
1025   - invoiceBillOrderDO.setBgUrl(bgUrl.getBgUrl());
1026   - updateById(invoiceBillOrderDO);
  1346 + //对于invoice来说,相同的invoiceNo,设置其中一个,那么其他几个也要被改变。
  1347 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
  1348 + .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo()));
  1349 + List<InvoiceBillOrderDO> invoiceBillOrderDOList= invoiceBillOrderDOS.stream().map(invoiceBillOrder -> {
  1350 + //重新上传报关单
  1351 + invoiceBillOrder.setBgUrl(bgUrl.getBgUrl());
  1352 + return invoiceBillOrder;
  1353 + }).collect(Collectors.toList());
  1354 + updateBatchById(invoiceBillOrderDOList);
1027 1355 return ServerResult.success();
1028 1356 }
1029 1357  
... ... @@ -1102,7 +1430,33 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
1102 1430 if(Objects.isNull(invoiceBillOrderDO)){
1103 1431 throw new BusinessException("应收款单不存在!");
1104 1432 }
1105   - invoiceBillOrderDO.setBackRefundDate(createVO.getBackRefundDate());
  1433 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
  1434 + .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceBillOrderDO.getInvoiceNo()));
  1435 + boolean anyPaid= invoiceBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(invoiceBillOrder -> FinanceEnum.RECEIVED_PAYMENT.getStatus() == invoiceBillOrder.getStatus());
  1436 + if(anyPaid){
  1437 + throw new BusinessException("相同invoiceNo的订单已收款完成,无法设置!");
  1438 + }
  1439 + //todo 要审核判断一下,是否处于审核状态。 完成4
  1440 + checkApply(invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(invoiceDO -> invoiceDO.getId()).collect(Collectors.toList()));
  1441 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(invoiceBillOrder -> {
  1442 + invoiceBillOrder.setBackRefundDate(createVO.getBackRefundDate());
  1443 + return invoiceBillOrder;
  1444 + }).collect(Collectors.toList());
  1445 + updateBatchById(invoiceBillOrderDOS);
  1446 + return ServerResult.success();
  1447 + }
  1448 +
  1449 + @Override
  1450 + public ServerResult byIdAddNotes(InvoiceBillCreateVO createVO) {
  1451 + if(Objects.isNull(createVO.getId())){
  1452 + return ServerResult.fail();
  1453 + }
  1454 + InvoiceBillOrderDO invoiceBillOrderDO = getById(createVO.getId());
  1455 + if(Objects.isNull(invoiceBillOrderDO)){
  1456 + throw new BusinessException("应收款单不存在!");
  1457 + }
  1458 + //备注信息,审核完应该也能修改。
  1459 + invoiceBillOrderDO.setNotes(createVO.getNotes());
1106 1460 updateById(invoiceBillOrderDO);
1107 1461 return ServerResult.success();
1108 1462 }
... ...
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
... ... @@ -142,10 +142,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
142 142 @Resource
143 143 private AdminUserRoleService adminUserRoleService;
144 144 @Resource
145   - private InvoiceBillMappingService invoiceBillMappingService;
  145 + private InvoiceBillOrderService invoiceBillOrderService;
146 146  
147 147 @Resource
148   - private CheckBillMappingService checkBillMappingService;
  148 + private ProducePaymentCheckBillOrderService producePaymentCheckBillOrderService;
  149 +
149 150  
150 151  
151 152 /**
... ... @@ -231,7 +232,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
231 232  
232 233 // 填充发票信息
233 234 fillInvoiceNo(resultVOList);
234   -
  235 + //第四版 start
  236 +/* //需要填充生产科对账单号信息
  237 + fillCheckNo(resultVOList);
  238 + end
  239 + */
235 240  
236 241 if (locked) {
237 242 // 填充字段锁定信息
... ... @@ -881,20 +886,48 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
881 886 }
882 887  
883 888 Set<Long> orderIds = orderInfoResultVOList.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
884   - List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
  889 + /* List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
885 890 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
886   - .in(InvoiceBillMappingDO::getOrderId, orderIds));
887   - if (CollectionUtils.isEmpty(invoiceBillMappingDOS)) {
  891 + .in(InvoiceBillMappingDO::getOrderId, orderIds));*/
  892 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  893 + .in(InvoiceBillOrderDO::getOrderId, orderIds));
  894 +
  895 + if (CollectionUtils.isEmpty(invoiceBillOrderDOList)) {
888 896 return;
889 897 }
890   - Map<Long, InvoiceBillMappingDO> invoiceBillMappingDOMap = invoiceBillMappingDOS.stream().collect(Collectors.toMap(InvoiceBillMappingDO::getOrderId, Function.identity(), (v1, v2) -> v1));
  898 + Map<Long, InvoiceBillOrderDO> invoiceBillMappingDOMap = invoiceBillOrderDOList.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (v1, v2) -> v1));
891 899 orderInfoResultVOList.forEach(result -> {
892 900 if (invoiceBillMappingDOMap.containsKey(result.getId())) {
893   - InvoiceBillMappingDO invoiceBillMappingDO = invoiceBillMappingDOMap.get(result.getId());
  901 + InvoiceBillOrderDO invoiceBillMappingDO = invoiceBillMappingDOMap.get(result.getId());
894 902 result.setInvoiceNo(invoiceBillMappingDO.getInvoiceNo());
895 903 }
896 904 });
897 905 }
  906 +//第四版 start
  907 +/*
  908 + private void fillCheckNo(List<OrderInfoResultVO> orderInfoResultVOList) {
  909 + if (CollectionUtils.isEmpty(orderInfoResultVOList)) {
  910 + return;
  911 + }
  912 +
  913 + Set<Long> orderIds = orderInfoResultVOList.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
  914 + List<CheckBillMappingDO> checkBillMappingDOSDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
  915 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  916 + .in(CheckBillMappingDO::getOrderId, orderIds));
  917 + if (CollectionUtils.isEmpty(checkBillMappingDOSDOS)) {
  918 + return;
  919 + }
  920 + Map<Long, CheckBillMappingDO> checkBillMappingDOMap = checkBillMappingDOSDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (v1, v2) -> v1));
  921 + orderInfoResultVOList.forEach(result -> {
  922 + if (checkBillMappingDOMap.containsKey(result.getId())) {
  923 + CheckBillMappingDO checkBillMappingDO = checkBillMappingDOMap.get(result.getId());
  924 + result.setCheckNo(checkBillMappingDO.getCheckNo());
  925 + }
  926 + });
  927 + }
  928 +end
  929 +*/
  930 +
898 931  
899 932 /**
900 933 * @param orderInfoResultVOList
... ... @@ -1167,9 +1200,6 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1167 1200 if (StringUtils.isBlank(resultVO.getCnColor())) {
1168 1201 return false;
1169 1202 }
1170   - if (StringUtils.isBlank(resultVO.getPicUrl())) {
1171   - return false;
1172   - }
1173 1203 if (StringUtils.isBlank(resultVO.getProductionComment())) {
1174 1204 return false;
1175 1205 }
... ... @@ -1468,6 +1498,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1468 1498 .ge(StringUtils.isNotBlank(queryVO.getOrderHodStartTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodStartTime())
1469 1499 .le(StringUtils.isNotBlank(queryVO.getOrderHodEndTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodEndTime())
1470 1500 .in(CollectionUtils.isNotEmpty(queryVO.getOrderIds()), OrderBaseInfoDO::getId, queryVO.getOrderIds())
  1501 + .in(CollectionUtils.isNotEmpty(queryVO.getInvoiceNo()),OrderBaseInfoDO::getInvoiceNo,queryVO.getInvoiceNo())
  1502 + .in(CollectionUtils.isNotEmpty(queryVO.getCheckNo()),OrderBaseInfoDO::getCheckNo,queryVO.getCheckNo())
1471 1503 .orderByDesc(OrderBaseInfoDO::getId)
1472 1504 ;
1473 1505 }
... ... @@ -1972,7 +2004,17 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1972 2004 inspectionStageDO.setBoxPacket(inspectionStageInfo.getBoxPacket());
1973 2005 }
1974 2006 inspectionStageDO.setOrderId(updateVO.getOrderId());
  2007 + /* //第四版首页展示,这里判断这个订单的跟单信息是否处于跟单中的状态。如果是的话就那就不给这个订单设置质检中,避免首页计算数据时重复计算。随便设置一个状态。
  2008 + OrderTrackStageDO orderTrackStageDO = trackStageService.getById(updateVO.getOrderId());
  2009 + if(Objects.nonNull(orderTrackStageDO) && Objects.nonNull(orderTrackStageDO.getOrderStatus())
  2010 + && OrderStatusEnum.TRACK_ING.equals(orderTrackStageDO.getOrderStatus()) ){
  2011 + inspectionStageDO.setOrderStatus(OrderStatusEnum.TRACK_PASS.getStatus());
  2012 + }else{
  2013 + inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
  2014 + }*/
  2015 + //第四版时下面这句需要删掉。
1975 2016 inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
  2017 +
1976 2018 inspectionStageService.updateById(inspectionStageDO);
1977 2019 OrderBaseInfoDO orderBaseInfoDO = baseInfoService.getById(updateVO.getOrderId());
1978 2020 AdminUserDO ProductionDepartmentUserDO = userService.getOne(new LambdaQueryWrapper<AdminUserDO>()
... ... @@ -1985,7 +2027,17 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
1985 2027 inspectionStageDO = new OrderInspectionStageDO();
1986 2028 BeanUtils.copyProperties(updateVO.getInspectionStageInfo(), inspectionStageDO);
1987 2029 inspectionStageDO.setOrderId(updateVO.getOrderId());
  2030 + /* //第四版首页展示,这里判断这个订单的跟单信息是否处于跟单中的状态。如果是的话就那就不给这个订单设置质检中,避免首页计算数据时重复计算。随便设置一个状态。 start
  2031 + OrderTrackStageDO orderTrackStageDO = trackStageService.getById(updateVO.getOrderId());
  2032 + if(Objects.nonNull(orderTrackStageDO) && Objects.nonNull(orderTrackStageDO.getOrderStatus())
  2033 + && OrderStatusEnum.TRACK_ING.equals(orderTrackStageDO.getOrderStatus()) ){
  2034 + inspectionStageDO.setOrderStatus(OrderStatusEnum.TRACK_PASS.getStatus());
  2035 + }else{
  2036 + inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
  2037 + }*/
  2038 + //第四版时下面这句需要删掉。
1988 2039 inspectionStageDO.setOrderStatus(OrderStatusEnum.INSPECT_ING.getStatus());
  2040 +//end
1989 2041 inspectionStageService.save(inspectionStageDO);
1990 2042 OrderBaseInfoDO orderBaseInfoDO = baseInfoService.getById(updateVO.getOrderId());
1991 2043 AdminUserDO ProductionDepartmentUserDO = userService.getOne(new LambdaQueryWrapper<AdminUserDO>()
... ... @@ -2143,15 +2195,18 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl&lt;OrderBaseInfoMapper, O
2143 2195 return ServerResult.success();
2144 2196 }
2145 2197 //判断是否存在invoice和订单应付款。
2146   - List<InvoiceBillMappingDO> InvoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
  2198 + /* List<InvoiceBillMappingDO> InvoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
  2199 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  2200 + .in(InvoiceBillMappingDO::getOrderId, ids));*/
  2201 + List<InvoiceBillOrderDO> InvoiceBillMappingDOS = invoiceBillOrderService.list(new LambdaQueryWrapper<InvoiceBillOrderDO>()
2147 2202 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
2148   - .in(InvoiceBillMappingDO::getOrderId, ids));
  2203 + .in(InvoiceBillOrderDO::getOrderId, ids));
2149 2204 if(CollectionUtils.isNotEmpty(InvoiceBillMappingDOS)){
2150 2205 throw new BusinessException("该订单已绑定Invoice账单,请先删除对应的Invoice账单!");
2151 2206 }
2152   - List<CheckBillMappingDO> checkBillMappingDOList = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
  2207 + List<ProducePaymentCheckBillOrderDO> checkBillMappingDOList = producePaymentCheckBillOrderService.list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
2153 2208 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
2154   - .in(CheckBillMappingDO::getOrderId, ids));
  2209 + .in(ProducePaymentCheckBillOrderDO::getOrderId, ids));
2155 2210 if(CollectionUtils.isNotEmpty(checkBillMappingDOList)){
2156 2211 throw new BusinessException("该订单已绑定生产科对账单号,请先删除对应的生产科对账单!");
2157 2212 }
... ...
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
... ... @@ -16,10 +16,7 @@ import com.order.erp.common.constant.ServerResultCode;
16 16 import com.order.erp.common.exception.BusinessException;
17 17 import com.order.erp.common.utils.OrderFieldUtils;
18 18 import com.order.erp.config.DataScope;
19   -import com.order.erp.domain.ApplyStatusEnum;
20   -import com.order.erp.domain.ApplyTypeEnum;
21   -import com.order.erp.domain.OrderStatusEnum;
22   -import com.order.erp.domain.RoleEnum;
  19 +import com.order.erp.domain.*;
23 20 import com.order.erp.domain.dto.BaseDO;
24 21 import com.order.erp.domain.dto.order.*;
25 22 import com.order.erp.domain.vo.order.*;
... ... @@ -143,12 +140,14 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
143 140 if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())) {
144 141 // 解决待审批列表中的应收款要显示内部编码。 这里开始
145 142 OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class);
146   - if(Objects.nonNull(orderLockFieldVO.getInvoiceBillOrderDO()) && StringUtils.isNotBlank(orderLockFieldVO.getInvoiceBillOrderDO().getInvoiceNo())){
147   - List<InvoiceBillMappingDO> invoiceBillMappingDOList= invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
  143 + /* if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && StringUtils.isNotBlank(orderLockFieldVO.getInvoiceFieldVO().getInvoiceNo())){
  144 + *//* List<InvoiceBillMappingDO> invoiceBillMappingDOList= invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
148 145 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
149   - .eq(InvoiceBillMappingDO::getInvoiceNo, orderLockFieldVO.getInvoiceBillOrderDO().getInvoiceNo()));
  146 + .eq(InvoiceBillMappingDO::getInvoiceNo, orderLockFieldVO.getInvoiceBillOrderDO().getInvoiceNo()));*//*
  147 + List<InvoiceBillOrderDO> invoiceBillMappingDOList = invoiceBillOrderService.list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  148 + .eq(InvoiceBillOrderDO::getInvoiceNo, orderLockFieldVO.getInvoiceFieldVO().getInvoiceNo()));
150 149 if(CollectionUtils.isNotEmpty(invoiceBillMappingDOList)){
151   - Set<Long> orderIds = invoiceBillMappingDOList.stream().map(InvoiceBillMappingDO::getOrderId).filter(Objects::nonNull).collect(Collectors.toSet());
  150 + Set<Long> orderIds = invoiceBillMappingDOList.stream().map(InvoiceBillOrderDO::getOrderId).filter(Objects::nonNull).collect(Collectors.toSet());
152 151 if(CollectionUtils.isNotEmpty(orderIds)){
153 152 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
154 153 if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){
... ... @@ -161,14 +160,14 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
161 160 }
162 161 }
163 162 }
164   - } //这里结束 上述为待审核列表中应收款要显示内部编码
  163 + }*/ //这里结束 上述为待审核列表中应收款要显示内部编码。 这部分不需要了,内部编码放在里面了
165 164 //这部分的目的是,对于跟单员和业务员他们也能查看到应收款和应付款中各自负责订单的审核情况。 而财务和admin则会执行else{},会看到所有的审核订单信息。
166 165 if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){
167   - if(Objects.nonNull(orderLockFieldVO.getInvoiceBillOrderDO()) && orderLockFieldVO.getInvoiceBillOrderDO().getBusinesPerson().equals(loginUserName)){
  166 + if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName)){
168 167 resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class));
169 168 }
170 169 } else if (RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode())) {
171   - if(Objects.nonNull(orderLockFieldVO.getInvoiceBillOrderDO()) && orderLockFieldVO.getInvoiceBillOrderDO().getTrackerUser().equals(loginUserName)){
  170 + if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getTrackerUser().equals(loginUserName)){
172 171 resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class));
173 172 }
174 173 } else{
... ... @@ -181,7 +180,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
181 180 if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(x.getType()) || ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(x.getType())) {
182 181 OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class);
183 182 // 解决待审批列表中的应付款要显示内部编码。 这里开始
184   - if(Objects.nonNull(orderLockFieldVO.getCheckBillOrderDO()) && StringUtils.isNotBlank(orderLockFieldVO.getCheckBillOrderDO().getCheckNo())){
  183 + /* if(Objects.nonNull(orderLockFieldVO.getCheckBillOrderDO()) && StringUtils.isNotBlank(orderLockFieldVO.getCheckBillOrderDO().getCheckNo())){
185 184 List<CheckBillMappingDO> checkBillMappingDOList= checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
186 185 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
187 186 .eq(CheckBillMappingDO::getCheckNo, orderLockFieldVO.getCheckBillOrderDO().getCheckNo()));
... ... @@ -199,7 +198,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
199 198 }
200 199 }
201 200 }
202   - }//这里结束 上述为待审核列表中应收款要显示内部编码。
  201 + }//这里结束 上述为待审核列表中应收款要显示内部编码。*/ //这部分不需要了。
203 202 //这部分的目的是,对于跟单员和业务员他们也能查看到应收款和应付款中各自负责订单的审核情况。 而财务和admin则会执行else{},会看到所有的审核订单信息。
204 203 if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){
205 204 if(Objects.nonNull(orderLockFieldVO.getCheckBillOrderDO()) && orderLockFieldVO.getCheckBillOrderDO().getBusinesPerson().equals(loginUserName)){
... ... @@ -437,19 +436,40 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
437 436 int firstTwoDigits = queryVO.getType() / 100;
438 437 int lastTwoDigits = queryVO.getType() % 100;
439 438 queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits);
  439 + if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
  440 + String innerNoList = queryVO.getInnerNo().stream()
  441 + .map(innerNo -> "'" + innerNo + "'") // 包装为单引号
  442 + .collect(Collectors.joining(","));
  443 + queryWrapper.apply(
  444 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.innerNo')) in (" + innerNoList + ")"
  445 + );
  446 + }
440 447 }else{
  448 + if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.CHECK_BILL_APPLY.getType())){
  449 + queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType());
  450 + //这个内部编号单独针对于应付款申请设置的。
  451 + if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
  452 + String innerNoList = queryVO.getInnerNo().stream()
  453 + .map(innerNo -> "'" + innerNo + "'") // 包装为单引号
  454 + .collect(Collectors.joining(","));
  455 + queryWrapper.apply(
  456 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.innerNo')) in (" + innerNoList + ")"
  457 + );
  458 + }
  459 + }
441 460 queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType());
442 461 }
443 462 }
444 463 // 已测试,没问题。用途:在应收款和应付款中,通过输入invoiceNo和checkNo进行筛选查询。 变量名为invoice和checkNo。
445   - /* if (StringUtils.isNotBlank(queryVO.getInvoiceNo())) {
  464 + if (StringUtils.isNotBlank(queryVO.getInvoiceNo())) {
446 465 // 获取并修整 invoiceNo 字符串
447 466 String invoiceNos = queryVO.getInvoiceNo().trim();
448 467 // 检查处理后的字符串是否仍然有效
449 468 if (!invoiceNos.isEmpty()) {
450 469 // 使用参数化查询避免 SQL 拼接问题
451 470 queryWrapper.apply(
452   - "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceBillOrderDO.invoiceNo')) = {0}",
  471 +// "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceBillOrderDO.invoiceNo')) = {0}",
  472 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.invoiceNo')) = {0}",
453 473 invoiceNos
454 474 );
455 475 }
... ... @@ -463,11 +483,12 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
463 483 if (!checkNos.isEmpty()) {
464 484 // 使用参数化查询避免 SQL 拼接问题
465 485 queryWrapper.apply(
466   - "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillOrderDO.checkNo')) = {0}",
  486 +// "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.checkBillOrderDO.checkNo')) = {0}",
  487 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.checkNo')) = {0}",
467 488 checkNos
468 489 );
469 490 }
470   - }*/
  491 + }
471 492 //由于不懂下面的代码,所以我只对我需要的需求进行判断,我只针对我需要的这种情况,其他情况下就不走这种情况。
472 493 if(RoleEnum.TRACKER_USER.getCode().equals(roleEnum.getCode()) && (queryVO.getType()==Constant.THIRTY || queryVO.getType()==4050)){
473 494  
... ... @@ -553,14 +574,28 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
553 574 orderBaseInfoService.updateById(orderBaseInfoDO);
554 575 } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) {
555 576 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
556   - InvoiceBillOrderDO invoiceBillOrderDO = lockFieldVO.getInvoiceBillOrderDO();
557   - invoiceBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus());
558   - invoiceBillOrderService.updateById(invoiceBillOrderDO);
  577 + InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO();
  578 + List<InvoiceBillOrderDO> invoiceBillOrderDOList = invoiceBillOrderService.listByIds(invoiceBillOrderDO.getInvoiceId());
  579 + if(CollectionUtils.isNotEmpty(invoiceBillOrderDOList)){
  580 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderDOList.stream().filter(Objects::nonNull).map(x -> {
  581 + x.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
  582 + return x;
  583 + }).collect(Collectors.toList());
  584 + invoiceBillOrderService.updateBatchById(invoiceBillOrderDOS);
  585 + }
559 586 } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
560 587 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
561   - ProducePaymentCheckBillOrderDO checkBillOrderDO = lockFieldVO.getCheckBillOrderDO();
562   - checkBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus());
563   - checkBillOrderService.updateById(checkBillOrderDO);
  588 + ProducePaymentCheckBillFieldVO checkBillOrderDO = lockFieldVO.getProducePaymentCheckBillFieldVO();
  589 + List<Long> producePaymentCheckBillId = checkBillOrderDO.getProducePaymentCheckBillId();
  590 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = checkBillOrderService.listByIds(producePaymentCheckBillId);
  591 + if(CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)){
  592 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS= producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(x -> {
  593 + x.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
  594 + return x;
  595 + }).collect(Collectors.toList());
  596 + checkBillOrderService.updateBatchById(producePaymentCheckBillOrderDOS);
  597 + }
  598 +
564 599 } else if(ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())){
565 600 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
566 601 ProducePaymentCheckBillOrderDO checkBillOrderDO = lockFieldVO.getCheckBillOrderDO();
... ... @@ -709,16 +744,30 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
709 744 applyDO.setAuditUserId(auditUserId);
710 745 applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
711 746 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
712   - InvoiceBillOrderDO invoiceBillOrderDO = lockFieldVO.getInvoiceBillOrderDO();
713   - invoiceBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
714   - invoiceBillOrderService.updateById(invoiceBillOrderDO);
  747 + InvoiceFieldVO invoiceBillOrderDO = lockFieldVO.getInvoiceFieldVO();
  748 + List<Long> invoiceId = invoiceBillOrderDO.getInvoiceId();
  749 + List<InvoiceBillOrderDO> invoiceBillOrderDOS = invoiceBillOrderService.listByIds(invoiceId);
  750 + if(CollectionUtils.isNotEmpty(invoiceBillOrderDOS)){
  751 + List<InvoiceBillOrderDO> invoiceeBillOrderDOs = invoiceBillOrderDOS.stream().filter(Objects::nonNull).map(x -> {
  752 + x.setStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
  753 + return x;
  754 + }).collect(Collectors.toList());
  755 + invoiceBillOrderService.updateBatchById(invoiceeBillOrderDOs);
  756 + }
715 757 } else if (ApplyTypeEnum.CHECK_BILL_APPLY.getType().equals(applyDO.getType())) {
716 758 applyDO.setAuditUserId(auditUserId);
717 759 applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
718 760 OrderLockFieldVO lockFieldVO = JSONObject.parseObject(applyDO.getFields(), OrderLockFieldVO.class);
719   - ProducePaymentCheckBillOrderDO checkBillOrderDO = lockFieldVO.getCheckBillOrderDO();
720   - checkBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
721   - checkBillOrderService.updateById(checkBillOrderDO);
  761 + ProducePaymentCheckBillFieldVO checkBillOrderDO = lockFieldVO.getProducePaymentCheckBillFieldVO();
  762 + List<Long> producePaymentCheckBillId = checkBillOrderDO.getProducePaymentCheckBillId();
  763 + List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = checkBillOrderService.listByIds(producePaymentCheckBillId);
  764 + if(CollectionUtils.isNotEmpty(checkBillOrderDOS)){
  765 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = checkBillOrderDOS.stream().filter(Objects::nonNull).map(x -> {
  766 + x.setStatus(FinanceEnum.RECEIVED_PAYMENT.getStatus());
  767 + return x;
  768 + }).collect(Collectors.toList());
  769 + checkBillOrderService.updateBatchById(producePaymentCheckBillOrderDOS);
  770 + }
722 771 } else if (ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType().equals(applyDO.getType())) {
723 772 applyDO.setAuditUserId(auditUserId);
724 773 applyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
... ...
src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
... ... @@ -20,6 +20,7 @@ import com.order.erp.common.utils.TransactionHelper;
20 20 import com.order.erp.config.DataScope;
21 21 import com.order.erp.domain.ApplyStatusEnum;
22 22 import com.order.erp.domain.ApplyTypeEnum;
  23 +import com.order.erp.domain.FinanceEnum;
23 24 import com.order.erp.domain.RoleEnum;
24 25 import com.order.erp.domain.dto.BaseDO;
25 26 import com.order.erp.domain.dto.SystemSettingDO;
... ... @@ -46,6 +47,7 @@ import java.time.LocalDateTime;
46 47 import java.util.*;
47 48 import java.util.function.Function;
48 49 import java.util.stream.Collectors;
  50 +import java.util.stream.Stream;
49 51  
50 52 /**
51 53 * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表服务实现类
... ... @@ -107,13 +109,15 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
107 109  
108 110 @Override
109 111 public ServerResult listBaseOrderInfoBy(ProducePaymentBaseOrderQueryVO queryVO) {
110   - List<CheckBillMappingDO> mappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
111   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
112   - .eq(CheckBillMappingDO::getCheckNo, queryVO.getCheckNo()));
  112 +// List<CheckBillMappingDO> mappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
  113 +// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  114 +// .eq(CheckBillMappingDO::getCheckNo, queryVO.getCheckNo()));
  115 + List<ProducePaymentCheckBillOrderDO> mappingDOS =list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  116 + .eq(ProducePaymentCheckBillOrderDO::getCheckNo, queryVO.getCheckNo()));
113 117 if (CollectionUtils.isEmpty(mappingDOS)) {
114 118 return ServerResult.success();
115 119 }
116   - Set<Long> orderIds = mappingDOS.stream().map(CheckBillMappingDO::getOrderId).collect(Collectors.toSet());
  120 + Set<Long> orderIds = mappingDOS.stream().map(ProducePaymentCheckBillOrderDO::getOrderId).collect(Collectors.toSet());
117 121 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
118 122 List<OrderProfitAnalysisDO> profitAnalysisDOList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
119 123 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
... ... @@ -160,12 +164,13 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
160 164 if (CollectionUtils.isEmpty(checkBillOrderDOS)) {
161 165 return null;
162 166 }
163   - Set<Long> ids = checkBillOrderDOS.stream().map(ProducePaymentCheckBillOrderDO::getId).collect(Collectors.toSet());
  167 + /* Set<Long> ids = checkBillOrderDOS.stream().map(ProducePaymentCheckBillOrderDO::getId).collect(Collectors.toSet());
164 168 List<CheckBillMappingDO> checkBillMappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(CheckBillMappingDO::getCheckBillId, ids));
165 169 if (CollectionUtils.isEmpty(checkBillMappingDOS)) {
166 170 return null;
167   - }
168   - Map<Long, CheckBillMappingDO> orderBillMap = checkBillMappingDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
  171 + }*/
  172 + Map<Long, ProducePaymentCheckBillOrderDO> orderBillMap = checkBillOrderDOS.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));
  173 +// Map<Long, CheckBillMappingDO> orderBillMap = checkBillMappingDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
169 174 List<CheckOrderBaseItemVO> itemVOS = getCheckOrderBaseItems(orderBillMap);
170 175 Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getCheckNo, Function.identity(), (x, y) -> x));
171 176 Map<String, List<CheckOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(CheckOrderBaseItemVO::getCheckNo));
... ... @@ -296,7 +301,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
296 301 * @param mappingDOMap
297 302 * @return
298 303 */
299   - private List<CheckOrderBaseItemVO> getCheckOrderBaseItems(Map<Long, CheckBillMappingDO> mappingDOMap) {
  304 + private List<CheckOrderBaseItemVO> getCheckOrderBaseItems(Map<Long, ProducePaymentCheckBillOrderDO> mappingDOMap) {
300 305 Set<Long> orderIds = mappingDOMap.keySet();
301 306 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
302 307 List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(OrderProfitAnalysisDO::getOrderId, orderIds));
... ... @@ -318,7 +323,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
318 323 }
319 324  
320 325 if (mappingDOMap.containsKey(orderId)) {
321   - CheckBillMappingDO mappingDO = mappingDOMap.get(orderId);
  326 + ProducePaymentCheckBillOrderDO mappingDO = mappingDOMap.get(orderId);
322 327 itemVO.setCheckNo(mappingDO.getCheckNo());
323 328 }
324 329 baseItemVOS.add(itemVO);
... ... @@ -449,10 +454,10 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
449 454 private LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> getQueryWrapper(ProducePaymentCheckBillOrderQueryVO queryVO) {
450 455 LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> queryWrapper = new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
451 456 .eq(ProducePaymentCheckBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
452   - .eq(StringUtils.isNotBlank(queryVO.getCheckNo()), ProducePaymentCheckBillOrderDO::getCheckNo, queryVO.getCheckNo())
  457 + /*.eq(StringUtils.isNotBlank(queryVO.getCheckNo()), ProducePaymentCheckBillOrderDO::getCheckNo, queryVO.getCheckNo())
453 458 .eq(Objects.nonNull(queryVO.getStatus()), ProducePaymentCheckBillOrderDO::getStatus, queryVO.getStatus())
454 459 .ge(StringUtils.isNotBlank(queryVO.getStartTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getStartTime())
455   - .le(StringUtils.isNotBlank(queryVO.getEndTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getEndTime())
  460 + .le(StringUtils.isNotBlank(queryVO.getEndTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getEndTime())*/
456 461 .orderByDesc(ProducePaymentCheckBillOrderDO::getId);
457 462 if (CollectionUtils.isNotEmpty(queryVO.getIds())) {
458 463 queryWrapper.in(ProducePaymentCheckBillOrderDO::getId, queryVO.getIds());
... ... @@ -472,14 +477,16 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
472 477 if (CollectionUtils.isEmpty(orderIds)) {
473 478 return null;
474 479 }
475   - List<CheckBillMappingDO> mappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
476   - .in(CollectionUtils.isNotEmpty(orderIds), CheckBillMappingDO::getOrderId, orderIds));
  480 +// List<CheckBillMappingDO> mappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  481 +// .in(CollectionUtils.isNotEmpty(orderIds), CheckBillMappingDO::getOrderId, orderIds));
  482 + List<ProducePaymentCheckBillOrderDO> mappingDOS = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  483 + .in(CollectionUtils.isNotEmpty(orderIds), ProducePaymentCheckBillOrderDO::getOrderId, orderIds));
477 484 if (CollectionUtils.isEmpty(mappingDOS)) {
478 485 Set<Long> ids = new HashSet<>();
479 486 ids.add(-1L);
480 487 return ids;
481 488 }
482   - return mappingDOS.stream().map(CheckBillMappingDO::getCheckBillId).collect(Collectors.toSet());
  489 + return mappingDOS.stream().map(ProducePaymentCheckBillOrderDO::getId).collect(Collectors.toSet());
483 490 }
484 491  
485 492 /**
... ... @@ -535,54 +542,52 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
535 542 }
536 543 List<OrderBaseInfoDO> orderBaseInfoDOList = validaBillOrder(createVO);
537 544  
538   - ProducePaymentCheckBillOrderDO checkBillOrderDO = buildCheckBillOrderDO(createVO);
  545 + List<ProducePaymentCheckBillOrderDO> checkBillOrderDOList = buildCheckBillOrderDO(createVO,orderBaseInfoDOList);
539 546 List<OrderBaseInfoDO> containCheckOrderBaseInfoList = orderBaseInfoDOList.stream().map(x -> {
540 547 x.setCheckNo(createVO.getCheckNo());
541 548 return x;
542 549 }).collect(Collectors.toList());
543 550  
544 551 Boolean success = transactionHelper.run(() -> {
545   - save(checkBillOrderDO);
  552 + saveBatch(checkBillOrderDOList);
546 553 orderBaseInfoService.updateBatchById(containCheckOrderBaseInfoList);
547   - checkBillMappingService.saveBatch(buildCheckBillMappingDOS(createVO, checkBillOrderDO));
548 554 return true;
549 555 });
550   - if(success){
551   - List<CheckBillMappingDO> checkBillMappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>()
552   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
553   - .eq(CheckBillMappingDO::getCheckNo, checkBillOrderDO.getCheckNo()));
554   - if(CollectionUtils.isNotEmpty(checkBillMappingDOS)){
555   - List<Long> orderIds = checkBillMappingDOS.stream().map(CheckBillMappingDO::getOrderId).collect(Collectors.toList());
556   - List<OrderProfitAnalysisDO> orderProfitAnalysisList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
557   - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
558   - .in(OrderProfitAnalysisDO::getOrderId, orderIds));
559   - List<OrderProfitAnalysisDO> orderProfitAnalysisDOS = orderProfitAnalysisList.stream()
560   - .collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity(), (existing, replacement) -> existing))
561   - .values()
562   - .stream()
563   - .collect(Collectors.toList());
564   - if(CollectionUtils.isNotEmpty(orderProfitAnalysisDOS)){
565   - BigDecimal totalConvertedAmount = orderProfitAnalysisDOS.stream().map(order -> BigDecimal.valueOf(order.getProductionDepartmentTotalPrice()))
566   - .reduce(BigDecimal.ZERO, BigDecimal::add);
567   - BigDecimal formattedSum = totalConvertedAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
568   - if(Objects.nonNull(formattedSum)){
569   - //客户总价金额汇总。
570   - checkBillOrderDO.setTotalProductionAmount(formattedSum);
571   - //设置实际应付金额汇总。
572   - checkBillOrderDO.setActualPayedAmount(checkBillOrderDO.getTotalProductionAmount());
573   - }else {
574   - checkBillOrderDO.setTotalProductionAmount( BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
575   - checkBillOrderDO.setActualPayedAmount(checkBillOrderDO.getTotalProductionAmount());
  556 + Map<Long, OrderProfitAnalysisDO> orderProfitAnalysisMap;
  557 + //提前获取金额数据,避免后续多次查询。
  558 + List<OrderProfitAnalysisDO> orderProfitAnalysisList = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  559 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  560 + .in(OrderProfitAnalysisDO::getOrderId, createVO.getOrderIds()));
  561 + if(CollectionUtils.isNotEmpty(orderProfitAnalysisList)){
  562 + orderProfitAnalysisMap = orderProfitAnalysisList.stream().collect(Collectors.toMap(
  563 + OrderProfitAnalysisDO::getOrderId, // key:使用 orderId 作为键
  564 + Function.identity(), // value:使用对象本身作为值
  565 + (existing, replacement) -> existing // 冲突时保留已有的值
  566 + ));
  567 + } else {
  568 + orderProfitAnalysisMap = null;
  569 + }
  570 + if(success) {
  571 + List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = checkBillOrderDOList.stream().filter(Objects::nonNull).map(checkNo -> {
  572 + if (orderProfitAnalysisMap != null) {
  573 + if (orderProfitAnalysisMap.containsKey(checkNo.getOrderId())) {
  574 + OrderProfitAnalysisDO orderProfitAnalysisDO = orderProfitAnalysisMap.get(checkNo.getOrderId());
  575 + checkNo.setTotalProductionAmount(
  576 + BigDecimal.valueOf(Optional.ofNullable(orderProfitAnalysisDO.getProductionDepartmentTotalPrice()).orElse(0.0))
  577 + .setScale(2, RoundingMode.HALF_UP)
  578 + );
  579 + checkNo.setActualPayedAmount(checkNo.getTotalProductionAmount());
576 580 }
577 581 }
578   - }
579   - //设置实际付款金额汇总,避免没有填写直接审核时没有数据。
580   - checkBillOrderDO.setTotalActualPayedAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
581   - //设置生产科扣款金额汇总,避免没有填写扣款金额时,到时候审核没有数据。
582   - checkBillOrderDO.setDeductAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
583   - //设置未付金额
584   - checkBillOrderDO.setUnPayedAmount(checkBillOrderDO.getTotalProductionAmount().subtract(checkBillOrderDO.getTotalActualPayedAmount()).subtract(checkBillOrderDO.getDeductAmount()).setScale(2, BigDecimal.ROUND_HALF_UP));
585   - updateById(checkBillOrderDO);
  582 + //设置实际付款金额汇总,避免没有填写直接审核时没有数据。
  583 + checkNo.setTotalActualPayedAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
  584 + //设置生产科扣款金额汇总,避免没有填写扣款金额时,到时候审核没有数据。
  585 + checkNo.setDeductAmount(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
  586 + //设置未付金额
  587 + checkNo.setUnPayedAmount(checkNo.getTotalProductionAmount().subtract(checkNo.getTotalActualPayedAmount()).subtract(checkNo.getDeductAmount()).setScale(2, BigDecimal.ROUND_HALF_UP));
  588 + return checkNo;
  589 + }).collect(Collectors.toList());
  590 + updateBatchById(checkBillOrderDOS);
586 591 }
587 592 return ServerResult.success();
588 593 }
... ... @@ -682,16 +687,18 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
682 687 * @param createVO
683 688 * @return
684 689 */
685   - private ProducePaymentCheckBillOrderDO buildCheckBillOrderDO(ProducePaymentCheckBillCreateVO createVO) {
686   - List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(createVO.getOrderIds());
687   - return ProducePaymentCheckBillOrderDO.builder()
688   - .checkNo(createVO.getCheckNo())
689   - .payedDate(createVO.getPayedDate())
690   - .status(ApplyStatusEnum.NO_COMMIT.getStatus())
691   - .productionName(orderBaseInfoDOList.get(0).getProductionDepartment())
692   - .businesPerson(orderBaseInfoDOList.get(0).getBusinessPerson())
693   - .trackerUser(orderBaseInfoDOList.get(0).getCreateBy())
694   - .build();
  690 + private List<ProducePaymentCheckBillOrderDO> buildCheckBillOrderDO(ProducePaymentCheckBillCreateVO createVO,List<OrderBaseInfoDO> orderBaseInfoDOList) {
  691 + return orderBaseInfoDOList.stream().map(x->{
  692 + return ProducePaymentCheckBillOrderDO.builder()
  693 + .checkNo(createVO.getCheckNo())
  694 + .orderId(x.getId())
  695 + .payedDate(createVO.getPayedDate())
  696 + .status(FinanceEnum.UNPAID_PAYMENTS.getStatus())
  697 + .productionName(x.getProductionDepartment())
  698 + .businesPerson(x.getBusinessPerson())
  699 + .trackerUser(x.getCreateBy())
  700 + .build();
  701 + }).collect(Collectors.toList());
695 702 }
696 703  
697 704 /**
... ... @@ -736,16 +743,14 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
736 743 throw new BusinessException("订单中包含利润未审批的订单,无法创建!");
737 744 }
738 745  
739   - String checkNo = createVO.getCheckNo();
740   -
741 746 List<ProducePaymentCheckBillOrderDO> checkBillOrderDOS = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
742 747 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
743   - .eq(ProducePaymentCheckBillOrderDO::getCheckNo, checkNo));
  748 + .eq(ProducePaymentCheckBillOrderDO::getCheckNo, createVO.getCheckNo()));
744 749 if (CollectionUtils.isNotEmpty(checkBillOrderDOS)) {
745 750 throw new BusinessException("存在相同的生产科对账单号!");
746 751 }
747 752  
748   - List<CheckBillMappingDO> checkBillMappingDOS = checkBillMappingService.list(new LambdaQueryWrapper<CheckBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(CheckBillMappingDO::getOrderId, createVO.getOrderIds()));
  753 + List<ProducePaymentCheckBillOrderDO> checkBillMappingDOS = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(ProducePaymentCheckBillOrderDO::getOrderId, createVO.getOrderIds()));
749 754 if (CollectionUtils.isNotEmpty(checkBillMappingDOS)) {
750 755 throw new BusinessException("该勾选的订单已经绑定其他账单了!");
751 756 }
... ... @@ -775,11 +780,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
775 780 if (Objects.isNull(checkBillOrderDO)) {
776 781 throw new BusinessException("应付款单据不存在");
777 782 }
778   - if(Objects.nonNull(checkBillOrderDO.getStatus()) && Constant.ENABLE_TEN==checkBillOrderDO.getStatus()){
  783 + if(Objects.nonNull(checkBillOrderDO.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){
779 784 throw new BusinessException("应付款单据已审核通过,无法编辑");
780 785 }
781   -
782   - checkCommitApply(checkBillOrderDO.getId());
  786 + //todo 已完成。
  787 + checkApply(new ArrayList<>(Arrays.asList(deductInfoVO.getId())));
783 788 //需要判断一下是否为空?不然知己以逗号分隔会报错。
784 789 if(StringUtils.isNotBlank(checkBillOrderDO.getDeductUrl())){
785 790 //记住:需要修改数据表对应的字段deduct_url的varchar数据范围,修改为1000左右。
... ... @@ -821,8 +826,11 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
821 826 if (Objects.isNull(checkBillOrderDO)) {
822 827 throw new BusinessException("应付款单据不存在");
823 828 }
824   -
825   - checkCommitApply(checkBillOrderDO.getId());
  829 + if(Objects.nonNull(checkBillOrderDO.getStatus()) && FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){
  830 + throw new BusinessException("已完成收款,无法更新!");
  831 + }
  832 + //todo 已完成。
  833 + checkApply(new ArrayList<>(Arrays.asList(amountInfoVO.getId())));
826 834  
827 835 checkBillOrderDO.setActualPayedAmount1(amountInfoVO.getActualPayedAmount1() != null ? amountInfoVO.getActualPayedAmount1().setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
828 836 checkBillOrderDO.setActualPayedAmount2(amountInfoVO.getActualPayedAmount2() != null ? amountInfoVO.getActualPayedAmount2().setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP));
... ... @@ -845,16 +853,16 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
845 853 if(Objects.isNull(checkBillOrderDO)){
846 854 return ServerResult.fail("生产科对账单号不存在!");
847 855 }
848   - if(Constant.ENABLE_TEN==checkBillOrderDO.getStatus()){
  856 + if(FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){
849 857 throw new BusinessException("该订单已通过审核无法继续上传发票!");
850 858 }
851 859 if(StringUtils.isBlank(invoiceInfoVO.getInvoiceUrl())){
852 860 return ServerResult.success();
853 861 }
854 862 //校验是否有处于待审核的发票。
855   - checkApply(id,loginUserId,ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType());
856   - //校验是否有处于待审核的订单。
857   - checkCommitApply(checkBillOrderDO.getId());
  863 + checkCommitApply(id);
  864 + //校验是否有处于待审核的订单。 todo
  865 + checkApply(new ArrayList<>(Arrays.asList(id)));
858 866 OrderLockFieldVO locakFieldVO = new OrderLockFieldVO();
859 867  
860 868 //事务:待审核,设置为admin和财务才有权限审批。
... ... @@ -882,62 +890,135 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
882 890  
883 891 @Override
884 892 public ServerResult commitApply(ProducePaymentCheckBillCommitApplyVO commitApplyVO) {
885   - ProducePaymentCheckBillOrderDO checkBillOrderDO = getById(commitApplyVO.getId());
886   - if (Objects.isNull(checkBillOrderDO)) {
887   - throw new BusinessException("账单不存在!");
  893 + if(CollectionUtils.isEmpty(commitApplyVO.getId())){
  894 + throw new BusinessException("id参数不能为空!");
888 895 }
889   - if(checkBillOrderDO.getStatus()==Constant.ENABLE_TEN){
890   - throw new BusinessException("该订单已通过审核!");
  896 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(ProducePaymentCheckBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
  897 + .in(ProducePaymentCheckBillOrderDO::getId, commitApplyVO.getId()));
  898 + if (CollectionUtils.isEmpty(producePaymentCheckBillOrderDOList)) {
  899 + throw new BusinessException("账单不存在!");
891 900 }
  901 + boolean isTure = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).allMatch(producePaymentCheckBillOrderDO -> producePaymentCheckBillOrderDO.getProductionName().equals(producePaymentCheckBillOrderDOList.get(0).getProductionName()));
  902 + if(!isTure){
  903 + throw new BusinessException("勾选订单生产科需一致");
  904 + }
  905 + boolean anyMatch = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).anyMatch(producePaymentCheckBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus().equals(producePaymentCheckBillOrderDO.getStatus()));
  906 + if(anyMatch){
  907 + throw new BusinessException("订单中包含已收款的数据,无法提交!");
  908 + }
  909 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(producePaymentCheckBillOrderDO -> producePaymentCheckBillOrderDO.getOrderId()).collect(Collectors.toSet()));
  910 + //实际应付金额
  911 + BigDecimal actualPayedAmount=BigDecimal.ZERO;
  912 + //扣款金额
  913 + BigDecimal deductAmount=BigDecimal.ZERO;
  914 + //实际付款金额
  915 + BigDecimal totalActualPayedAmount=BigDecimal.ZERO;
  916 + //未付金额
  917 + BigDecimal unPayedAmount=BigDecimal.ZERO;
892 918 Long userId = dataScope.getLoginUserId();
893 919 String loginUserName = dataScope.getLoginUserName();
894   - checkApply(commitApplyVO.getId(), userId,ApplyTypeEnum.CHECK_BILL_APPLY.getType());
895   -
896   - checkBillOrderDO.setActualPayedDate(commitApplyVO.getActualPayedDate());
897   - checkBillOrderDO.setFinancePerson(loginUserName);
898   - OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(checkBillOrderDO, userId);
  920 + //todo 审核判断
  921 + checkApply(commitApplyVO.getId());
  922 +
  923 + List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = producePaymentCheckBillOrderDOList.stream().filter(Objects::nonNull).map(producePaymentCheckBillOrderDO -> {
  924 + producePaymentCheckBillOrderDO.setActualPayedDate(commitApplyVO.getActualPayedDate());
  925 + producePaymentCheckBillOrderDO.setFinancePerson(loginUserName);
  926 + producePaymentCheckBillOrderDO.setStatus(FinanceEnum.UNPAID_PAYMENTS.getStatus());
  927 + return producePaymentCheckBillOrderDO;
  928 + }).collect(Collectors.toList());
  929 + for(ProducePaymentCheckBillOrderDO paymentCheckBillOrderDO : producePaymentCheckBillOrderDOS){
  930 + actualPayedAmount=actualPayedAmount.add(paymentCheckBillOrderDO.getActualPayedAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
  931 + deductAmount=deductAmount.add(paymentCheckBillOrderDO.getDeductAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
  932 + totalActualPayedAmount=totalActualPayedAmount.add(paymentCheckBillOrderDO.getTotalActualPayedAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
  933 + unPayedAmount=unPayedAmount.add(paymentCheckBillOrderDO.getUnPayedAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
  934 +
  935 + }
  936 + ProducePaymentCheckBillFieldVO producePaymentCheckBillFieldVO = ProducePaymentCheckBillFieldVO.builder().checkNo(producePaymentCheckBillOrderDOS.get(0).getCheckNo())
  937 + .producePaymentCheckBillId(producePaymentCheckBillOrderDOS.stream().filter(Objects::nonNull).map(ProducePaymentCheckBillOrderDO::getId).collect(Collectors.toList()))
  938 + .innerNo(orderBaseInfoDOList.stream().filter(Objects::nonNull).map(orderBaseInfoDO -> orderBaseInfoDO.getInnerNo()).distinct().collect(Collectors.toList()))
  939 + //这里取的是集合中第一个的时间,作为必须付款日期。 目前还没定,先这样取。
  940 + .payedDate(producePaymentCheckBillOrderDOS.get(0).getPayedDate())
  941 + .businesPerson(producePaymentCheckBillOrderDOS.get(0).getBusinesPerson())
  942 + .trackerUser(producePaymentCheckBillOrderDOS.get(0).getTrackerUser())
  943 + .financePerson(loginUserName)
  944 + .productionName(producePaymentCheckBillOrderDOS.get(0).getProductionName())
  945 + .actualPayedDate(commitApplyVO.getActualPayedDate())
  946 + .deductAmount(deductAmount)
  947 + .actualPayedAmount(actualPayedAmount)
  948 + .totalActualPayedAmount(totalActualPayedAmount)
  949 + .unPayedAmount(unPayedAmount).build();
  950 + OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(producePaymentCheckBillFieldVO, userId);
899 951 transactionHelper.run(() -> {
900 952 orderFieldLockApplyService.save(applyDO);
901   - checkBillOrderDO.setStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus());
902 953 // checkBillOrderDO.setActualPayedDate(DateUtils.format(LocalDateTime.now(), DateUtils.DATE));
903   - updateById(checkBillOrderDO);
  954 + updateBatchById(producePaymentCheckBillOrderDOS);
904 955 });
905 956 return ServerResult.success();
906 957 }
907 958  
908 959 /**
909   - * @param checkBillOrderDO
  960 + * @param producePaymentCheckBillFieldVO
910 961 * @param userId
911 962 * @return
912 963 */
913   - private OrderFieldLockApplyDO initOrderFieldLockApplyDO(ProducePaymentCheckBillOrderDO checkBillOrderDO, Long userId) {
  964 + private OrderFieldLockApplyDO initOrderFieldLockApplyDO(ProducePaymentCheckBillFieldVO producePaymentCheckBillFieldVO, Long userId) {
914 965 OrderLockFieldVO lockFieldVO = new OrderLockFieldVO();
915   - lockFieldVO.setCheckBillOrderDO(checkBillOrderDO);
  966 + lockFieldVO.setProducePaymentCheckBillFieldVO(producePaymentCheckBillFieldVO);
  967 + List<Long> financeIds= producePaymentCheckBillFieldVO.getProducePaymentCheckBillId().subList(1, producePaymentCheckBillFieldVO.getProducePaymentCheckBillId().size());
  968 + if(producePaymentCheckBillFieldVO.getProducePaymentCheckBillId().size()>1){
  969 + //针对于财务多个订单提交审核来创建的。
916 970 return OrderFieldLockApplyDO.builder()
917 971 .applyUserId(userId)
918 972 .auditUserId(null)
919 973 .fields(JSONObject.toJSONString(lockFieldVO))
920   - .orderId(checkBillOrderDO.getId())
  974 + .orderId(producePaymentCheckBillFieldVO.getProducePaymentCheckBillId().get(0))
  975 + .financeId(null == financeIds || financeIds.isEmpty() ? "" : financeIds.stream().map(String::valueOf).collect(Collectors.joining(","))) //英文逗号
921 976 .type(ApplyTypeEnum.CHECK_BILL_APPLY.getType())
922 977 .remark(ApplyTypeEnum.CHECK_BILL_APPLY.getDesc())
923 978 .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
  979 + //这里设置审核角色有财务并不是让财务审核,会对财务屏蔽审核按钮,只是让它能够看到审核的单子
924 980 .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode())
925 981 .build();
  982 + }else{
  983 + return OrderFieldLockApplyDO.builder()
  984 + .applyUserId(userId)
  985 + .auditUserId(null)
  986 + .fields(JSONObject.toJSONString(lockFieldVO))
  987 + .orderId(producePaymentCheckBillFieldVO.getProducePaymentCheckBillId().get(0))
  988 + .type(ApplyTypeEnum.CHECK_BILL_APPLY.getType())
  989 + .remark(ApplyTypeEnum.CHECK_BILL_APPLY.getDesc())
  990 + .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
  991 + //这里设置审核角色有财务并不是让财务审核,会对财务屏蔽审核按钮,只是让它能够看到审核的单子
  992 + .auditRoleCodes(RoleEnum.ADMIN.getCode() + Constant.COMMA_CHARACTER + RoleEnum.FINANCE_USER.getCode())
  993 + .build();
  994 + }
926 995 }
927 996  
928 997 /**
929 998 * @param id
930   - * @param userId
  999 + *
931 1000 */
932   - private void checkApply(Long id, Long userId,Integer applyType) {
  1001 + private void checkApply(List<Long> id) {
  1002 + //如果提交审核的个数大于1,就需要这个判断。 不,应该是不管是否大于1都需要判断。因为即使是一个提交审核,你目前提交的这个id说不定是别人的financeId。
933 1003 List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
934 1004 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
935   - .eq(OrderFieldLockApplyDO::getOrderId, id)
936   - .eq(OrderFieldLockApplyDO::getApplyUserId, userId)
937   - .eq(OrderFieldLockApplyDO::getType, applyType)
  1005 + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_BILL_APPLY.getType())
938 1006 .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
939 1007 if (CollectionUtils.isNotEmpty(applyDOS)) {
940   - throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
  1008 + Set<Long> setApplyIds = applyDOS.stream().
  1009 + filter(Objects::nonNull).
  1010 + flatMap(applyDO -> {
  1011 + Stream<Long> orderIdStream = Stream.of(applyDO.getOrderId());
  1012 + Stream<Long> financeIdStream = (applyDO.getFinanceId() != null && !applyDO.getFinanceId().isEmpty())
  1013 + ? Arrays.stream(applyDO.getFinanceId().split(","))
  1014 + .map(Long::valueOf) // 转换为 Long
  1015 + : Stream.empty();
  1016 + return Stream.concat(orderIdStream, financeIdStream);
  1017 + })
  1018 + .collect(Collectors.toSet());
  1019 + if(id.stream().anyMatch(ids -> setApplyIds.contains(ids))){
  1020 + throw new BusinessException("申请单中包含处于审核的订单,请等审核完成后再申请!");
  1021 + }
941 1022 }
942 1023 }
943 1024  
... ... @@ -947,24 +1028,23 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
947 1028 private void checkCommitApply(Long id) {
948 1029 OrderFieldLockApplyDO applyDO = orderFieldLockApplyService.getOne(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
949 1030 .eq(OrderFieldLockApplyDO::getEnableFlag, Constant.ENABLE_TEN)
950   - .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_BILL_APPLY.getType())
  1031 + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType())
951 1032 .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())
952   - .eq(OrderFieldLockApplyDO::getOrderId, id).last("limit 1"));
  1033 + .eq(OrderFieldLockApplyDO::getOrderId, id));
953 1034 if (Objects.nonNull(applyDO)) {
954   - throw new BusinessException("该账单还在审批中,请联系总经理审批后操作!");
  1035 + throw new BusinessException("该账单发票还在审批中,请联系总经理审批后操作!");
955 1036 }
956 1037 }
957 1038  
958 1039 /**
959   - * @param ids
960   - * @param userId
  1040 + * @param id
  1041 + *
961 1042 */
962   - private void checkApplyByIds(List<Long> ids, Long userId) {
  1043 + private void checkApplyByIds(Long id) {
963 1044 List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
964 1045 .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
965   - .in(OrderFieldLockApplyDO::getOrderId, ids)
966   - .eq(OrderFieldLockApplyDO::getApplyUserId, userId)
967   - .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.CHECK_BILL_APPLY.getType())
  1046 + .eq(OrderFieldLockApplyDO::getOrderId, id)
  1047 + .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.DEPARTMENT_INVOICE_APPLY.getType())
968 1048 .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
969 1049 if (CollectionUtils.isNotEmpty(applyDOS)) {
970 1050 throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
... ... @@ -979,6 +1059,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
979 1059 */
980 1060 @Override
981 1061 public ServerResult deleteById(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
  1062 + //删除前端要判断一下,要是勾选多条,这个check是否一致。一致才能删除。
982 1063 List<Long> ids = producePaymentCheckBillOrderQueryVO.getIds();
983 1064 if (CollUtil.isEmpty(ids)) {
984 1065 return ServerResult.fail("ids 参数不能为空");
... ... @@ -987,17 +1068,29 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
987 1068 if (CollUtil.isEmpty(checkBillOrderDOS)) {
988 1069 return ServerResult.success();
989 1070 }
990   - checkBillOrderDOS.stream().forEach(checkBillOrderDO ->{
991   - if(Constant.ENABLE_TEN==checkBillOrderDO.getStatus()){
992   - throw new BusinessException("该订单已通过审核,无法删除!");
  1071 + boolean isTrue = checkBillOrderDOS.stream().allMatch(checkBillOrderDO -> checkBillOrderDO.getCheckNo().equals(checkBillOrderDOS.get(0).getCheckNo()));
  1072 + if(!isTrue){
  1073 + throw new BusinessException("勾选订单的checkNo需一致");
  1074 + }
  1075 + boolean anyPaid = checkBillOrderDOS.stream().anyMatch(checkBillOrderDO -> FinanceEnum.RECEIVED_PAYMENT.getStatus() == checkBillOrderDO.getStatus());
  1076 + if(anyPaid) {
  1077 + throw new BusinessException("包含已收款的订单,无法删除!");
993 1078 }
994   - });
995   - checkApplyByIds(ids, dataScope.getLoginUserId());
  1079 + //todo 审核有点问题。审核时是是哪个orderid共用一个orderid作为id,查询的时候是只能查询到第一个。 已完成。
  1080 + checkApply(ids);
  1081 + List<Long> orderIds = checkBillOrderDOS.stream()
  1082 + .map(ProducePaymentCheckBillOrderDO::getOrderId)
  1083 + .collect(Collectors.toList());
  1084 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
  1085 + List<OrderBaseInfoDO> orderBaseInfoDOS = orderBaseInfoDOList.stream().map(order -> {
  1086 + //这里要删除对应invoiceNo号,但是为了删除后产生空指针异常,所以定义为"N/N";
  1087 + order.setCheckNo("N/N");
  1088 + return order;
  1089 + }).collect(Collectors.toList());
996 1090 transactionHelper.run(() -> {
997 1091 removeByIds(ids);
998   - checkBillMappingService.remove(new LambdaQueryWrapper<CheckBillMappingDO>().in(CheckBillMappingDO::getCheckBillId, ids));
  1092 + orderBaseInfoService.updateBatchById(orderBaseInfoDOS);
999 1093 });
1000   -
1001 1094 return ServerResult.success();
1002 1095 }
1003 1096  
... ... @@ -1076,12 +1169,32 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
1076 1169 if(Objects.isNull(checkBillOrderDO)){
1077 1170 throw new BusinessException("生产科对账单不存在!");
1078 1171 }
  1172 + if(FinanceEnum.RECEIVED_PAYMENT.getStatus()==checkBillOrderDO.getStatus()){
  1173 + throw new BusinessException("已完成收款,无法修改!");
  1174 + }
  1175 + //todo 要审核判断一下,判断是否处于审核状态。 已完成。
  1176 + checkApply(new ArrayList<>(Arrays.asList(createVO.getId())));
1079 1177 checkBillOrderDO.setPayedDate(createVO.getPayedDate());
1080 1178 updateById(checkBillOrderDO);
1081 1179 return ServerResult.success();
1082 1180 }
1083 1181  
1084 1182 @Override
  1183 + public ServerResult byIdAddNotes(ProducePaymentCheckBillCreateVO createVO) {
  1184 + if(Objects.isNull(createVO.getId())){
  1185 + return ServerResult.fail();
  1186 + }
  1187 + ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = getById(createVO.getId());
  1188 + if(Objects.isNull(producePaymentCheckBillOrderDO)){
  1189 + throw new BusinessException("应收款单不存在!");
  1190 + }
  1191 + //备注信息,审核完应该也能修改。
  1192 + producePaymentCheckBillOrderDO.setNotes(createVO.getNotes());
  1193 + updateById(producePaymentCheckBillOrderDO);
  1194 + return ServerResult.success();
  1195 + }
  1196 +
  1197 + @Override
1085 1198 public ServerResult exportReceipt(HttpServletResponse response,ProducePaymentCheckBillOrderDO queryVO) throws IOException {
1086 1199 XSSFWorkbook workbook = new XSSFWorkbook();
1087 1200 Sheet sheet = workbook.createSheet("付款单");
... ...
src/main/resources/mapper/InvoiceBillOrderMapper.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.order.erp.mapper.order.InvoiceBillOrderMapper">
  4 + <!-- <resultMap id="financeOrderResultMap" type="com.order.erp.domain.vo.order.FinanceOrderResultVO">
  5 + &lt;!&ndash; 映射 OrderBaseInfoVO 的属性 &ndash;&gt;
  6 + <result property="id" column="id"/>
  7 + &lt;!&ndash; <result property="invoiceNo" column="invoice_no"/>
  8 + <result property="checkNo" column="check_no"/>&ndash;&gt;
  9 + <result property="customerCode" column="customer_code"/>
  10 + <result property="projectNo" column="project_no"/>
  11 + <result property="productionDepartment" column="production_department"/>
  12 + <result property="innerNo" column="inner_no"/>
  13 + <result property="smallPicUrl" column="small_pic_url"/>
  14 + <result property="orderCount" column="order_count"/>
  15 + <result property="productionDepartmentConsignTime" column="production_department_consign_time"/>
  16 + <result property="orderHodTime" column="order_hod_time"/>
  17 +
  18 + &lt;!&ndash;发票invoice&ndash;&gt;
  19 + &lt;!&ndash; <association property="invoiceBillOrderDO" javaType="com.order.erp.domain.dto.order.InvoiceBillOrderDO">&ndash;&gt;
  20 + <result property="id" column="id"/>
  21 + <result property="invoiceNo" column="invoice_no"/>
  22 + <result property="bgUrl" column="bg_url"/>
  23 + <result property="backRefundDate" column="back_refund_date"/>
  24 + <result property="deductAmount" column="deduct_amount"/>
  25 + <result property="deductUrl" column="deduct_url"/>
  26 + <result property="actualReceivableAmount" column="actual_receivable_amount"/>
  27 + <result property="actualPayedAmount1" column="actual_payed_amount_1"/>
  28 + <result property="actualPayedAmount2" column="actual_payed_amount_2"/>
  29 + <result property="actualPayedAmount3" column="actual_payed_amount_3"/>
  30 + <result property="otherAmount" column="other_amount"/>
  31 + &lt;!&ndash;缺少备注字段&ndash;&gt;
  32 + <result property="status" column="status"/>
  33 + &lt;!&ndash; </association>&ndash;&gt;
  34 +
  35 +
  36 + &lt;!&ndash;生产科对账单&ndash;&gt;
  37 + &lt;!&ndash; <association property="producePaymentCheckBillOrderDO" javaType="com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO">&ndash;&gt;
  38 + <result property="id" column="checkId"/>
  39 + <result property="checkNo" column="check_no"/>
  40 + <result property="status" column="status"/>
  41 + <result property="deductAmount" column="deduct_amount"/>
  42 + <result property="deductDept" column="deduct_dept"/>
  43 + <result property="departmentInvoiceStatus" column="department_invoice_status"/>
  44 + <result property="actualPayedAmount3" column="actual_payed_amount3"/>
  45 + <result property="actualPayedAmount2" column="actual_payed_amount2"/>
  46 + <result property="actualPayedAmount1" column="actual_payed_amount1"/>
  47 + <result property="actualPayedAmount" column="actual_payed_amount"/>
  48 + <result property="payedDate" column="payed_date"/>
  49 + &lt;!&ndash;缺少备注字段&ndash;&gt;
  50 + <result property="deductUrl" column="deduct_url"/>
  51 + &lt;!&ndash; </association>&ndash;&gt;
  52 +
  53 + &lt;!&ndash;利润&ndash;&gt;
  54 + &lt;!&ndash; <association property="profitAnalysisInfo" javaType="com.order.erp.domain.vo.order.OrderProfitAnalysisVO"> &ndash;&gt;
  55 + <result property="id" column="profitAnalysisId"/>
  56 + <result property="customerPrice" column="customer_price"/>
  57 + <result property="customerTotalPrice" column="customer_total_price"/>
  58 + <result property="productionDepartmentPrice" column="production_department_price"/>
  59 + <result property="productionDepartmentTotalPrice" column="production_department_total_price"/>
  60 + &lt;!&ndash; </association>&ndash;&gt;
  61 + </resultMap>-->
  62 +
  63 +
  64 +
  65 +
  66 + <select id="byConditionGetOrder" parameterType="com.order.erp.domain.vo.order.InvoiceBillOrderQueryVO" resultType="com.order.erp.domain.vo.order.FinanceOrderResultVO">
  67 + SELECT
  68 + o.id AS id,
  69 + -- o.invoice_no AS invoiceNo, -- 注释字段没有问题
  70 + -- o.check_no AS checkNo, -- 注释字段没有问题
  71 + o.customer_code AS customerCode, -- 客户编码
  72 + o.project_no AS projectNo, -- 项目号
  73 + o.production_department AS productionDepartment, -- 生产科
  74 + o.inner_no AS innerNo, -- 内部编号
  75 + o.small_pic_url AS smallPicUrl, -- 订单图片
  76 + o.order_count AS orderCount, -- 数量
  77 + o.production_department_consign_time AS productionDepartmentConsignTime, -- 生产科拖货时间
  78 + o.order_hod_time AS orderHodTime, -- hod时间
  79 + -- 利润信息
  80 + a.id AS profitId, -- 确保表别名 a 是正确的
  81 + a.customer_price AS customerPrice, -- 客户单价
  82 + a.customer_total_price AS customerTotalPrice, -- 客户总价
  83 + a.production_department_price AS productionDepartmentPrice, -- 生产科单价
  84 + a.production_department_total_price AS productionDepartmentTotalPrice, -- 生产科总价
  85 + -- 发票信息
  86 + i.id AS invoiceId,
  87 + i.invoice_no AS invoiceNo, -- invoice编号
  88 + i.bg_url AS invoiceBgUrl, -- 报关单
  89 + i.back_refund_date AS invoiceBackRefundDate, -- 必须回款日期
  90 + i.actual_refund_date AS invoiceActualRefundDate, -- 实际回款日期,前端不用获取
  91 + i.deduct_url AS invoiceDeductUrl, -- 扣款单
  92 + i.actual_receivable_amount AS invoiceActualReceivableAmount, -- 实际应收金额
  93 + i.actual_payed_amount1 AS invoiceActualPayedAmount1, -- 实际收款金额1
  94 + i.actual_payed_amount2 AS invoiceActualPayedAmount2, -- 实际收款金额2
  95 + i.actual_payed_amount3 AS invoiceActualPayedAmount3, -- 实际收款金额3
  96 + i.other_amount AS invoiceOtherAmount, -- 其他费用
  97 + i.status AS invoiceStatus, -- invoice状态
  98 + i.deduct_amount AS invoiceDeductAmount, -- 扣款金额
  99 + i.notes AS invoiceNotes, -- invoice备注
  100 + -- 生产科付款信息
  101 + p.id AS checkId,
  102 + p.check_no AS checkNo, -- checkNo编号
  103 + p.status AS checkPaystatus, -- checkNo状态
  104 + p.deduct_amount AS checkDeductAmount, -- 扣款金额
  105 + p.actual_payed_date AS checkActualPayedDate, -- 实际收款时间,前段不用获取
  106 + p.deduct_dept AS checkDeductDept, -- 扣款部门
  107 + p.department_invoice_status AS checkDepartmentInvoiceStatus, -- 发票状态
  108 + p.actual_payed_amount3 AS checkActualPayedAmount3, -- 实际付款金额3
  109 + p.actual_payed_amount2 AS checkActualPayedAmount2, -- 实际付款金额2
  110 + p.actual_payed_amount1 AS checkActualPayedAmount1, -- 实际付款金额1
  111 + p.actual_payed_amount AS checkActualPayedAmount, -- 实际应付金额
  112 + p.payed_date AS checkPayedDate, -- 必须付款日期
  113 + p.deduct_url AS checkDeductUrl, -- 扣款单
  114 + p.notes AS checkNotes, -- checkNo备注
  115 + p.invoice_url AS checkInvoiceUrl -- 发票
  116 + FROM order_base_info o
  117 + LEFT JOIN invoice_bill_order AS i
  118 + ON o.id = i.order_id AND i.enable_flag = 10
  119 + LEFT JOIN produce_payment_check_bill_order AS p
  120 + ON o.id = p.order_id AND p.enable_flag = 10
  121 + LEFT JOIN order_profit_analysis AS a
  122 + ON o.id = a.order_id AND a.enable_flag = 10
  123 + WHERE o.enable_flag = 10
  124 + <if test="queryVO.invoiceNo != null and queryVO.invoiceNo != ''">
  125 + AND i.invoice_no = #{queryVO.invoiceNo}
  126 + </if>
  127 + <if test="queryVO.checkNo != null and queryVO.checkNo != ''">
  128 + AND p.check_no = #{queryVO.checkNo}
  129 + </if>
  130 + <if test="queryVO.invoiceStatus != null">
  131 + AND i.status = #{queryVO.invoiceStatus}
  132 + </if>
  133 + <if test="queryVO.checkNoStatus != null">
  134 + AND p.status = #{queryVO.checkNoStatus}
  135 + </if>
  136 + <if test="queryVO.customerCode != null and queryVO.customerCode != ''">
  137 + AND o.customer_code = #{queryVO.customerCode}
  138 + </if>
  139 + <if test="queryVO.projectNo != null and queryVO.projectNo != ''">
  140 + AND o.project_no = #{queryVO.projectNo}
  141 + </if>
  142 + <if test="queryVO.productionDepartment != null and queryVO.productionDepartment != ''">
  143 + AND o.production_department = #{queryVO.productionDepartment}
  144 + </if>
  145 + <if test="queryVO.innerNo != null and queryVO.innerNo != ''">
  146 + AND o.inner_no = #{queryVO.innerNo}
  147 + </if>
  148 + <if test="queryVO.customerPo != null and queryVO.customerPo != ''">
  149 + AND o.customer_po = #{queryVO.customerPo}
  150 + </if>
  151 + <if test="queryVO.invoiceStartTime != null">
  152 + AND DATE(i.create_time) &gt;= LEFT(#{queryVO.invoiceStartTime}, 10)
  153 + </if>
  154 + <if test="queryVO.invoiceEndTime != null">
  155 + AND DATE(i.create_time) &lt;= LEFT(#{queryVO.invoiceEndTime}, 10)
  156 + </if>
  157 + <if test="queryVO.checkStartTime != null ">
  158 + AND DATE(p.create_time) &gt;= LEFT(#{queryVO.checkStartTime}, 10)
  159 + </if>
  160 + <if test="queryVO.checkEndTime != null">
  161 + AND DATE(p.create_time) &lt;= LEFT(#{queryVO.checkEndTime}, 10)
  162 + </if>
  163 + <if test="queryVO.createStartTime !=null">
  164 + AND DATE(o.create_time) &gt;= LEFT(#{queryVO.createStartTime}, 10)
  165 + </if>
  166 + <if test="queryVO.createEndTime != null">
  167 + AND DATE(o.create_time) &lt;= LEFT(#{queryVO.createEndTime}, 10)
  168 + </if>
  169 + <if test="queryVO.productionDepartmentConsignStartTime != null ">
  170 + AND DATE(o.production_department_consign_time) &gt;= LEFT(#{queryVO.productionDepartmentConsignStartTime} , 10)
  171 + </if>
  172 + <if test="queryVO.productionDepartmentConsignEndTime != null">
  173 + AND DATE(o.production_department_consign_time) &lt;= LEFT(#{queryVO.productionDepartmentConsignEndTime} , 10)
  174 + </if>
  175 + <if test="queryVO.orderHodStartTime != null ">
  176 + AND DATE(o.order_hod_time) &gt;= LEFT(#{queryVO.orderHodStartTime} , 10)
  177 + </if>
  178 + <if test="queryVO.orderHodEndTime != null">
  179 + AND DATE(o.order_hod_time) &lt;= LEFT(#{queryVO.orderHodEndTime} , 10)
  180 + </if>
  181 + <if test="queryVO.trackerUserName != null and queryVO.trackerUserName != ''">
  182 + AND o.create_by = #{queryVO.trackerUserName}
  183 + </if>
  184 + <if test="queryVO.businessUserName != null and queryVO.businessUserName != ''">
  185 + AND o.business_person = #{queryVO.businessUserName}
  186 + </if>
  187 + ORDER BY o.id DESC
  188 +
  189 + </select>
  190 +</mapper>
... ...