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.task.AbstractHandler;
|
import com.zy.asrs.task.core.ReturnT;
|
import com.zy.erp.kingdee.entity.param.InFormIdParam;
|
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.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.HashMap;
|
|
@Service
|
@Slf4j
|
public class InboundOrderHandler extends AbstractHandler<String> {
|
@Value("${erp.address.URL}")
|
//端口
|
private String URL;
|
|
@Value("${erp.address.inaddress}")
|
//单据,商品档案地址
|
private String inaddress;
|
|
@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;
|
|
@Transactional
|
public synchronized ReturnT<String> start() {
|
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
//登录金蝶
|
ReturnT<String> start = loginAuthenticationHandler.start();
|
for(KingDeeUtilType kingDeeUtilType : KingDeeUtilType.values()) {
|
InFormIdParam inFormIdParam = new InFormIdParam();
|
DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", kingDeeUtilType.desc));
|
inFormIdParam.setFormId(kingDeeUtilType.formId);
|
inFormIdParam.setLimit(100);
|
inFormIdParam.setStartRow("0");
|
Date time=new Date();
|
String FDocumentStatus=null;
|
|
//条件和需要获得的结果拼接
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("FormId", inFormIdParam.getFormId());
|
jsonObject.put("Limit", inFormIdParam.getLimit());
|
jsonObject.put("StartRow", inFormIdParam.getStartRow());
|
//物料档案查询
|
if(inFormIdParam.getFormId().equals("BD_MATERIAL")){
|
Tag tag = tagService.selectById(20);
|
//最新时间
|
time=tag.getCreateTime();
|
//物料状态 FUseOrgId .FNumber
|
FDocumentStatus="C";
|
jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(time)+"' and FDocumentStatus='"+FDocumentStatus+"' and FUseOrgId .FNumber='201'");
|
jsonObject.put("FieldKeys", "FName,FNumber,FCreateDate,FSpecification,FDocumentStatus");
|
// FName : 物料名称 ;
|
// FNumber :物料编号;
|
// FCreateDate :物料创建时间;
|
// FSpecification :物料规格;
|
// FDocumentStatus :物料状态
|
}else{
|
//获取最新时间
|
//单据状态
|
FDocumentStatus="B";
|
jsonObject.put("FilterString", "FCreateDate>'"+sdf.format(docType.getCreateTime())+"' and FStockId.Fname='立库'"+" and FDocumentStatus='"+FDocumentStatus+"'");
|
jsonObject.put("FieldKeys", "FBillNo,FCreateDate,FMaterialId.FNumber,FMaterialId.FName,FMaterialId.FSpecification,"+kingDeeUtilType.anfme+",FDocumentStatus");
|
// FBillNo :单据编号;
|
// FCreateDate :单据创建时间;
|
// FMaterialId.FNumber : 物料编码;
|
// FMaterialName :物料名称;
|
// FMaterialId.FSpecification:物料规格
|
// anfme : 物料数量
|
// FDocumentStatus :单据状态;
|
|
}
|
JSONObject jsonObject1 = new JSONObject();
|
jsonObject1.put("data", jsonObject);
|
String add = jsonObject1.toJSONString();
|
//上报
|
String response = "";
|
boolean success = false;
|
try {
|
//获取Cookie值
|
HashMap<String, Object> headers = new HashMap<>();
|
headers.put("Cookie", start.getContent());
|
response = new HttpHandler.Builder()
|
.setHeaders(headers)
|
.setUri(URL)
|
.setPath(inaddress)
|
.setJson(add)
|
.build()
|
.doPost();
|
JSONArray data = JSON.parseArray(response);
|
if(data.size()<=0) continue;
|
if (data.getJSONArray(0).get(0).toString().length()>=20) continue;
|
if (kingDeeUtilType.formId.equals("BD_MATERIAL")) {//物料档案
|
for (int j = 0; j < data.size(); j++) {
|
JSONArray jsonArray = data.getJSONArray(j);
|
//生成商品档案
|
//商品编号
|
Mat mat = matService.selectByMatnr(jsonArray.get(1).toString());
|
if (mat == null) {
|
mat = new Mat();
|
Tag tag = new Tag();
|
mat.setMatnr(jsonArray.get(1).toString());
|
mat.setMaktx(jsonArray.get(0).toString());
|
mat.setSpecs(jsonArray.get(3).toString());//规格
|
mat.setTagId(20L);
|
//对美国时间进行转换
|
Date date = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
|
mat.setCreateTime(date);//商品创建时间
|
mat.setUpdateTime(new Date());
|
mat.setStatus(1);
|
//最新抓取商品时间
|
tag.setCreateTime(date);
|
tagService.update(tag, new EntityWrapper<Tag>().eq("id", 20));
|
if (!matService.insert(mat)) {
|
throw new CoolException("服务器内部错误,请联系管理员");
|
} else {
|
log.info("同步新物料[商品编号:{}]", mat.getMatnr());
|
}
|
}
|
}
|
} else {
|
for (int j = 0; j < data.size(); j++) {
|
JSONArray jsonArray = data.getJSONArray(j);
|
Order order = orderService.selectByNo(jsonArray.get(0).toString());
|
if (Cools.isEmpty(order)) {
|
Date now = new Date();
|
// 单据主档
|
order = new Order(
|
String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空]
|
jsonArray.get(0).toString(), // 订单编号
|
DateUtils.convert(now), // 单据日期
|
docType.getDocId(), // 单据类型
|
null, // 项目编号
|
null, //
|
null, // 调拨项目编号
|
null, // 初始票据号
|
null, // 票据号
|
null, // 客户编号
|
null, // 客户
|
null, // 联系方式
|
null, // 操作人员
|
null, // 合计金额
|
null, // 优惠率
|
null, // 优惠金额
|
null, // 销售或采购费用合计
|
null, // 实付金额
|
null, // 付款类型
|
null, // 业务员
|
null, // 结算天数
|
null, // 邮费支付类型
|
null, // 邮费
|
null, // 付款时间
|
null, // 发货时间
|
null, // 物流名称
|
null, // 物流单号
|
1L, // 订单状态
|
1, // 状态
|
9527L, // 添加人员
|
now, // 添加时间
|
9527L, // 修改人员
|
now, // 修改时间
|
null // 备注
|
);
|
|
//最新抓取时间
|
Date jsonDate = KingDeeUtil.KingDeeDate(jsonArray.get(2).toString());
|
docType.setCreateTime(jsonDate);
|
docTypeService.updateById(docType);
|
if (!orderService.insert(order)) {
|
throw new CoolException("生成单据主档失败,请联系管理员");
|
}
|
}
|
//物料编码
|
Mat mat = matService.selectByMatnr(jsonArray.get(2).toString());
|
if (Cools.isEmpty(mat)) {
|
throw new CoolException(jsonArray.get(2).toString() + "编号商品检索失败,请先添加商品");
|
}
|
OrderDetl orderDetl1 = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", jsonArray.get(0).toString()).eq("matnr", jsonArray.get(2).toString()));
|
if (!Cools.isEmpty(orderDetl1)) {
|
continue;
|
}
|
OrderDetl orderDetl = new OrderDetl();
|
orderDetl.sync(mat);
|
orderDetl.setBatch(null);
|
orderDetl.setAnfme(Double.parseDouble(jsonArray.get(5).toString()));
|
orderDetl.setOrderId(order.getId());
|
orderDetl.setOrderNo(order.getOrderNo());
|
orderDetl.setCreateBy(9527L);
|
orderDetl.setCreateTime(new Date());
|
orderDetl.setUpdateBy(9527L);
|
orderDetl.setUpdateTime(new Date());
|
orderDetl.setStatus(1);
|
orderDetl.setQty(0.0D);
|
Date date = KingDeeUtil.KingDeeDate(jsonArray.get(1).toString());
|
//最新抓取时间
|
docType.setCreateTime(date);
|
if (!orderDetlService.insert(orderDetl)) {
|
throw new CoolException("生成单据明细失败,请联系管理员");
|
}
|
}
|
}
|
} catch (Exception e) {
|
log.error("fail", e);
|
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return FAIL.setMsg(e.getMessage());
|
} finally {
|
try {
|
// 保存接口日志
|
apiLogService.save(
|
"轮询数据",
|
URL + inaddress,
|
null,
|
"127.0.0.1",
|
add,
|
response,
|
success
|
);
|
} catch (Exception e) {
|
log.error("", e);
|
}
|
}
|
}
|
return SUCCESS;
|
}
|
|
}
|