|
|
@@ -14,7 +14,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.malk.core.McProject;
|
|
|
import com.malk.kabeiyi.service.KabeiyiService;
|
|
|
import com.malk.kabeiyi.util.RecognizeAllText;
|
|
|
-import com.malk.kabeiyi.util.U8Util;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.server.common.McException;
|
|
|
@@ -44,8 +43,11 @@ import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
-import java.time.LocalDate;
|
|
|
+import java.time.*;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
|
@@ -564,7 +566,7 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
|
|
|
@Override
|
|
|
@Async
|
|
|
- public McR getDeliveryInfo() {
|
|
|
+ public McR getSaleoutInfo() {
|
|
|
//现在时间戳
|
|
|
long beginTime = System.currentTimeMillis();
|
|
|
|
|
|
@@ -603,15 +605,19 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
DateTime beginOfMonth = DateUtil.beginOfMonth(DateUtil.lastMonth());
|
|
|
String beginOfMonthString = beginOfMonth.toString("yyyy-MM-dd");
|
|
|
|
|
|
- /*String beginOfMonthString = "2024-12-22";
|
|
|
+ /*String beginOfMonthString = "2025-06-25";
|
|
|
|
|
|
- String yesterday = "2024-12-22";*/
|
|
|
+ String yesterday = "2025-06-25";*/
|
|
|
for (Integer dsSequence : factory.keySet()) {
|
|
|
/*if (dsSequence != 8){
|
|
|
continue;
|
|
|
}*/
|
|
|
+
|
|
|
List<String> errorCodes = new ArrayList<>();
|
|
|
|
|
|
+ //存放存货名称、编码
|
|
|
+ Map<String,String> inventory = new HashMap<>();
|
|
|
+
|
|
|
Map<String,Object> param = new HashMap<>();
|
|
|
param.put("from_account",fromAccount);
|
|
|
param.put("to_account",toAccount);
|
|
|
@@ -639,7 +645,7 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
//查询单个出库单详情
|
|
|
String id = getString(saleout.get("code"));
|
|
|
|
|
|
- /*if (!id.equals("0000008087")){
|
|
|
+ /*if (!id.equals("0000009439")){
|
|
|
continue;
|
|
|
}*/
|
|
|
|
|
|
@@ -693,6 +699,8 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
formData.put("textField_m18nvp8c",getString(saleout2.get("businesscode")));//业务单号
|
|
|
formData.put("textField_m5nnwiv1", getString(saleout2.get("warehousename")));//仓库名称
|
|
|
formData.put("dateField_m18nvp7x",DateUtil.parseDate(getString(saleout2.get("date"))).getTime());//单据日期
|
|
|
+ formData.put("textField_mbu5nao3",getWeekRange(getString(saleout2.get("date"))));//发货周
|
|
|
+ formData.put("textField_mbu5nao5",saleout2.get("date").toString().substring(0,4));//年份
|
|
|
formData.put("dateField_m5nnwiuw",Objects.nonNull(saleout2.get("auditdate")) ? DateUtil.parseDate(getString(saleout2.get("auditdate"))).getTime() : null);//审核日期
|
|
|
formData.put("textField_m18nvp7y",getString(saleout2.get("customername")));//客户名称
|
|
|
formData.put("textField_m18nvp7z",getString(saleout2.get("departmentname")));//部门
|
|
|
@@ -704,6 +712,9 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
formData.put("numberField_m18wkih7",dsSequence);//数据源序号
|
|
|
formData.put("selectField_m7b8j9uj","实发");//类型
|
|
|
|
|
|
+ AtomicReference<Double> totalQuantity = new AtomicReference<>(0d);
|
|
|
+ AtomicReference<Double> totalCost = new AtomicReference<>(0d);
|
|
|
+
|
|
|
List<Map> entry = (List<Map>) saleout2.get("entry");
|
|
|
|
|
|
//collect拆分成五个list 每个list长度为500
|
|
|
@@ -717,8 +728,15 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
errorCodes.add(id + "出库明细超过2500");
|
|
|
}
|
|
|
|
|
|
+ //是否退线
|
|
|
+ boolean isReject = false;
|
|
|
+
|
|
|
+ Map<String,String> inventoryPrice = new HashMap<>();
|
|
|
+
|
|
|
//出库明细
|
|
|
- List list1 = collectList.get(0).stream().map(item -> {
|
|
|
+ List<Map> list1 = new ArrayList();
|
|
|
+
|
|
|
+ for (Map item : collectList.get(0)) {
|
|
|
if (Objects.isNull(formData.get("textField_m219zpzf"))){
|
|
|
formData.put("textField_m219zpzf",getString(item.get("free1")));//客户码 出库主表没有客户码,取明细的客户码
|
|
|
}
|
|
|
@@ -728,120 +746,362 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
|
|
|
Map detail = new HashMap();
|
|
|
detail.put("textField_m22mkwzk", getString(item.get("define29")));//客户存货码
|
|
|
- detail.put("textField_m5qdxf7r", getString(item.get("inventorycode")));//存货编码
|
|
|
-// detail.put("textField_m18nvp8e", inventory_name);//存货名称
|
|
|
-
|
|
|
+ detail.put("textField_mbu5naoj", getString(item.get("inventorycode")));//存货编码
|
|
|
+ detail.put("textField_mc1emzfr",getInventoryName(getString(item.get("inventorycode")),dsSequence,inventory));//存货名称
|
|
|
detail.put("textField_m21b1bhg", getString(item.get("free2")));//产品颜色
|
|
|
+ detail.put("textField_mbu5naoa", getString(item.get("define28")));//条码
|
|
|
detail.put("textField_m18nvp8f", getString(item.get("cmassunitname")));//单位
|
|
|
- detail.put("numberField_m18nvp8h", getString(item.get("quantity")));//发货数量
|
|
|
- detail.put("textField_m5oztcmx", getString(item.get("define25")));//包装方式
|
|
|
- detail.put("textField_m5oztcmy", getString(item.get("define30")));//工艺号
|
|
|
- detail.put("textareaField_m5oztcmz", getString(item.get("define31")));//备注
|
|
|
|
|
|
+ if (Objects.nonNull(item.get("quantity")) && isNumber(getString(item.get("quantity")))){
|
|
|
+ if (getString((item.get("quantity"))).contains("-")){
|
|
|
+ isReject = true;
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m18nvp8h", getString(item.get("quantity")));//发货数量
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQuantity.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("quantity"))))));
|
|
|
+
|
|
|
+ String price = getString(item.get("price"));
|
|
|
+ String cost = getString(item.get("cost"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ double numericValue = Double.parseDouble(price);
|
|
|
+
|
|
|
+ //单价为0时查询存货价目表
|
|
|
+ if (numericValue == 0d){
|
|
|
+ String inventorycode = getString(item.get("inventorycode"));
|
|
|
+
|
|
|
+ if (inventoryPrice.containsKey(inventorycode)){
|
|
|
+ price = inventoryPrice.get(inventorycode);
|
|
|
+ }else {
|
|
|
+ price = getInventoryPrice(factory.get(dsSequence), getString(item.get("free1")), getString(saleout2.get("date")), getString(item.get("inventorycode")));
|
|
|
+
|
|
|
+ inventoryPrice.put(getString(item.get("inventorycode")),price);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"0".equals(price)){
|
|
|
+ cost = Double.parseDouble(price) * Double.parseDouble(getString(item.get("quantity"))) + "";
|
|
|
+ detail.put("numberField_m18nvp8k", price);//单价
|
|
|
+ detail.put("numberField_m18nvp8m", cost);//金额
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m18nvp8k", price);//单价
|
|
|
+ detail.put("numberField_m18nvp8m", cost);//金额
|
|
|
+ }
|
|
|
+
|
|
|
+ String finalCost = cost;
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(finalCost))));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ System.out.println("字符串不是有效的数值: " + price);
|
|
|
+ }
|
|
|
|
|
|
- /*detail.put("numberField_m18nvp8j", getString(item.get("price")));//未税单价
|
|
|
- detail.put("numberField_m18nvp8l", getString(item.get("money")));//未税总价
|
|
|
- detail.put("numberField_m18nvp8k", getString(item.get("taxprice")));//含税单价
|
|
|
- detail.put("numberField_m18nvp8m", getString(item.get("sum")));//含税总价
|
|
|
- detail.put("numberField_m18nvp8n", getString(item.get("taxrate")));//税率
|
|
|
- detail.put("numberField_m18nvp8o", getString(item.get("tax")));//总税价*/
|
|
|
+ /* if (Objects.nonNull(item.get("price")) && isNumber(getString(item.get("price")))){
|
|
|
+ detail.put("numberField_m18nvp8k", getString(item.get("price")));//单价
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("cost")) && isNumber(getString(item.get("cost")))){
|
|
|
+ detail.put("numberField_m18nvp8m", getString(item.get("cost")));//金额
|
|
|
|
|
|
- return detail;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("cost"))))));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ list1.add(detail);
|
|
|
+ }
|
|
|
|
|
|
List<Map> list2 = new ArrayList<>();
|
|
|
if (collectList.size() > 1){
|
|
|
- list2 = collectList.get(1).stream().map(item -> {
|
|
|
+ for (Map item : collectList.get(1)) {
|
|
|
Map detail = new HashMap();
|
|
|
detail.put("textField_m2j0wj8o", getString(item.get("define29")));//客户存货码
|
|
|
- detail.put("textField_m2j0wj8p", getString(item.get("inventory_name")));//存货名称
|
|
|
+ detail.put("textField_mbu5naol", getString(item.get("inventorycode")));//存货编码
|
|
|
+ detail.put("textField_mc1emzft",getInventoryName(getString(item.get("inventorycode")),dsSequence,inventory));//存货名称
|
|
|
detail.put("textField_m2j0wj8q", getString(item.get("free2")));//产品颜色
|
|
|
+ detail.put("textField_mbu5naoc", getString(item.get("define28")));//条码
|
|
|
detail.put("textField_m2j0wj8r", getString(item.get("cinvm_unit")));//单位
|
|
|
- detail.put("numberField_m2j0wj8s", getString(item.get("quantity")));//发货数量
|
|
|
- detail.put("textField_m5oztcn3", getString(item.get("define25")));//包装方式
|
|
|
- detail.put("textField_m5oztcn2", getString(item.get("define30")));//工艺号
|
|
|
- detail.put("textareaField_m5oztcng", getString(item.get("define31")));//备注
|
|
|
-
|
|
|
- /*detail.put("numberField_m2j0wj8t", getString(item.get("price")));//未税单价
|
|
|
- detail.put("numberField_m2j0wj8u", getString(item.get("money")));//未税总价
|
|
|
- detail.put("numberField_m2j0wj8v", getString(item.get("taxprice")));//含税单价
|
|
|
- detail.put("numberField_m2j0wj8w", getString(item.get("sum")));//含税总价
|
|
|
- detail.put("numberField_m2j0wj8x", getString(item.get("taxrate")));//税率
|
|
|
- detail.put("numberField_m2j0wj8y", getString(item.get("tax")));//总税价*/
|
|
|
-
|
|
|
- return detail;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("quantity")) && isNumber(getString(item.get("quantity")))){
|
|
|
+ if (getString((item.get("quantity"))).contains("-")){
|
|
|
+ isReject = true;
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m2j0wj8s", getString(item.get("quantity")));//发货数量
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQuantity.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("quantity"))))));
|
|
|
+
|
|
|
+ String price = getString(item.get("price"));
|
|
|
+ String cost = getString(item.get("cost"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ double numericValue = Double.parseDouble(price);
|
|
|
+
|
|
|
+ //单价为0时查询存货价目表
|
|
|
+ if (numericValue == 0d){
|
|
|
+ String inventorycode = getString(item.get("inventorycode"));
|
|
|
+
|
|
|
+ if (inventoryPrice.containsKey(inventorycode)){
|
|
|
+ price = inventoryPrice.get(inventorycode);
|
|
|
+ }else {
|
|
|
+ price = getInventoryPrice(factory.get(dsSequence), getString(item.get("free1")), getString(saleout2.get("date")), getString(item.get("inventorycode")));
|
|
|
+
|
|
|
+ inventoryPrice.put(getString(item.get("inventorycode")),price);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"0".equals(price)){
|
|
|
+ cost = Double.parseDouble(price) * Double.parseDouble(getString(item.get("quantity"))) + "";
|
|
|
+ detail.put("numberField_m2j0wj8v", price);//单价
|
|
|
+ detail.put("numberField_m2j0wj8w", cost);//金额
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m2j0wj8v", price);//单价
|
|
|
+ detail.put("numberField_m2j0wj8w", cost);//金额
|
|
|
+ }
|
|
|
+
|
|
|
+ String finalCost = cost;
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(finalCost))));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ System.out.println("字符串不是有效的数值: " + price);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (Objects.nonNull(item.get("price")) && isNumber(getString(item.get("price")))){
|
|
|
+ detail.put("numberField_m2j0wj8v", getString(item.get("price")));//单价
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("cost")) && isNumber(getString(item.get("cost")))){
|
|
|
+ detail.put("numberField_m2j0wj8w", getString(item.get("cost")));//金额
|
|
|
+
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("cost"))))));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ list2.add(detail);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
List<Map> list3 = new ArrayList<>();
|
|
|
if (collectList.size() > 2){
|
|
|
- list3 = collectList.get(2).stream().map(item -> {
|
|
|
+ for (Map item : collectList.get(2)) {
|
|
|
Map detail = new HashMap();
|
|
|
detail.put("textField_m2j0wj93", getString(item.get("define29")));//客户存货码
|
|
|
- detail.put("textField_m2j0wj94", getString(item.get("inventory_name")));//存货名称
|
|
|
+ detail.put("textField_mbu5naon", getString(item.get("inventorycode")));//存货编码
|
|
|
+ detail.put("textField_mc1emzfv",getInventoryName(getString(item.get("inventorycode")),dsSequence,inventory));//存货名称
|
|
|
detail.put("textField_m2j0wj95", getString(item.get("free2")));//产品颜色
|
|
|
+ detail.put("textField_mbu5naoe", getString(item.get("define28")));//条码
|
|
|
detail.put("textField_m2j0wj96", getString(item.get("cinvm_unit")));//单位
|
|
|
- detail.put("numberField_m2j0wj97", getString(item.get("quantity")));//发货数量
|
|
|
- detail.put("textField_m5oztcn7", getString(item.get("define25")));//包装方式
|
|
|
- detail.put("textField_m5oztcn6", getString(item.get("define30")));//工艺号
|
|
|
- detail.put("textareaField_m5oztcni", getString(item.get("define31")));//备注
|
|
|
-
|
|
|
- /*detail.put("numberField_m2j0wj98", getString(item.get("price")));//未税单价
|
|
|
- detail.put("numberField_m2j0wj99", getString(item.get("money")));//未税总价
|
|
|
- detail.put("numberField_m2j0wj9a", getString(item.get("taxprice")));//含税单价
|
|
|
- detail.put("numberField_m2j0wj9b", getString(item.get("sum")));//含税总价
|
|
|
- detail.put("numberField_m2j0wj9c", getString(item.get("taxrate")));//税率
|
|
|
- detail.put("numberField_m2j0wj9d", getString(item.get("tax")));//总税价*/
|
|
|
-
|
|
|
- return detail;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("quantity")) && isNumber(getString(item.get("quantity")))){
|
|
|
+ if (getString((item.get("quantity"))).contains("-")){
|
|
|
+ isReject = true;
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m2j0wj97", getString(item.get("quantity")));//发货数量
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQuantity.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("quantity"))))));
|
|
|
+
|
|
|
+ String price = getString(item.get("price"));
|
|
|
+ String cost = getString(item.get("cost"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ double numericValue = Double.parseDouble(price);
|
|
|
+
|
|
|
+ //单价为0时查询存货价目表
|
|
|
+ if (numericValue == 0d){
|
|
|
+ String inventorycode = getString(item.get("inventorycode"));
|
|
|
+
|
|
|
+ if (inventoryPrice.containsKey(inventorycode)){
|
|
|
+ price = inventoryPrice.get(inventorycode);
|
|
|
+ }else {
|
|
|
+ price = getInventoryPrice(factory.get(dsSequence), getString(item.get("free1")), getString(saleout2.get("date")), getString(item.get("inventorycode")));
|
|
|
+
|
|
|
+ inventoryPrice.put(getString(item.get("inventorycode")),price);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"0".equals(price)){
|
|
|
+ cost = Double.parseDouble(price) * Double.parseDouble(getString(item.get("quantity"))) + "";
|
|
|
+ detail.put("numberField_m2j0wj9a", price);//单价
|
|
|
+ detail.put("numberField_m2j0wj9b", cost);//金额
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m2j0wj9a", price);//单价
|
|
|
+ detail.put("numberField_m2j0wj9b", cost);//金额
|
|
|
+ }
|
|
|
+
|
|
|
+ String finalCost = cost;
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(finalCost))));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ System.out.println("字符串不是有效的数值: " + price);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (Objects.nonNull(item.get("price")) && isNumber(getString(item.get("price")))){
|
|
|
+ detail.put("numberField_m2j0wj9a", getString(item.get("price")));//单价
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("cost")) && isNumber(getString(item.get("cost")))){
|
|
|
+ detail.put("numberField_m2j0wj9b", getString(item.get("cost")));//金额
|
|
|
+
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("cost"))))));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ list3.add(detail);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
List<Map> list4 = new ArrayList<>();
|
|
|
if (collectList.size() > 3){
|
|
|
- list4 = collectList.get(3).stream().map(item -> {
|
|
|
+ for (Map item : collectList.get(3)) {
|
|
|
Map detail = new HashMap();
|
|
|
detail.put("textField_m4cfhc70", getString(item.get("define29")));//客户存货码
|
|
|
- detail.put("textField_m4cfhc71", getString(item.get("inventory_name")));//存货名称
|
|
|
+ detail.put("textField_mbu5naop", getString(item.get("inventorycode")));//存货编码
|
|
|
+ detail.put("textField_mc1emzfx",getInventoryName(getString(item.get("inventorycode")),dsSequence,inventory));//存货名称
|
|
|
detail.put("textField_m4cfhc72", getString(item.get("free2")));//产品颜色
|
|
|
+ detail.put("textField_mbu5naog", getString(item.get("define28")));//条码
|
|
|
detail.put("textField_m4cfhc73", getString(item.get("cinvm_unit")));//单位
|
|
|
- detail.put("numberField_m4cfhc74", getString(item.get("quantity")));//发货数量
|
|
|
- detail.put("textField_m5oztcnb", getString(item.get("define25")));//包装方式
|
|
|
- detail.put("textField_m5oztcna", getString(item.get("define30")));//工艺号
|
|
|
- detail.put("textareaField_m5oztcnk", getString(item.get("define31")));//备注
|
|
|
-
|
|
|
- /*detail.put("numberField_m4cfhc75", getString(item.get("price")));//未税单价
|
|
|
- detail.put("numberField_m4cfhc76", getString(item.get("money")));//未税总价
|
|
|
- detail.put("numberField_m4cfhc77", getString(item.get("taxprice")));//含税单价
|
|
|
- detail.put("numberField_m4cfhc78", getString(item.get("sum")));//含税总价
|
|
|
- detail.put("numberField_m4cfhc79", getString(item.get("taxrate")));//税率
|
|
|
- detail.put("numberField_m4cfhc7a", getString(item.get("tax")));//总税价*/
|
|
|
-
|
|
|
- return detail;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("quantity")) && isNumber(getString(item.get("quantity")))){
|
|
|
+ if (getString((item.get("quantity"))).contains("-")){
|
|
|
+ isReject = true;
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m4cfhc74", getString(item.get("quantity")));//发货数量
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQuantity.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("quantity"))))));
|
|
|
+
|
|
|
+ String price = getString(item.get("price"));
|
|
|
+ String cost = getString(item.get("cost"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ double numericValue = Double.parseDouble(price);
|
|
|
+
|
|
|
+ //单价为0时查询存货价目表
|
|
|
+ if (numericValue == 0d){
|
|
|
+ String inventorycode = getString(item.get("inventorycode"));
|
|
|
+
|
|
|
+ if (inventoryPrice.containsKey(inventorycode)){
|
|
|
+ price = inventoryPrice.get(inventorycode);
|
|
|
+ }else {
|
|
|
+ price = getInventoryPrice(factory.get(dsSequence), getString(item.get("free1")), getString(saleout2.get("date")), getString(item.get("inventorycode")));
|
|
|
+
|
|
|
+ inventoryPrice.put(getString(item.get("inventorycode")),price);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"0".equals(price)){
|
|
|
+ cost = Double.parseDouble(price) * Double.parseDouble(getString(item.get("quantity"))) + "";
|
|
|
+ detail.put("numberField_m4cfhc77", price);//单价
|
|
|
+ detail.put("numberField_m4cfhc78", cost);//金额
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m4cfhc77", price);//单价
|
|
|
+ detail.put("numberField_m4cfhc78", cost);//金额
|
|
|
+ }
|
|
|
+
|
|
|
+ String finalCost = cost;
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(finalCost))));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ System.out.println("字符串不是有效的数值: " + price);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (Objects.nonNull(item.get("price")) && isNumber(getString(item.get("price")))){
|
|
|
+ detail.put("numberField_m4cfhc77", getString(item.get("price")));//单价
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("cost")) && isNumber(getString(item.get("cost")))){
|
|
|
+ detail.put("numberField_m4cfhc78", getString(item.get("cost")));//金额
|
|
|
+
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("cost"))))));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ list4.add(detail);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
List<Map> list5 = new ArrayList<>();
|
|
|
if (collectList.size() > 4){
|
|
|
- list5 = collectList.get(4).stream().map(item -> {
|
|
|
+ for (Map item : collectList.get(4)) {
|
|
|
Map detail = new HashMap();
|
|
|
detail.put("textField_m4cfhc7f", getString(item.get("define29")));//客户存货码
|
|
|
- detail.put("textField_m4cfhc7g", getString(item.get("inventory_name")));//存货名称
|
|
|
+ detail.put("textField_mbu5naor", getString(item.get("inventorycode")));//存货编码
|
|
|
+ detail.put("textField_mc1emzfz",getInventoryName(getString(item.get("inventorycode")),dsSequence,inventory));//存货名称
|
|
|
detail.put("textField_m4cfhc7h", getString(item.get("free2")));//产品颜色
|
|
|
+ detail.put("textField_mbu5naoi", getString(item.get("define28")));//条码
|
|
|
detail.put("textField_m4cfhc7i", getString(item.get("cinvm_unit")));//单位
|
|
|
- detail.put("numberField_m4cfhc7j", getString(item.get("quantity")));//发货数量
|
|
|
- detail.put("textField_m5oztcnf", getString(item.get("define25")));//包装方式
|
|
|
- detail.put("textField_m5oztcne", getString(item.get("define30")));//工艺号
|
|
|
- detail.put("textareaField_m5oztcnm", getString(item.get("define31")));//备注
|
|
|
-
|
|
|
- /*detail.put("numberField_m4cfhc7k", getString(item.get("price")));//未税单价
|
|
|
- detail.put("numberField_m4cfhc7l", getString(item.get("money")));//未税总价
|
|
|
- detail.put("numberField_m4cfhc7m", getString(item.get("taxprice")));//含税单价
|
|
|
- detail.put("numberField_m4cfhc7n", getString(item.get("sum")));//含税总价
|
|
|
- detail.put("numberField_m4cfhc7o", getString(item.get("taxrate")));//税率
|
|
|
- detail.put("numberField_m4cfhc7p", getString(item.get("tax")));//总税价*/
|
|
|
-
|
|
|
- return detail;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("quantity")) && isNumber(getString(item.get("quantity")))){
|
|
|
+ if (getString((item.get("quantity"))).contains("-")){
|
|
|
+ isReject = true;
|
|
|
+ break;
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m4cfhc7j", getString(item.get("quantity")));//发货数量
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQuantity.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("quantity"))))));
|
|
|
+
|
|
|
+ String price = getString(item.get("price"));
|
|
|
+ String cost = getString(item.get("cost"));
|
|
|
+
|
|
|
+ try {
|
|
|
+ double numericValue = Double.parseDouble(price);
|
|
|
+
|
|
|
+ //单价为0时查询存货价目表
|
|
|
+ if (numericValue == 0d){
|
|
|
+ String inventorycode = getString(item.get("inventorycode"));
|
|
|
+
|
|
|
+ if (inventoryPrice.containsKey(inventorycode)){
|
|
|
+ price = inventoryPrice.get(inventorycode);
|
|
|
+ }else {
|
|
|
+ price = getInventoryPrice(factory.get(dsSequence), getString(item.get("free1")), getString(saleout2.get("date")), getString(item.get("inventorycode")));
|
|
|
+
|
|
|
+ inventoryPrice.put(getString(item.get("inventorycode")),price);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"0".equals(price)){
|
|
|
+ cost = Double.parseDouble(price) * Double.parseDouble(getString(item.get("quantity"))) + "";
|
|
|
+ detail.put("numberField_m4cfhc7m", price);//单价
|
|
|
+ detail.put("numberField_m4cfhc7n", cost);//金额
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ detail.put("numberField_m4cfhc7m", price);//单价
|
|
|
+ detail.put("numberField_m4cfhc7n", cost);//金额
|
|
|
+ }
|
|
|
+
|
|
|
+ String finalCost = cost;
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(finalCost))));
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ System.out.println("字符串不是有效的数值: " + price);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (Objects.nonNull(item.get("price")) && isNumber(getString(item.get("price")))){
|
|
|
+ detail.put("numberField_m4cfhc7m", getString(item.get("price")));//单价
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Objects.nonNull(item.get("cost")) && isNumber(getString(item.get("cost")))){
|
|
|
+ detail.put("numberField_m4cfhc7n", getString(item.get("cost")));//金额
|
|
|
+
|
|
|
+ totalCost.updateAndGet(v -> new Double((double) (v + Double.parseDouble(getString(item.get("cost"))))));
|
|
|
+ }*/
|
|
|
+
|
|
|
+ list5.add(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isReject){
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
formData.put("tableField_m18nvp82",list1);
|
|
|
@@ -850,6 +1110,9 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
formData.put("tableField_m4cfhc7c",list4);
|
|
|
formData.put("tableField_m4cfhc7r",list5);
|
|
|
|
|
|
+ formData.put("numberField_mbu92ncy",totalQuantity.get());//发货数量合计
|
|
|
+ formData.put("numberField_mbu92nd0",totalCost.get());//发货金额合计
|
|
|
+
|
|
|
//精准匹配
|
|
|
List<Map> jsonString = new ArrayList<>();
|
|
|
jsonString.add(UtilMap.map("key, value, type, operator, componentName", "textField_m18nvp87",getString(saleout2.get("code")),"TEXT","eq","TextField"));
|
|
|
@@ -882,14 +1145,14 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
flag = true;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
- log.error("发货单:{} 同步失败 失败原因:{}",getString(saleout2.get("code")) , e.getMessage());
|
|
|
+ log.error("出库单:{} 同步失败 失败原因:{}",getString(saleout2.get("code")) , e.getMessage());
|
|
|
errorCodes.add(id);
|
|
|
flag = true;
|
|
|
}
|
|
|
}
|
|
|
if (i>5){
|
|
|
errorCodes.add(id);
|
|
|
- log.error("发货单:{} 同步失败 失败原因:{}",getString(saleout2.get("code")) , "重试次数过多");
|
|
|
+ log.error("出库单:{} 同步失败 失败原因:{}",getString(saleout2.get("code")) , "重试次数过多");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -924,6 +1187,70 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
return McR.success();
|
|
|
}
|
|
|
|
|
|
+ public String getInventoryPrice(String factory,String customerCode,String dateStr,String inventoryCode){
|
|
|
+ String price = "0";
|
|
|
+ List<Map> searchCondition = new ArrayList<>();
|
|
|
+ searchCondition.add(UtilMap.map("key, value, type, operator, componentName","selectField_mc36onxf",factory,"TEXT","eq","TextField"));//工厂
|
|
|
+ searchCondition.add(UtilMap.map("key, value, type, operator, componentName","selectField_mc36onxg",customerCode,"TEXT","eq","TextField"));//客户码
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+
|
|
|
+ // 解析日期字符串为 LocalDate
|
|
|
+ LocalDate date = LocalDate.parse(dateStr, formatter);
|
|
|
+
|
|
|
+ // 获取当天的起始时间(00:00:00)
|
|
|
+ LocalDateTime startOfDay = date.atStartOfDay();
|
|
|
+ // 获取当天的结束时间(23:59:59)
|
|
|
+ LocalDateTime endOfDay = date.atTime(23, 59, 59);
|
|
|
+
|
|
|
+ // 转换为时间戳(假设使用系统默认时区)
|
|
|
+ ZoneId zoneId = ZoneId.systemDefault();
|
|
|
+ ZonedDateTime startZonedDateTime = startOfDay.atZone(zoneId);
|
|
|
+ ZonedDateTime endZonedDateTime = endOfDay.atZone(zoneId);
|
|
|
+
|
|
|
+ long startTimestamp = startZonedDateTime.toInstant().toEpochMilli();
|
|
|
+ long endTimestamp = endZonedDateTime.toInstant().toEpochMilli();
|
|
|
+
|
|
|
+ searchCondition.add(UtilMap.map("key, value, type, operator, componentName","dateField_mc36onxh",Arrays.asList(startTimestamp,endTimestamp),"DOUBLE","between","DateField"));//出库时间
|
|
|
+ searchCondition.add(UtilMap.map("key, value, type, operator, componentName","textField_mc36onxm",inventoryCode,"TEXT","eq","TextField"));//存货编码
|
|
|
+
|
|
|
+ List<Map> priceData = (List<Map>) ydClient.queryData(YDParam.builder()
|
|
|
+ .formUuid("FORM-934F1DF0B6C34535B81102F0CEFB6C1FR55N")
|
|
|
+ .searchCondition(JSONObject.toJSONString(searchCondition))
|
|
|
+ .pageSize(1)
|
|
|
+ .build(), YDConf.FORM_QUERY.retrieve_list).getData();
|
|
|
+
|
|
|
+ if (priceData.size() == 1){
|
|
|
+ price = getString(((Map)priceData.get(0).get("formData")).get("numberField_mc36onxj"));
|
|
|
+ }
|
|
|
+
|
|
|
+ return price;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getInventoryName(String inventoryCode,int dsSequence,Map<String,String> inventory){
|
|
|
+ if (inventory.containsKey(inventoryCode)){
|
|
|
+ return inventory.get(inventoryCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> param3 = new HashMap<>();
|
|
|
+ param3.put("from_account", fromAccount);
|
|
|
+ param3.put("to_account", fromAccount);
|
|
|
+ param3.put("app_key", u8AppKey);
|
|
|
+ param3.put("token", getU8Token());
|
|
|
+ param3.put("id", inventoryCode);
|
|
|
+ param3.put("ds_sequence", dsSequence);
|
|
|
+
|
|
|
+ Map<String,Object> map3 = get("https://api.yonyouup.com/api/inventory/get", param3, null);
|
|
|
+
|
|
|
+ Map inventoryInfo = (Map) map3.get("inventory");
|
|
|
+
|
|
|
+ String inventoryName = getString(inventoryInfo.get("name"));
|
|
|
+
|
|
|
+ inventory.put(inventoryCode,inventoryName);
|
|
|
+
|
|
|
+ return inventoryName;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public McR testInnerTable() {
|
|
|
MDC.put("MDC_KEY_PID","1019");
|
|
|
@@ -1689,4 +2016,32 @@ public class KabeiyiServiceImpl implements KabeiyiService {
|
|
|
return accessToken;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getWeekRange(String dateStr) {
|
|
|
+ //获取所属周(每周六-下周五)
|
|
|
+ DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate date = LocalDate.parse(dateStr, inputFormatter);
|
|
|
+
|
|
|
+ LocalDate startOfWeek;
|
|
|
+
|
|
|
+ // 获取该周的周六(开始日期)
|
|
|
+ startOfWeek = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.SATURDAY));
|
|
|
+
|
|
|
+ // 获取该周的周五(结束日期)
|
|
|
+ LocalDate endOfWeek = startOfWeek.plusDays(6);
|
|
|
+
|
|
|
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("MM.dd");
|
|
|
+
|
|
|
+ return startOfWeek.format(outputFormatter) + "-" + endOfWeek.format(outputFormatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isNumber(String str) {
|
|
|
+ try {
|
|
|
+ Double.parseDouble(str);
|
|
|
+ return true;
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|