|
|
@@ -275,11 +275,16 @@ public class PsExeExcelUtil {
|
|
275
|
275
|
|
|
276
|
276
|
// 5. 业务字段赋值(适配新列)
|
|
277
|
277
|
entity.setPfno(trimField(dto.getPfno()));
|
|
|
278
|
+ if (dto.getStockname() != null&& !dto.getStockname().isEmpty()) {
|
|
278
|
279
|
String s = trimField(dto.getStockname());
|
|
279
|
|
- String[] split = s.split("-");
|
|
|
280
|
+ if (s.contains("-")) {
|
|
280
|
281
|
|
|
281
|
|
- entity.setStockname(split[1]);
|
|
282
|
|
- entity.setStockcode(split[0]);
|
|
|
282
|
+ String[] split = s.split("-");
|
|
|
283
|
+
|
|
|
284
|
+ entity.setStockname(split[1]);
|
|
|
285
|
+ entity.setStockcode(split[0]);
|
|
|
286
|
+ }else entity.setStockname(s);
|
|
|
287
|
+ }
|
|
283
|
288
|
|
|
284
|
289
|
if (dto.getCreateBy() ==null || dto.getCreateBy().isEmpty()){
|
|
285
|
290
|
String createBy=infExe1Mapper.selectCreateByFromPono(dto.getPfno());
|
|
|
@@ -296,7 +301,7 @@ public class PsExeExcelUtil {
|
|
296
|
301
|
SimpleDateFormat sdf = new SimpleDateFormat("yy");
|
|
297
|
302
|
String year = sdf.format(new Date());
|
|
298
|
303
|
StringBuilder sb = new StringBuilder();
|
|
299
|
|
- StringBuilder rukudanhao = sb.append("POIS").append(year).append(String.format(String.valueOf(id)));
|
|
|
304
|
+ StringBuilder rukudanhao = sb.append("POIS").append(year).append(String.format(String.valueOf(id))).append("QC");
|
|
300
|
305
|
entity.setFno(rukudanhao.toString());
|
|
301
|
306
|
entity.setFphno(rukudanhao + "-01");
|
|
302
|
307
|
}else {
|
|
|
@@ -309,10 +314,12 @@ public class PsExeExcelUtil {
|
|
309
|
314
|
}
|
|
310
|
315
|
entity.setFmodalid(22);
|
|
311
|
316
|
// 拆分itemno-sdesc-brand字段
|
|
312
|
|
- String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
313
|
|
- entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
314
|
|
- entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
315
|
|
- entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
317
|
+ if (dto.getItemnoSdescBrand() != null&& !dto.getItemnoSdescBrand().isEmpty()) {
|
|
|
318
|
+ String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
|
319
|
+ entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
|
320
|
+ entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
|
321
|
+ entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
322
|
+ }
|
|
316
|
323
|
|
|
317
|
324
|
entity.setFtype3(trimField(dto.getFtype3()));
|
|
318
|
325
|
entity.setUt(trimField(dto.getUt()));
|
|
|
@@ -417,11 +424,15 @@ public class PsExeExcelUtil {
|
|
417
|
424
|
|
|
418
|
425
|
// 5. 业务字段赋值(替换pfno为sfno)
|
|
419
|
426
|
entity.setSfno(trimField(dto.getSfno())); // 销售合同号赋值
|
|
|
427
|
+ if (dto.getStockname() != null&& !dto.getStockname().isEmpty()) {
|
|
420
|
428
|
String s = trimField(dto.getStockname());
|
|
421
|
|
- String[] split = s.split("-");
|
|
|
429
|
+ if (s.contains("-")) {
|
|
|
430
|
+ String[] split = s.split("-");
|
|
422
|
431
|
|
|
423
|
|
- entity.setStockname(split[1]);
|
|
424
|
|
- entity.setStockcode(split[0]);
|
|
|
432
|
+ entity.setStockname(split[1]);
|
|
|
433
|
+ entity.setStockcode(split[0]);
|
|
|
434
|
+ }else entity.setStockname(s);
|
|
|
435
|
+ }
|
|
425
|
436
|
|
|
426
|
437
|
// 6. 流水号生成逻辑
|
|
427
|
438
|
int danhaochongfu = infExe1Mapper.selectFnoBySfnoCount(dto.getSfno());
|
|
|
@@ -433,7 +444,7 @@ public class PsExeExcelUtil {
|
|
433
|
444
|
SimpleDateFormat sdf = new SimpleDateFormat("yy");
|
|
434
|
445
|
String year = sdf.format(new Date());
|
|
435
|
446
|
StringBuilder sb = new StringBuilder();
|
|
436
|
|
- StringBuilder rukudanhao = sb.append("POIS").append(year).append(String.format(String.valueOf(id)));
|
|
|
447
|
+ StringBuilder rukudanhao = sb.append("SOOS").append(year).append(String.format(String.valueOf(id))).append("QC");
|
|
437
|
448
|
entity.setFno(rukudanhao.toString());
|
|
438
|
449
|
entity.setFphno(rukudanhao + "-01");
|
|
439
|
450
|
} else {
|
|
|
@@ -447,10 +458,12 @@ public class PsExeExcelUtil {
|
|
447
|
458
|
entity.setFmodalid(24); //
|
|
448
|
459
|
|
|
449
|
460
|
// 7. 拆分itemno-sdesc-brand字段(与InfExe1一致)
|
|
450
|
|
- String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
451
|
|
- entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
452
|
|
- entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
453
|
|
- entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
461
|
+ if (dto.getItemnoSdescBrand() != null&& !dto.getItemnoSdescBrand().isEmpty()) {
|
|
|
462
|
+ String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
|
463
|
+ entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
|
464
|
+ entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
|
465
|
+ entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
466
|
+ }
|
|
454
|
467
|
|
|
455
|
468
|
// 8. 其余字段赋值(与InfExe1完全一致)
|
|
456
|
469
|
entity.setFtype3(trimField(dto.getFtype3()));
|
|
|
@@ -538,10 +551,12 @@ public class PsExeExcelUtil {
|
|
538
|
551
|
// 5. 业务字段赋值(补充trim处理+数值转换,和Sheet1一致)
|
|
539
|
552
|
entity.setPfno(trimField(dto.getPfno()));
|
|
540
|
553
|
// 拆分收款/受益人信息(复用Sheet1的拆分方法)
|
|
541
|
|
- String[] payFields = splitCombinedField(dto.getCombinedPaymentInfo());
|
|
542
|
|
- entity.setSupName(payFields.length >= 1 ? payFields[0].trim() : null);
|
|
543
|
|
- entity.setSupBank(payFields.length >= 2 ? payFields[1].trim() : null);
|
|
544
|
|
- entity.setIssuingBankAcc(payFields.length >= 3 ? payFields[2].trim() : null);
|
|
|
554
|
+ if (dto.getCombinedPaymentInfo() != null&& !dto.getCombinedPaymentInfo().isEmpty()) {
|
|
|
555
|
+ String[] payFields = splitCombinedField(dto.getCombinedPaymentInfo());
|
|
|
556
|
+ entity.setSupName(payFields.length >= 1 ? payFields[0].trim() : null);
|
|
|
557
|
+ entity.setSupBank(payFields.length >= 2 ? payFields[1].trim() : null);
|
|
|
558
|
+ entity.setIssuingBankAcc(payFields.length >= 3 ? payFields[2].trim() : null);
|
|
|
559
|
+ }
|
|
545
|
560
|
entity.setPayType(trimField(dto.getPayType()));
|
|
546
|
561
|
entity.setPayment(trimField(dto.getPayment()));
|
|
547
|
562
|
// 申请金额:数值转换(保留2位小数,和Sheet1的金额字段一致)
|
|
|
@@ -656,10 +671,12 @@ public class PsExeExcelUtil {
|
|
656
|
671
|
|
|
657
|
672
|
|
|
658
|
673
|
// 拆分收款人组合信息(复用Sheet1/Exe3的拆分方法,按英文逗号","拆分)
|
|
659
|
|
- String[] suppFields = splitCombinedField(dto.getCombinedSuppInfo());
|
|
660
|
|
- entity.setSuppName(suppFields.length >= 1 ? suppFields[0].trim() : null); // 收款人名称
|
|
661
|
|
- entity.setSuppBank(suppFields.length >= 2 ? suppFields[1].trim() : null); // 收款人银行
|
|
662
|
|
- entity.setSuppAcc(suppFields.length >= 3 ? suppFields[2].trim() : null); // 银行账号
|
|
|
674
|
+ if (dto.getCombinedSuppInfo() != null&& !dto.getCombinedSuppInfo().isEmpty()) {
|
|
|
675
|
+ String[] suppFields = splitCombinedField(dto.getCombinedSuppInfo());
|
|
|
676
|
+ entity.setSuppName(suppFields.length >= 1 ? suppFields[0].trim() : null); // 收款人名称
|
|
|
677
|
+ entity.setSuppBank(suppFields.length >= 2 ? suppFields[1].trim() : null); // 收款人银行
|
|
|
678
|
+ entity.setSuppAcc(suppFields.length >= 3 ? suppFields[2].trim() : null); // 银行账号
|
|
|
679
|
+ }
|
|
663
|
680
|
|
|
664
|
681
|
entity.setPayment(trimField(dto.getPayment())); // 付款方式
|
|
665
|
682
|
entity.setFeeNm(trimField(dto.getFeeNm())); // 费用名称
|
|
|
@@ -870,15 +887,15 @@ public class PsExeExcelUtil {
|
|
870
|
887
|
}
|
|
871
|
888
|
|
|
872
|
889
|
// 3. 税额逻辑校验(税额=不含税金额*税率,误差校验)
|
|
873
|
|
- if (dto.getNtPoAmt() != null && dto.getInTaxRate() != null && dto.getTaxAmt() != null) {
|
|
|
890
|
+ /* if (dto.getNtPoAmt() != null && dto.getInTaxRate() != null && dto.getTaxAmt() != null) {
|
|
874
|
891
|
BigDecimal calcTaxAmt = parseBigDecimal(dto.getNtPoAmt(), 6)
|
|
875
|
|
- .multiply(parseBigDecimal(dto.getInTaxRate(), 6))
|
|
|
892
|
+ .multiply(parseBigDecimal(dto.getInTaxRate(), 6)).multiply(new BigDecimal("0.01"))
|
|
876
|
893
|
.setScale(6, RoundingMode.HALF_UP);
|
|
877
|
894
|
BigDecimal inputTaxAmt = parseBigDecimal(dto.getTaxAmt(), 6);
|
|
878
|
895
|
if (calcTaxAmt.compareTo(inputTaxAmt) != 0) {
|
|
879
|
896
|
errorLogList.add("税额校验失败:不含税金额【" + dto.getNtPoAmt() + "】*税率【" + dto.getInTaxRate() + "】=" + calcTaxAmt + ",与录入税额【" + dto.getTaxAmt() + "】不一致");
|
|
880
|
897
|
}
|
|
881
|
|
- }
|
|
|
898
|
+ }*/
|
|
882
|
899
|
|
|
883
|
900
|
// 4. 构建errorLog字符串(多错误用分号分隔)
|
|
884
|
901
|
String errorLog = errorLogList.isEmpty() ? "" : String.join(";", errorLogList);
|
|
|
@@ -902,10 +919,12 @@ public class PsExeExcelUtil {
|
|
902
|
919
|
entity.setTaxInvNo(trimField(dto.getTaxInvNo())); // 发票号码
|
|
903
|
920
|
|
|
904
|
921
|
// 拆分物料编码+物料描述+品牌组合字段
|
|
905
|
|
- String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
906
|
|
- entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
907
|
|
- entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
908
|
|
- entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
922
|
+ if (dto.getItemnoSdescBrand() != null&& !dto.getItemnoSdescBrand().isEmpty()) {
|
|
|
923
|
+ String[] itemFields = splitCombinedField(dto.getItemnoSdescBrand());
|
|
|
924
|
+ entity.setItemno(itemFields.length >= 1 ? itemFields[0].trim() : null);
|
|
|
925
|
+ entity.setSdesc(itemFields.length >= 2 ? itemFields[1].trim() : null);
|
|
|
926
|
+ entity.setBrand(itemFields.length >= 3 ? itemFields[2].trim() : null);
|
|
|
927
|
+ }
|
|
909
|
928
|
|
|
910
|
929
|
// 数值字段转换(DECIMAL(18,6))
|
|
911
|
930
|
entity.setQty(parseBigDecimal(dto.getQty(), 6)); // 数量
|
|
|
@@ -1008,12 +1027,20 @@ public class PsExeExcelUtil {
|
|
1008
|
1027
|
entity.setAmount(parseBigDecimal(dto.getAmount(), 6)); // 保留6位小数
|
|
1009
|
1028
|
|
|
1010
|
1029
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
|
|
1011
|
|
- Date fkdate = Date.from(LocalDate.parse(dto.getFkdate(), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
1012
|
|
- Date fdate = Date.from(LocalDate.parse(dto.getFdate(), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
1013
|
|
- Date yjfkdate = Date.from(LocalDate.parse(dto.getYjfkdate(), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
1014
|
|
- entity.setFkdate(fkdate);
|
|
1015
|
|
- entity.setFdate(fdate);
|
|
1016
|
|
- entity.setYjfkdate(yjfkdate);
|
|
|
1030
|
+// 替换分隔符后解析(-、空格 转 /)
|
|
|
1031
|
+ if (dto.getFkdate()!=null&&!dto.getFkdate().isEmpty()) {
|
|
|
1032
|
+ Date fkdate = Date.from(LocalDate.parse(dto.getFkdate().trim().replace("-", "/").replace(" ", "/"), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
1033
|
+ entity.setFkdate(fkdate);
|
|
|
1034
|
+ }
|
|
|
1035
|
+ if (dto.getFdate()!=null&&!dto.getFdate().isEmpty()) {
|
|
|
1036
|
+ Date fdate = Date.from(LocalDate.parse(dto.getFdate().trim().replace("-", "/").replace(" ", "/"), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
1037
|
+ entity.setFdate(fdate);
|
|
|
1038
|
+ }
|
|
|
1039
|
+ if (dto.getYjfkdate()!=null&&!dto.getYjfkdate().isEmpty()) {
|
|
|
1040
|
+ Date yjfkdate = Date.from(LocalDate.parse(dto.getYjfkdate().trim().replace("-", "/").replace(" ", "/"), formatter).atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
1041
|
+ entity.setYjfkdate(yjfkdate);
|
|
|
1042
|
+ }
|
|
|
1043
|
+
|
|
1017
|
1044
|
|
|
1018
|
1045
|
// 6. 生成流水号(前缀LC+年月+6位自增ID)
|
|
1019
|
1046
|
InfExe1Amount infExe1Amount = new InfExe1Amount();
|
|
|
@@ -1055,6 +1082,7 @@ public class PsExeExcelUtil {
|
|
1055
|
1082
|
errorLogList.add("客户编号+名称为空");
|
|
1056
|
1083
|
} else {
|
|
1057
|
1084
|
// 拆分规则:按第一个空格/逗号拆分,左侧为编号,右侧为名称
|
|
|
1085
|
+
|
|
1058
|
1086
|
String[] ctArr = ctNoCtName.split("[,\\s]+", 2);
|
|
1059
|
1087
|
if (ctArr.length >= 1) {
|
|
1060
|
1088
|
ctNo = ctArr[0];
|
|
|
@@ -1167,6 +1195,7 @@ public class PsExeExcelUtil {
|
|
1167
|
1195
|
errorLogList.add("客户信息(名称+银行+账号+合同名)为空");
|
|
1168
|
1196
|
} else {
|
|
1169
|
1197
|
// 拆分规则:按【|】分隔(优先),无则按【;】,最后按【,】/空格,最多拆4段
|
|
|
1198
|
+
|
|
1170
|
1199
|
String[] ctArr = ctInfo.split("[,|;,\\s]+", 4);
|
|
1171
|
1200
|
if (ctArr.length >= 1) ctName = ctArr[0];
|
|
1172
|
1201
|
if (ctArr.length >= 2) ctInvoiceBankName = ctArr[1];
|