package com.zy.asrs.task.kingdee.handler;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.Cools;
|
import com.core.common.DateUtils;
|
import com.core.common.SnowflakeIdWorker;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.service.impl.ErpSecretServiceImpl;
|
import com.zy.asrs.task.AbstractHandler;
|
import com.zy.asrs.task.core.ReturnT;
|
import com.zy.asrs.utils.OrderInAndOutUtil;
|
import com.zy.erp.kingdee.entity.param.MatLoadParam;
|
import com.zy.erp.kingdee.enums.KingDeeUtilType;
|
import com.zy.common.utils.HttpHandler;
|
import com.zy.erp.kingdee.utils.KingDeeUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
|
@Service
|
@Slf4j
|
public class InboundOrderHandler extends AbstractHandler<String> {
|
@Value("${erp.address.URL}")
|
//端口
|
private String URL;
|
|
@Value("${erp.address.mataddress}")
|
//商品档案地址
|
private String matAddress;
|
@Value("${erp.address.orgaddress}")
|
//货主档案地址
|
private String orgAddress;
|
@Value("${erp.address.impurreceivebilladdress}")
|
//收料单查询
|
private String imPurreceiveBillAddress;
|
@Value("${erp.address.impurreceivebilldetl}")
|
//进仓通知单
|
private String imPurreceiveBillDetlAddress;
|
@Value("${erp.address.imSaloutbill}")
|
//销售出库单
|
private String imSaloutbill;
|
@Value("${erp.address.scpSalreturn}")
|
//销售退货单
|
private String scpSalreturn;
|
@Value("${erp.address.scpSalreturnDetl}")
|
//销售退货单
|
private String scpSalreturnDetl;
|
@Value("${erp.address.imMdcMftproorder}")
|
//生产领料单
|
private String imMdcMftproorder;
|
@Value("${erp.address.imMdcMftreturnorder}")
|
//生产退料单
|
private String imMdcMftreturnorder;
|
@Value("${erp.address.imMdcMftfeedorder}")
|
//生产补料单
|
private String imMdcMftfeedorder;
|
@Value("${erp.address.imProductinbill}")
|
//生产进仓单
|
private String imProductinbill;
|
@Value("${erp.address.qcppManuinspec}")
|
//产品检验单
|
private String qcppManuinspec;
|
|
@Autowired
|
private ApiLogService apiLogService;
|
|
@Autowired
|
private LoginAuthenticationHandler loginAuthenticationHandler;
|
|
@Autowired
|
private MatService matService;
|
|
@Autowired
|
private TagService tagService;
|
|
@Autowired
|
private DocTypeService docTypeService;
|
|
@Autowired
|
private OrderService orderService;
|
|
@Autowired
|
private OrderDetlService orderDetlService;
|
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
|
@Autowired
|
private LocOwnerService locOwnerService;
|
@Autowired
|
private LocSuppService locSuppService;
|
@Autowired
|
private ErpSecretServiceImpl erpSecretService;
|
@Value("${erp.login.accountId}")
|
private String accountId;
|
@Value("${erp.login.xAcfwIdentity}")
|
private String xAcfwIdentity;
|
@Transactional
|
public synchronized ReturnT<String> start() {
|
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
|
//读取token
|
ErpSecret erpSecret = erpSecretService.selectOne(new EntityWrapper<ErpSecret>().eq("account_id", accountId));
|
|
|
for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
|
// MatLoadParam matLoadParam = new MatLoadParam();
|
DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
|
if (Cools.isEmpty(docType) && !kingDeeUtilType.formId.equals("BD_MATERIAL")){
|
docType = docTypeService.selectOrAdd(kingDeeUtilType.desc, kingDeeUtilType.pakIn.equals(1));
|
}
|
String FDocumentStatus=null;
|
if (Arrays.asList("INR").contains(kingDeeUtilType.formId)) {
|
continue;
|
}
|
//条件和需要获得的结果拼接
|
JSONObject jsonObject = new JSONObject();
|
String path = null;
|
Date now = new Date();
|
String latestUpdateTime = sdf1.format(docType.getUpdateTime());
|
switch (kingDeeUtilType.formId) {
|
case "BD_MATERIAL": //物料同步
|
jsonObject.put("id", null);//id
|
jsonObject.put("number", null);//编码
|
jsonObject.put("createorg_number", null);//创建组织
|
jsonObject.put("start_createtime", "2025-01-01 00:00:00");//创建起始
|
jsonObject.put("end_createtime", sdf1.format(now));//创建截止
|
jsonObject.put("start_modifytime", latestUpdateTime);//更新起始
|
jsonObject.put("end_modifytime", sdf1.format(now));//更新截止
|
jsonObject.put("start_approvedate", "2025-01-01");//审核起始
|
jsonObject.put("end_approvedate", sdf2.format(now));//审核截止
|
jsonObject.put("status", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
path = matAddress;
|
break;
|
case "BD_RRGANIZATION": //供应商同步
|
jsonObject.put("start_createtime", "2025-01-01 00:00:00");//id
|
jsonObject.put("end_createtime", sdf1.format(now));
|
jsonObject.put("id", null);
|
jsonObject.put("number", null);
|
jsonObject.put("createorg_number", null);
|
jsonObject.put("status", Arrays.asList("B", "C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
path = orgAddress;
|
break;
|
case "PUR_RECEIVEBIll": //已审核收料单查询
|
jsonObject.put("start_biztime", "2025-01-01 00:00:00");//业务起始日期
|
jsonObject.put("end_biztime", sdf1.format(now));//业务结束日期
|
jsonObject.put("billno", null);
|
jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
|
jsonObject.put("end_auditdate", sdf1.format(now));
|
jsonObject.put("org_number", null);
|
jsonObject.put("supplier_number", null);
|
path = imPurreceiveBillAddress;
|
break;
|
case "SAL_OUTSTOCK"://销售出库单查询
|
path = imSaloutbill;
|
jsonObject.put("modify_starttime", latestUpdateTime);//业务起始日期
|
jsonObject.put("billstatus", "B");//单据状态
|
jsonObject.put("modify_endtime", sdf1.format(now));//业务起始日期
|
break;
|
case "SAL_RETURNSTOCK"://销售退货
|
path = scpSalreturn;
|
jsonObject.put("start_modifytime", "2025-11-25 00:00:00");//业务起始日期
|
jsonObject.put("billstatus", "B");//单据状态
|
jsonObject.put("end_starttime", sdf1.format(now));//业务起始日期
|
break;
|
case "PRD_PickMtrl"://生产领料单
|
path = imMdcMftproorder;
|
// jsonObject.put("start_modifytime", "2025-11-25 00:00:00");
|
// jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
|
jsonObject.put("start_createtime", "2025-11-25 00:00:00");
|
jsonObject.put("end_createtime", sdf1.format(now));
|
// jsonObject.put("end_auditdate", sdf1.format(now));
|
// jsonObject.put("end_modifytime", sdf1.format(now));
|
jsonObject.put("billno", null);
|
jsonObject.put("billstatus", Arrays.asList("B","C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("org_number", null);
|
jsonObject.put("id", null);
|
break;
|
case "PRD_ReturnMtrl"://生产退料单
|
path = imMdcMftreturnorder;
|
jsonObject.put("id", null);
|
jsonObject.put("billno", null);
|
jsonObject.put("org_number", null);
|
jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("start_createtime", "2025-11-25 00:00:00");
|
jsonObject.put("end_createtime", sdf1.format(now));
|
// jsonObject.put("start_modifytime", "2025-11-25 00:00:00");
|
// jsonObject.put("end_modifytime", sdf1.format(now));
|
// jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
|
// jsonObject.put("end_auditdate", sdf1.format(now));
|
break;
|
case "PRD_FeedMtrl"://生产补料单
|
path = imMdcMftfeedorder;
|
jsonObject.put("id", null);
|
jsonObject.put("billno", null);
|
jsonObject.put("org_number", null);
|
jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("start_createtime", "2025-11-25 00:00:00");
|
jsonObject.put("end_createtime", sdf1.format(now));
|
// jsonObject.put("start_modifytime", "2025-11-25 00:00:00");
|
// jsonObject.put("end_modifytime", sdf1.format(now));
|
// jsonObject.put("start_auditdate", "2025-11-25 00:00:00");
|
// jsonObject.put("end_auditdate", sdf1.format(now));
|
break;
|
case "PRD_MORPT"://生产进仓单
|
path = imProductinbill;
|
jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("modifytime_start", "2025-11-25 00:00:00");
|
jsonObject.put("modifytime_end", sdf1.format(now));
|
break;
|
case "STK_InspectionForm"://产品检验
|
path = qcppManuinspec;
|
jsonObject.put("billstatus", Arrays.asList("C"));//数据状态 [A:暂存, B:已提交, C:已审核]
|
jsonObject.put("auditdate_start", "2025-11-25 00:00:00");
|
jsonObject.put("auditdate_end", sdf1.format(now));
|
break;
|
}
|
if(path == null){
|
continue;
|
}
|
JSONObject jsonObject1 = new JSONObject();
|
jsonObject1.put("data", jsonObject);
|
jsonObject1.put("pageSize", 20);
|
jsonObject1.put("pageNo", 1);
|
String add = jsonObject1.toJSONString();
|
//上报
|
String response = "";
|
boolean success = false;
|
if(path == null){
|
continue;
|
}
|
try {
|
//获取Cookie值
|
HashMap<String, Object> headers = new HashMap<>();
|
headers.put("accesstoken", erpSecret.getAccessToken());
|
headers.put("x-acgw-identity", xAcfwIdentity); // 自定义请求头
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
JSONObject jsonResponse = JSON.parseObject(response);
|
if(jsonResponse.getString("errorCode").equals("401")){
|
log.error("检索失败错误信息:{}", jsonResponse.getString("message"));
|
loginAuthenticationHandler.start();
|
continue;
|
}
|
JSONArray data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
if(data.size()<=0) continue;
|
//商品档案同步
|
if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {
|
Tag tag = tagService.selectByName("全部", 1);
|
// 处理分页:根据返回的totalCount和pageSize计算页数
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
// 重新发起请求以获取该页的数据
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date modifyTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
|
String matnr = jsonObjectNew.get("number").toString();
|
String name = jsonObjectNew.get("name").toString();
|
String createTime = jsonObjectNew.get("createtime").toString();
|
Double grossweight = jsonObjectNew.get("grossweight") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield6").toString()).doubleValue() : 0.0;
|
Double height = jsonObjectNew.get("height") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield9").toString()).doubleValue() : 0.0;
|
Double width = jsonObjectNew.get("width") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield8").toString()).doubleValue() : 0.0;
|
Double length = jsonObjectNew.get("length") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield7").toString()).doubleValue() : 0.0;
|
Double netweight = jsonObjectNew.get("netweight") != null ? new BigDecimal(jsonObjectNew.get("eap7_decimalfield").toString()).doubleValue() : 0.0;
|
// 生成商品档案
|
Double height1 = height*10;
|
Double width1 = width*10;
|
Double length1 = length*10;
|
Mat mat = matService.selectByMatnr(matnr);
|
if (mat == null) {
|
mat = new Mat();
|
mat.setMatnr(matnr);
|
mat.setMaktx(name);
|
mat.setTagId(tag.getId());
|
mat.setWeight(grossweight);//净重
|
mat.setUnits(netweight);//毛重
|
mat.setManLength(length1);
|
mat.setHeight(height1);
|
mat.setWidth(width1);
|
mat.setCreateTime(sdf1.parse(createTime));
|
mat.setUpdateTime(modifyTime);
|
mat.setStatus(1);
|
if (!matService.insert(mat)) {
|
callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料出错!" + mat, false);
|
log.info("同步新物料出错!参数:[{}]、[{}]", mat, jsonObjectNew);
|
} else {
|
callApiLogSaveMat(mat, kingDeeUtilType, "同步新物料成功!", true);
|
success = true;
|
}
|
} else {
|
boolean isUpdated = false;
|
if (mat.getUpdateTime().compareTo(modifyTime) != 0) {
|
// 更新字段
|
if (!mat.getMaktx().equals(name)) mat.setMaktx(name);
|
if (mat.getWeight().compareTo(grossweight) != 0) mat.setWeight(grossweight);
|
if (mat.getManLength().compareTo(length) != 0) mat.setManLength(length1);
|
if (mat.getHeight().compareTo(height) != 0) mat.setHeight(height1);
|
if (mat.getWidth().compareTo(width) != 0) mat.setWidth(width1);
|
if (mat.getCreateTime().compareTo(sdf1.parse(createTime)) != 0)
|
mat.setCreateTime(sdf1.parse(createTime));
|
mat.setUpdateTime(modifyTime);
|
isUpdated = true;
|
}
|
// 执行更新操作
|
if (isUpdated) {
|
if (!matService.updateById(mat)) {
|
callApiLogSaveMat(mat, kingDeeUtilType, "更新物料出错!" + mat, false);
|
log.info("更新物料[商品编号:{}], 更新失败!", mat.getMatnr());
|
} else {
|
callApiLogSaveMat(mat, kingDeeUtilType, "更新物料成功!", true);
|
success = true;
|
log.info("更新物料[商品编号:{}]", mat.getMatnr());
|
}
|
}
|
}
|
}
|
}
|
if(success){
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
}
|
//供应商
|
else if(kingDeeUtilType.formId.equals("BD_RRGANIZATION")){//供应商同步
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
// 重新发起请求以获取该页的数据
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date updateTime = sdf1.parse(jsonObjectNew.get("modifytime").toString());
|
String ownerUuid = jsonObjectNew.get("number").toString();
|
String owner = jsonObjectNew.get("name").toString();
|
Date createTime = sdf1.parse(jsonObjectNew.get("createtime").toString());
|
// 生成商品档案
|
LocSupp locSupp = locSuppService.selectByUuid(ownerUuid);
|
if (locSupp == null) {
|
locSupp = new LocSupp();
|
locSupp.setOwner(owner);
|
locSupp.setOwnerUuid(ownerUuid);
|
locSupp.setCreateTime(createTime);
|
locSupp.setUpdateTime(updateTime);
|
locSupp.setStatus(1);
|
if (!locSuppService.insert(locSupp)) {
|
callApiLogSaveSupp(locSupp, kingDeeUtilType, "同步新供应商出错!" + locSupp, false);
|
log.info("同步新供应商出错!参数:[{}]、[{}]", locSupp, jsonObjectNew);
|
} else {
|
callApiLogSaveSupp(locSupp, kingDeeUtilType, "同步新供应商成功!", true);
|
}
|
} else {
|
boolean isUpdated = false;
|
if (locSupp.getUpdateTime().compareTo(updateTime) != 0) {
|
// 更新字段
|
if (!locSupp.getOwner().equals(owner)) locSupp.setOwner(owner);
|
if (!locSupp.getOwnerUuid().equals(ownerUuid)) locSupp.setOwnerUuid(ownerUuid);
|
|
if (locSupp.getCreateTime().compareTo(createTime) != 0)
|
locSupp.setCreateTime(createTime);
|
locSupp.setUpdateTime(updateTime);
|
isUpdated = true;
|
}
|
// 执行更新操作
|
if (isUpdated) {
|
if (!locSuppService.updateById(locSupp)) {
|
callApiLogSaveSupp(locSupp, kingDeeUtilType, "更新供应商出错!" + locSupp, false);
|
log.info("更新供应商[供应商编号:{}], 更新失败!", locSupp.getOwnerUuid());
|
} else {
|
callApiLogSaveSupp(locSupp, kingDeeUtilType, "更新供应商成功!", true);
|
log.info("更新供应商[供应商编号:{}]", locSupp.getOwnerUuid());
|
}
|
}
|
}
|
}
|
}
|
}
|
//收料单
|
else if(kingDeeUtilType.formId.equals("PUR_RECEIVEBIll")){
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
// 重新发起请求以获取该页的数据
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.get("createtime").toString());
|
String billNo = jsonObjectNew.get("billno").toString();//单据编号
|
String owner = jsonObjectNew.get("org_name").toString();//货主名称
|
String ownerUuid = jsonObjectNew.get("org_number").toString();//erp货主编号
|
String orderId = jsonObjectNew.get("id").toString();
|
JSONObject detailParam = new JSONObject();
|
JSONObject dataObj = new JSONObject();
|
dataObj.put("billno", billNo);
|
detailParam.put("pageNo", 1);
|
detailParam.put("pageSize", 100);
|
detailParam.put("data", dataObj);
|
boolean hasNext = true;
|
while (hasNext) {
|
String reqJson = detailParam.toJSONString();
|
String detailResp = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(imPurreceiveBillDetlAddress)
|
.setJson(reqJson)
|
.build()
|
.doPost();
|
JSONObject detailJson = JSON.parseObject(detailResp);
|
JSONObject detData = detailJson.getJSONObject("data");
|
if(detData == null){
|
continue;
|
}
|
JSONArray rows = detData.getJSONArray("rows");
|
// ====== 处理明细 ======
|
for (int i = 0; i < rows.size(); i++) {
|
JSONObject jsonObjectNew2 = rows.getJSONObject(i);
|
Order order = orderService.selectByNo(billNo);//检索单据
|
LocOwner locOwner = null;
|
if (ownerUuid != null) {
|
locOwner = locOwnerService.selectByUuid(ownerUuid);
|
if (locOwner == null) {
|
callApiLogSaveOwner(locOwner,kingDeeUtilType, "货主检索失败,请先添加对应货主编号:"+ownerUuid+"名称"+owner, false);continue;
|
}
|
} else{
|
callApiLogSaveOwner(locOwner,kingDeeUtilType, "货主检索失败,未查询到货主编号!", false);continue;
|
}
|
if (Cools.isEmpty(order)) {
|
// 单据主档
|
order = new Order(
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if( orderService.insert(order)){
|
callApiLogSaveOrder(order, kingDeeUtilType, "创建入库单成功!单号:" + billNo, true);
|
}
|
}
|
String suppCode = jsonObjectNew2.getString("supplier_number"); //供应商
|
|
JSONArray billEntryArray = jsonObjectNew2.getJSONArray("billentry");
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("eap7_decimalfield");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double Totalvolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String
|
if(anfme == 0){
|
callApiLogSaveOrder(order,kingDeeUtilType, "单据数量异常"+matnr, false);
|
continue;
|
}
|
//物料编码
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
|
continue;
|
}
|
Order order1 = orderService.selectByNo( billNo);
|
List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId());
|
boolean sign = false;
|
for (OrderDetl orderDetl : orderDetls){
|
if (orderDetl.getMatnr().equals(matnr)){
|
sign = true;
|
break;
|
}
|
}
|
if (sign){
|
continue;
|
}
|
LocSupp locSupp = null;
|
String supp =null;
|
locSupp = locSuppService.selectByUuid(suppCode);
|
if(locSupp != null){supp = locSupp.getOwner();}
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);//ERP明细id
|
orderDetl.setLineNumber(seq);//分录行号
|
orderDetl.setAnfme(anfme);//总箱数
|
orderDetl.setErpAnfme(anfme);//erp数据
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());//表头单据
|
orderDetl.setSupp(supp);//供应商名称(货源)
|
orderDetl.setSuppCode(suppCode);//供应商编码
|
orderDetl.setSku(matnr);//内部SKU
|
orderDetl.setStandby1(s1);//客户PO
|
orderDetl.setStandby2(s2);//条码UPC
|
orderDetl.setStandby3(s3);//客户SKU
|
orderDetl.setBoxType1(owner); //货主名称
|
orderDetl.setBoxType2(ownerUuid);//货主编号(erp组织)
|
orderDetl.setBoxType3(pOrderNo);//采购单号
|
orderDetl.setMemo(memo);//英文备注
|
orderDetl.setVolume(Totalvolume);//总体积
|
orderDetl.setSafeQty(totalNumItems);//总件数
|
orderDetl.setManu(warehouse);//仓库编码
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
// 是否还有下一页
|
boolean lastPage = detData.getBoolean("lastPage");
|
if (lastPage) {
|
hasNext = false;
|
} else {
|
// 下一页
|
int currPage = detData.getIntValue("pageNo");
|
detailParam.put("pageNo", currPage + 1);
|
}
|
}
|
}
|
docTypeService.updateById(docType);
|
}
|
}
|
//销售出库
|
else if(kingDeeUtilType.formId.equals("SAL_OUTSTOCK")){
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
|
String billNo = jsonObjectNew.getString("billno");
|
String owner = jsonObjectNew.getString("org_name");
|
String ownerUuid = jsonObjectNew.getString("org_number");
|
String orderId = jsonObjectNew.getString("id");
|
// ========= 货主校验 =========
|
LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
|
// if (locOwner == null) {
|
// callApiLogSaveOwner(null, kingDeeUtilType,
|
// "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
|
// continue;
|
// }
|
|
// ========= 创建订单主表 =========
|
Order order = orderService.selectByNo(billNo);
|
if (Cools.isEmpty(order)) {
|
order = new Order(
|
// 单据主档
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if (orderService.insert(order)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"创建销售出库单成功!单号:" + billNo, true);
|
}
|
}
|
|
// ========= 直接从主接口取明细 billentry =========
|
JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
|
if (billEntryArray == null || billEntryArray.isEmpty()) {
|
continue;
|
}
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("eap7_decimalfield");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String suppCode = entry.getString("supplier_number");
|
String suppCode = null;
|
if (anfme == null || anfme == 0) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"单据数量异常:" + matnr, false);
|
continue;
|
}
|
// ========= 物料校验 =========
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"商品不存在:" + matnr, false);
|
continue;
|
}
|
// ========= 明细去重 =========
|
List<OrderDetl> orderDetls =
|
orderDetlService.selectByOrderId(order.getId());
|
|
boolean exists = orderDetls.stream()
|
.anyMatch(o -> o.getMatnr().equals(matnr));
|
if (exists) continue;
|
// // ========= 供应商 =========
|
String supp = null;
|
// LocSupp locSupp = locSuppService.selectByUuid(suppCode);
|
// if (locSupp != null) {
|
// supp = locSupp.getOwner();
|
// }
|
// ========= 保存明细 =========
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);
|
orderDetl.setLineNumber(seq);
|
orderDetl.setAnfme(anfme);
|
orderDetl.setErpAnfme(anfme);
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setSupp(supp);
|
orderDetl.setSuppCode(suppCode);
|
orderDetl.setSku(matnr);
|
orderDetl.setStandby1(s1);
|
orderDetl.setStandby2(s2);
|
orderDetl.setStandby3(s3);
|
orderDetl.setBoxType1(owner);
|
orderDetl.setBoxType2(ownerUuid);
|
orderDetl.setBoxType3(pOrderNo);
|
orderDetl.setMemo(memo);
|
orderDetl.setVolume(totalVolume);
|
orderDetl.setSafeQty(totalNumItems);
|
orderDetl.setManu(warehouse);
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
|
}
|
//销售退货
|
else if(kingDeeUtilType.formId.equals("SAL_RETURNSTOCK")){
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
// 重新发起请求以获取该页的数据
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.get("createtime").toString());
|
String billNo = jsonObjectNew.get("billno").toString();//单据编号
|
String orderId = jsonObjectNew.get("id").toString();
|
JSONObject detailParam = new JSONObject();
|
JSONObject dataObj = new JSONObject();
|
dataObj.put("billno", billNo);
|
detailParam.put("pageNo", 1);
|
detailParam.put("pageSize", 100);
|
detailParam.put("data", dataObj);
|
boolean hasNext = true;
|
while (hasNext) {
|
String reqJson = detailParam.toJSONString();
|
String detailResp = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(scpSalreturnDetl)
|
.setJson(reqJson)
|
.build()
|
.doPost();
|
JSONObject detailJson = JSON.parseObject(detailResp);
|
JSONObject detData = detailJson.getJSONObject("data");
|
JSONArray rows = detData.getJSONArray("rows");
|
// ====== 处理明细 ======
|
for (int i = 0; i < rows.size(); i++) {
|
JSONObject jsonObjectNew2 = rows.getJSONObject(i);
|
Order order = orderService.selectByNo(billNo);//检索单据
|
LocOwner locOwner = null;
|
if (Cools.isEmpty(order)) {
|
// 单据主档
|
order = new Order(
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
null, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if( orderService.insert(order)){
|
callApiLogSaveOrder(order, kingDeeUtilType, "创建销售退货单成功!单号:" + billNo, true);
|
}
|
}
|
// String suppCode = jsonObjectNew2.getString("supplier_number"); //供应商
|
String suppCode = null; //供应商
|
JSONArray billEntryArray = jsonObjectNew2.getJSONArray("materialentry");
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("qty");//箱数
|
Double totalNumItems = 0.0;
|
Double Totalvolume = 0.0;//总体积
|
String warehouse = null;//仓库编码
|
String pOrderNo = "1";//采购单号
|
String s3 = "1";//客户sku(客户编号)
|
String s2 = "1"; //条码UPC
|
String memo ="1"; //备注(英文描述)
|
String s1 = "1"; //客户PO
|
// Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
// Double Totalvolume = entry.getDouble("eap7_decimalfield2");//总体积
|
// String warehouse = entry.getString("warehouse_number");//仓库编码
|
// String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
// String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
// String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
// String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
// String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String
|
if(anfme == 0){
|
callApiLogSaveOrder(order,kingDeeUtilType, "单据数量异常"+matnr, false);
|
continue;
|
}
|
//物料编码
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order,kingDeeUtilType, "编号商品检索失败,请先添加商品"+matnr, false);
|
continue;
|
}
|
Order order1 = orderService.selectByNo( billNo);
|
List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order1.getId());
|
boolean sign = false;
|
for (OrderDetl orderDetl : orderDetls){
|
if (orderDetl.getMatnr().equals(matnr)){
|
sign = true;
|
break;
|
}
|
}
|
if (sign){
|
continue;
|
}
|
LocSupp locSupp = null;
|
String supp =null;
|
// locSupp = locSuppService.selectByUuid(suppCode);
|
// if(locSupp != null){supp = locSupp.getOwner();}
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);//ERP明细id
|
orderDetl.setLineNumber(seq);//分录行号
|
orderDetl.setAnfme(anfme);//总箱数
|
orderDetl.setErpAnfme(anfme);//erp数据
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());//表头单据
|
orderDetl.setSupp(supp);//供应商名称(货源)
|
orderDetl.setSuppCode(suppCode);//供应商编码
|
orderDetl.setSku(matnr);//内部SKU
|
orderDetl.setStandby1(s1);//客户PO
|
orderDetl.setStandby2(s2);//条码UPC
|
orderDetl.setStandby3(s3);//客户SKU
|
orderDetl.setBoxType1(null); //货主名称
|
orderDetl.setBoxType2(null);//货主编号(erp组织)
|
orderDetl.setBoxType3(pOrderNo);//采购单号
|
orderDetl.setMemo(memo);//英文备注
|
orderDetl.setVolume(Totalvolume);//总体积
|
orderDetl.setSafeQty(totalNumItems);//总件数
|
orderDetl.setManu(warehouse);//仓库编码
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
// 是否还有下一页
|
boolean lastPage = detData.getBoolean("lastPage");
|
if (lastPage) {
|
hasNext = false;
|
} else {
|
// 下一页
|
int currPage = detData.getIntValue("pageNo");
|
detailParam.put("pageNo", currPage + 1);
|
}
|
}
|
}
|
docTypeService.updateById(docType);
|
}
|
}
|
//产品检验单
|
else if(kingDeeUtilType.formId.equals("STK_InspectionForm")){
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
|
String billNo = jsonObjectNew.getString("billno");
|
String owner = jsonObjectNew.getString("org_name");
|
String ownerUuid = jsonObjectNew.getString("org_number");
|
String orderId = jsonObjectNew.getString("id");
|
// ========= 货主校验 =========
|
LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
|
// if (locOwner == null) {
|
// callApiLogSaveOwner(null, kingDeeUtilType,
|
// "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
|
// continue;
|
// }
|
|
// ========= 创建订单主表 =========
|
Order order = orderService.selectByNo(billNo);
|
if (Cools.isEmpty(order)) {
|
order = new Order(
|
// 单据主档
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if (orderService.insert(order)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"创建销售出库单成功!单号:" + billNo, true);
|
}
|
}
|
|
// ========= 直接从主接口取明细 billentry =========
|
JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
|
if (billEntryArray == null || billEntryArray.isEmpty()) {
|
continue;
|
}
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("eap7_decimalfield");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String suppCode = entry.getString("supplier_number");
|
String suppCode = null;
|
if (anfme == null || anfme == 0) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"单据数量异常:" + matnr, false);
|
continue;
|
}
|
// ========= 物料校验 =========
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"商品不存在:" + matnr, false);
|
continue;
|
}
|
// ========= 明细去重 =========
|
List<OrderDetl> orderDetls =
|
orderDetlService.selectByOrderId(order.getId());
|
|
boolean exists = orderDetls.stream()
|
.anyMatch(o -> o.getMatnr().equals(matnr));
|
if (exists) continue;
|
// // ========= 供应商 =========
|
String supp = null;
|
// LocSupp locSupp = locSuppService.selectByUuid(suppCode);
|
// if (locSupp != null) {
|
// supp = locSupp.getOwner();
|
// }
|
// ========= 保存明细 =========
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);
|
orderDetl.setLineNumber(seq);
|
orderDetl.setAnfme(anfme);
|
orderDetl.setErpAnfme(anfme);
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setSupp(supp);
|
orderDetl.setSuppCode(suppCode);
|
orderDetl.setSku(matnr);
|
orderDetl.setStandby1(s1);
|
orderDetl.setStandby2(s2);
|
orderDetl.setStandby3(s3);
|
orderDetl.setBoxType1(owner);
|
orderDetl.setBoxType2(ownerUuid);
|
orderDetl.setBoxType3(pOrderNo);
|
orderDetl.setMemo(memo);
|
orderDetl.setVolume(totalVolume);
|
orderDetl.setSafeQty(totalNumItems);
|
orderDetl.setManu(warehouse);
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
|
}
|
//生产领料,生产补料
|
else if(kingDeeUtilType.formId.equals("PRD_PickMtrl") || kingDeeUtilType.formId.equals("PRD_FeedMtrl")){
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
|
String billNo = jsonObjectNew.getString("billno");
|
String owner = jsonObjectNew.getString("org_name");
|
String ownerUuid = jsonObjectNew.getString("org_number");
|
String orderId = jsonObjectNew.getString("id");
|
// ========= 创建订单主表 =========
|
Order order = orderService.selectByNo(billNo);
|
if (Cools.isEmpty(order)) {
|
order = new Order(
|
// 单据主档
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if (orderService.insert(order)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"创建生产领料出库单成功!单号:" + billNo, true);
|
}
|
}
|
// ========= 直接从主接口取明细 billentry =========
|
JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
|
if (billEntryArray == null || billEntryArray.isEmpty()) {
|
continue;
|
}
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("qty");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String suppCode = entry.getString("supplier_number");
|
String suppCode = null;
|
if (anfme == null || anfme == 0) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"单据数量异常:" + matnr, false);
|
continue;
|
}
|
// ========= 物料校验 =========
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"物料档案不存在:" + matnr, false);
|
continue;
|
}
|
// ========= 明细去重 =========
|
List<OrderDetl> orderDetls =
|
orderDetlService.selectByOrderId(order.getId());
|
|
boolean exists = orderDetls.stream()
|
.anyMatch(o -> o.getMatnr().equals(matnr));
|
if (exists) continue;
|
// // ========= 供应商 =========
|
String supp = null;
|
// LocSupp locSupp = locSuppService.selectByUuid(suppCode);
|
// if (locSupp != null) {
|
// supp = locSupp.getOwner();
|
// }
|
// ========= 保存明细 =========
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);
|
orderDetl.setLineNumber(seq);
|
orderDetl.setAnfme(anfme);
|
orderDetl.setErpAnfme(anfme);
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setSupp(supp);
|
orderDetl.setSuppCode(suppCode);
|
orderDetl.setSku(matnr);
|
orderDetl.setStandby1(s1);
|
orderDetl.setStandby2(s2);
|
orderDetl.setStandby3(s3);
|
orderDetl.setBoxType1(owner);
|
orderDetl.setBoxType2(ownerUuid);
|
orderDetl.setBoxType3(pOrderNo);
|
orderDetl.setMemo(memo);
|
orderDetl.setVolume(totalVolume);
|
orderDetl.setSafeQty(totalNumItems);
|
orderDetl.setManu(warehouse);
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
|
}
|
//生产退料单PRD_ReturnMtrl
|
else if(kingDeeUtilType.formId.equals("PRD_ReturnMtrl") ) {
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
|
String billNo = jsonObjectNew.getString("billno");
|
String owner = jsonObjectNew.getString("org_name");
|
String ownerUuid = jsonObjectNew.getString("org_number");
|
String orderId = jsonObjectNew.getString("id");
|
// ========= 货主校验 =========
|
LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
|
// if (locOwner == null) {
|
// callApiLogSaveOwner(null, kingDeeUtilType,
|
// "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
|
// continue;
|
// }
|
|
// ========= 创建订单主表 =========
|
Order order = orderService.selectByNo(billNo);
|
if (Cools.isEmpty(order)) {
|
order = new Order(
|
// 单据主档
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if (orderService.insert(order)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"创建生产补料单成功!单号:" + billNo, true);
|
}
|
}
|
|
// ========= 直接从主接口取明细 billentry =========
|
JSONArray billEntryArray = jsonObjectNew.getJSONArray("billentry");
|
if (billEntryArray == null || billEntryArray.isEmpty()) {
|
continue;
|
}
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("eap7_decimalfield");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield3");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield5"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String suppCode = entry.getString("supplier_number");
|
String suppCode = null;
|
if (anfme == null || anfme == 0) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"单据数量异常:" + matnr, false);
|
continue;
|
}
|
// ========= 物料校验 =========
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"商品不存在:" + matnr, false);
|
continue;
|
}
|
// ========= 明细去重 =========
|
List<OrderDetl> orderDetls =
|
orderDetlService.selectByOrderId(order.getId());
|
|
boolean exists = orderDetls.stream()
|
.anyMatch(o -> o.getMatnr().equals(matnr));
|
if (exists) continue;
|
// // ========= 供应商 =========
|
String supp = null;
|
// LocSupp locSupp = locSuppService.selectByUuid(suppCode);
|
// if (locSupp != null) {
|
// supp = locSupp.getOwner();
|
// }
|
// ========= 保存明细 =========
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);
|
orderDetl.setLineNumber(seq);
|
orderDetl.setAnfme(anfme);
|
orderDetl.setErpAnfme(anfme);
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setSupp(supp);
|
orderDetl.setSuppCode(suppCode);
|
orderDetl.setSku(matnr);
|
orderDetl.setStandby1(s1);
|
orderDetl.setStandby2(s2);
|
orderDetl.setStandby3(s3);
|
orderDetl.setBoxType1(owner);
|
orderDetl.setBoxType2(ownerUuid);
|
orderDetl.setBoxType3(pOrderNo);
|
orderDetl.setMemo(memo);
|
orderDetl.setVolume(totalVolume);
|
orderDetl.setSafeQty(totalNumItems);
|
orderDetl.setManu(warehouse);
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
|
}
|
//生产汇报单
|
else if(kingDeeUtilType.formId.equals("PRD_MORPT")) {
|
int pageSize = jsonResponse.getJSONObject("data").getIntValue("pageSize");
|
int totalCount = jsonResponse.getJSONObject("data").getIntValue("totalCount");
|
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
|
|
for (int page = 1; page <= totalPages; page++) {
|
jsonObject1.put("pageNo", page);
|
add = jsonObject1.toJSONString();
|
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(path)
|
.setJson(add)
|
.build()
|
.doPost();
|
|
jsonResponse = JSON.parseObject(response);
|
data = jsonResponse.getJSONObject("data").getJSONArray("rows");
|
|
for (int j = 0; j < data.size(); j++) {
|
JSONObject jsonObjectNew = data.getJSONObject(j);
|
Date createTime = sdf1.parse(jsonObjectNew.getString("createtime"));
|
String billNo = jsonObjectNew.getString("billno");
|
String owner = "和得科技";
|
String ownerUuid = "BU-00001";
|
String orderId = jsonObjectNew.getString("id");
|
// ========= 货主校验 =========
|
LocOwner locOwner = locOwnerService.selectByUuid(ownerUuid);
|
// if (locOwner == null) {
|
// callApiLogSaveOwner(null, kingDeeUtilType,
|
// "货主检索失败:" + ownerUuid + " 名称:" + owner, false);
|
// continue;
|
// }
|
|
// ========= 创建订单主表 =========
|
Order order = orderService.selectByNo(billNo);
|
if (Cools.isEmpty(order)) {
|
order = new Order(
|
// 单据主档
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
billNo, // 订单编号
|
createTime.toString(), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
orderId, //收料单id
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 项目id
|
owner, // 货主
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null, // 备注
|
kingDeeUtilType.pakIn !=1?2:1
|
);
|
if (orderService.insert(order)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"创建生产汇报单成功!单号:" + billNo, true);
|
}
|
}
|
|
// ========= 直接从主接口取明细 billentry =========
|
JSONArray billEntryArray = jsonObjectNew.getJSONArray("sumentry");
|
if (billEntryArray == null || billEntryArray.isEmpty()) {
|
continue;
|
}
|
for (int k = 0; k < billEntryArray.size(); k++) {
|
JSONObject entry = billEntryArray.getJSONObject(k);
|
String matnr = entry.getString("material_number"); //物料编码,内部SKU
|
Double anfme = entry.getDouble("completqty");//箱数
|
Double totalNumItems = entry.getDouble("eap7_decimalfield1");//总件数
|
Double totalVolume = entry.getDouble("eap7_decimalfield2");//总体积
|
String warehouse = entry.getString("warehouse_number");//仓库编码
|
String pOrderNo = entry.getString("eap7_textfield");//采购单号
|
String s3 = entry.getString("eap7_textfield4");//客户sku(客户编号)
|
String s2 = entry.getString("eap7_textfield1"); //条码UPC
|
String memo = entry.getString("eap7_textfield6"); //备注(英文描述)
|
String s1 = entry.getString("eap7_textfield7"); //客户PO
|
String detlId = entry.getString("id"); //明细id
|
Long seq = entry.getLong("seq"); //分录行号
|
// String suppCode = entry.getString("supplier_number");
|
String suppCode = null;
|
if (anfme == null || anfme == 0) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"单据数量异常:" + matnr, false);
|
continue;
|
}
|
// ========= 物料校验 =========
|
Mat mat = matService.selectByMatnr(matnr);
|
if (Cools.isEmpty(mat)) {
|
callApiLogSaveOrder(order, kingDeeUtilType,
|
"商品不存在:" + matnr, false);
|
continue;
|
}
|
// ========= 明细去重 =========
|
List<OrderDetl> orderDetls =
|
orderDetlService.selectByOrderId(order.getId());
|
|
boolean exists = orderDetls.stream()
|
.anyMatch(o -> o.getMatnr().equals(matnr));
|
if (exists) continue;
|
// // ========= 供应商 =========
|
String supp = null;
|
// LocSupp locSupp = locSuppService.selectByUuid(suppCode);
|
// if (locSupp != null) {
|
// supp = locSupp.getOwner();
|
// }
|
// ========= 保存明细 =========
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setThreeCode(detlId);
|
orderDetl.setLineNumber(seq);
|
orderDetl.setAnfme(anfme);
|
orderDetl.setErpAnfme(anfme);
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setSupp(supp);
|
orderDetl.setSuppCode(suppCode);
|
orderDetl.setSku(matnr);
|
orderDetl.setStandby1(s1);
|
orderDetl.setStandby2(s2);
|
orderDetl.setStandby3(s3);
|
orderDetl.setBoxType1(owner);
|
orderDetl.setBoxType2(ownerUuid);
|
orderDetl.setBoxType3(pOrderNo);
|
orderDetl.setMemo(memo);
|
orderDetl.setVolume(totalVolume);
|
orderDetl.setSafeQty(totalNumItems);
|
orderDetl.setManu(warehouse);
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
|
orderDetlService.insert(orderDetl);
|
}
|
}
|
docType.setUpdateTime(now);
|
docTypeService.updateById(docType);
|
}
|
|
}
|
|
|
} catch (Exception e) {
|
log.error("fail", e);
|
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return FAIL.setMsg(e.getMessage());
|
} finally {
|
|
}
|
}
|
return SUCCESS;
|
}
|
|
public void callApiLogSaveMat(Mat mat, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
|
apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
|
"物料编号:" + mat.getMatnr() + "、物料名称:" + mat.getMaktx() + "、毛重:" + mat.getWeight()
|
+ "、长:" + mat.getManLength()
|
+ "、宽:" + mat.getWidth()
|
+ "、高:" + mat.getHeight()
|
+ "、状态:" + mat.getStatus$(),
|
response, bool);
|
}
|
|
public void callApiLogSaveSupp(LocSupp locSupp, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
|
apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
|
"供应商编号:" + locSupp.getOwnerUuid() + "、供应商名称:" + locSupp.getOwner(),
|
response, bool);
|
}
|
public void callApiLogSaveOwner(LocOwner locOwner, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
|
apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
|
"货主编号:" + locOwner.getOwnerUuid() + "、货主名称:" + locOwner.getOwner(),
|
response, bool);
|
}
|
|
public void callApiLogSaveOrder(Order order, KingDeeUtilType kingDeeUtilType, String response, Boolean bool) {
|
apiLogService.save("获取"+kingDeeUtilType.desc, kingDeeUtilType.formId, "null", URL,
|
"单据编号:" + order.getOrderNo() + "、状态:" + order.getStatus$(),
|
response, bool);
|
}
|
|
}
|