package com.zy.common.service.erp.task;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.core.common.Cools;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.MatCode;
|
import com.zy.asrs.entity.WaitPakin;
|
import com.zy.asrs.service.MatCodeService;
|
import com.zy.asrs.service.OutStockMainService;
|
import com.zy.asrs.service.OutStockService;
|
import com.zy.asrs.service.WaitPakinService;
|
import com.zy.asrs.task.AbstractHandler;
|
import com.zy.asrs.utils.VersionUtils;
|
import com.zy.common.service.erp.ErpService;
|
import com.zy.common.service.erp.dto.InStockDto;
|
import com.zy.common.service.erp.entity.*;
|
import lombok.Synchronized;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.PostConstruct;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* erp任务控制器
|
* Created by vincent on 2020/11/27
|
*/
|
@Slf4j
|
@Component
|
public class ErpScheduler extends AbstractHandler<Exception> {
|
|
@Autowired
|
private ErpService erpService;
|
@Autowired
|
private MatCodeService matCodeService;
|
@Autowired
|
private WaitPakinService waitPakinService;
|
@Autowired
|
private OutStockMainService outStockMainService;
|
@Autowired
|
private OutStockService outStockService;
|
|
private Map<Integer, M_item> itemMap = new HashMap<>();
|
|
/**
|
* 原材料入库单
|
*/
|
@Scheduled(cron = "0/30 * * * * ? ")
|
@Synchronized
|
// @PostConstruct
|
public void inStockExecute(){
|
List<InStockDto> readyInStock = erpService.getReadyInStock();
|
for (InStockDto dto : readyInStock) {
|
|
//同一单号存在相同物料编码数据,该单号不予处理
|
Number fnumberCount = erpService.QueryFnumberInCount(dto.getInStockBill().getFInterID());
|
if(fnumberCount.intValue() > 1){
|
if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo(),-1)) {
|
log.error("标记原材料入库通知单已读InStockBill为-1失败[FBillNo={},FInterID={}]", dto.getInStockBill().getFBillNo(),dto.getInStockBill().getFInterID());
|
}
|
continue;
|
}
|
|
for (InStockBillEntry entry : dto.getInStockBillEntries()) {
|
MatCode matCode = matCodeService.selectById(entry.getFnumber());
|
if (null != matCode) {
|
// 生成入库通知单
|
WaitPakin waitPakin = new WaitPakin();
|
waitPakin.setMemo("原材料");
|
waitPakin.setStatus("Y"); // 状态
|
waitPakin.setIoStatus("N"); // 入出状态
|
waitPakin.setAppeTime(new Date());
|
waitPakin.setModiTime(new Date());
|
VersionUtils.setWaitPakIn(waitPakin, matCode);
|
waitPakin.setMnemonic(entry.getFOrderBillNo()); // todo:luxiaotao 生产单号
|
waitPakin.setSupplier(dto.getInStockBill().getFBillNo()); // todo:luxiaotao 通知单号
|
// String Fnumber = (Cools.isEmpty(entry.getFSourceBillNo())) ? matCode.getMatNo() : matCode.getMatNo() + "|" + entry.getFSourceBillNo();
|
// waitPakin.setMatnr(Fnumber); //产品代码|生产单号
|
// waitPakin.setBname(matCode.getMatNo());
|
Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
|
.eq("supplier", waitPakin.getSupplier())
|
.eq("matnr", waitPakin.getMatnr());
|
// .isNull("zpallet");
|
WaitPakin one = waitPakinService.selectOne(wrapper);
|
try {
|
if (one == null) {
|
waitPakin.setAnfme(entry.getFAuxQty());
|
if (!waitPakinService.insert(waitPakin)) {
|
log.error("提取原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
} else {
|
log.info("提取原材料入库通知单InStockBillEntry成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
}
|
} else {
|
waitPakin.setAnfme(entry.getFAuxQty());
|
if (!waitPakinService.update(waitPakin, wrapper)) {
|
log.error("更新原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
} else {
|
log.info("更新原材料入库通知单InStockBillEntry成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
}
|
}
|
} catch (Exception e) {
|
log.error("fail", e);
|
e.printStackTrace();
|
System.out.println(JSON.toJSON(waitPakin));
|
}
|
}
|
}
|
if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo(),1)) {
|
log.error("标记原材料入库通知单已读InStockBill失败[FBillNo={}]", dto.getInStockBill().getFBillNo());
|
}
|
}
|
|
}
|
|
|
/**
|
* 成品入库单
|
*/
|
@Scheduled(cron = "0/20 * * * * ? ")
|
@Synchronized
|
// @PostConstruct
|
public void inCPICMOExecute(){
|
List<CPICMO> cpicmos = erpService.getReadyCPICMO();
|
for (CPICMO cpicmo : cpicmos) {
|
|
//同一单号存在相同物料编码数据,该单号不予处理
|
Number fnumberCount = erpService.QueryFnumberCPICMOCount(cpicmo.getFInterID());
|
if(fnumberCount.intValue() > 1){
|
if (!erpService.haveReadCPICMO(cpicmo.getFInterID(),-1)) {
|
log.error("标记成品入库通知单已读CPICMO为-1失败[Fnumber={},FInterID={}]", cpicmo.getFnumber(),cpicmo.getFInterID());
|
}
|
continue;
|
}
|
|
MatCode matCode = matCodeService.selectById(cpicmo.getFnumber());
|
if (null != matCode) {
|
// 生成入库通知单
|
WaitPakin waitPakin = new WaitPakin();
|
waitPakin.setMemo("成品");
|
waitPakin.setStatus("Y"); // 状态
|
waitPakin.setIoStatus("N"); // 入出状态
|
waitPakin.setAppeTime(new Date());
|
waitPakin.setModiTime(new Date());
|
VersionUtils.setWaitPakIn(waitPakin, matCode);
|
waitPakin.setMnemonic(cpicmo.getFSourceBillNo()); // todo:luxiaotao 生产单号
|
waitPakin.setSupplier(cpicmo.getFBillNo()); // todo:luxiaotao 通知单号
|
// String Fnumber = (Cools.isEmpty(cpicmo.getFSourceBillNo())) ? matCode.getMatNo() : matCode.getMatNo() + "|" + cpicmo.getFSourceBillNo();
|
// waitPakin.setMatnr(Fnumber); //产品代码|生产单号
|
// waitPakin.setBname(matCode.getMatNo());
|
Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
|
.eq("supplier", waitPakin.getSupplier())
|
.eq("matnr", waitPakin.getMatnr());
|
// .isNull("zpallet");
|
WaitPakin one = waitPakinService.selectOne(wrapper);
|
if (one == null) {
|
waitPakin.setAnfme(cpicmo.getFAuxQty());
|
if (!waitPakinService.insert(waitPakin)) {
|
log.error("提取成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
} else {
|
log.info("提取成品入库通知单CPICMO成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
}
|
} else {
|
waitPakin.setAnfme(cpicmo.getFAuxQty());
|
if (!waitPakinService.update(waitPakin, wrapper)) {
|
log.error("同步更新成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
} else {
|
log.info("同步更新成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
|
}
|
}
|
if (!erpService.haveReadCPICMO(cpicmo.getFInterID(),1)) {
|
log.error("标记成品入库通知单已读CPICMO失败[FBillNo={}]", cpicmo.getFBillNo());
|
}
|
}
|
}
|
}
|
|
@Scheduled(cron = "0/30 * * * * ? ")
|
@Synchronized
|
public void syncMat(){
|
List<M_item> items = erpService.getItem();
|
for (M_item item : items) {
|
MatCode matCode = matCodeService.selectById(item.getMnumber());
|
if (matCode == null) {
|
matCode = new MatCode();
|
VersionUtils.setMatCode(matCode, item);
|
matCode.setAppeTime(new Date());
|
matCode.setModiTime(new Date());
|
boolean insert = matCodeService.insert(matCode);
|
if (insert) {
|
log.info("=====>> 新增物料成功 : {}", JSON.toJSONString(item));
|
} else {
|
log.error("=====>> 新增物料失败!!! : {}", JSON.toJSONString(item));
|
}
|
} else {
|
VersionUtils.setMatCode(matCode, item);
|
matCode.setModiTime(new Date());
|
boolean b = matCodeService.updateById(matCode);
|
if (b) {
|
log.info("=====>> 更新物料成功 : {}", JSON.toJSONString(item));
|
} else {
|
log.error("=====>> 更新物料失败!!! : {}", JSON.toJSONString(item));
|
}
|
}
|
// 更新完之后删除
|
erpService.deleteItem(item.getMnumber());
|
}
|
}
|
|
/**
|
* 成品出库 发货通知单表头,表明细
|
*/
|
@Scheduled(cron = "0/15 * * * * ? ")
|
@Synchronized
|
@Transactional
|
public void syncOutStock(){
|
List<OutStockBill> outStockBills = erpService.syncOutStock();
|
for (Integer i = 0; i < outStockBills.size(); i++) {
|
OutStockBill outStockBill = outStockBills.get(i);
|
|
//同一单号存在相同物料编码数据,该单号不予处理
|
Number fnumberCount = erpService.QueryFnumberOutCount(outStockBill.getFInterID());
|
if(fnumberCount.intValue() > 1){
|
if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID(),-1)) {
|
log.error("更新出库通知单读取状态为-1失败[FBrNo={},FInterID={}]", outStockBill.getFBrNo(),outStockBill.getFInterID());
|
}
|
continue;
|
}
|
|
OutStockBill main = outStockMainService.selectOne(new EntityWrapper<OutStockBill>().eq("FBillNo",outStockBill.getFBillNo()).and().eq("FInterID", outStockBill.getFInterID()));
|
if (null == main) {
|
outStockBill.setFflag_rw(1);
|
if (!outStockMainService.insert(outStockBill)) {
|
log.info("同步出库通知主表OutStockBill失败");
|
exceptionHandle("同步出库通知主表OutStockBill失败[FBillNo={0},FInterID={1}]",outStockBill.getFBillNo(),outStockBill.getFInterID());
|
};
|
List<OutStockBillEntry> outStockBillEntries = erpService.syncOutStockDetail(outStockBill.getFInterID());
|
for (Integer j = 0; j < outStockBillEntries.size(); j++) {
|
OutStockBillEntry outStockBillEntry = outStockBillEntries.get(j);
|
Wrapper<OutStockBillEntry> wrapper = new EntityWrapper<OutStockBillEntry>().eq("FInterID", outStockBillEntry.getFInterID()).
|
eq("FEntryID", outStockBillEntry.getFEntryID()).eq("FBrNo",outStockBillEntry.getFBrNo());
|
OutStockBillEntry one = outStockService.selectOne(wrapper);
|
if (null == one) {
|
// String Fnumber = (Cools.isEmpty(outStockBillEntry.getFSourceBillNo())) ? outStockBillEntry.getFnumber() : outStockBillEntry.getFnumber()+"|"+outStockBillEntry.getFSourceBillNo();
|
// outStockBillEntry.setFnumber(Fnumber); //产品代码|生产单号
|
outStockBillEntry.setFAmount(new BigDecimal(0));
|
if (!outStockService.insert(outStockBillEntry)) {
|
log.info("提取出库通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
exceptionHandle("提取出库通知明细表OutStockBillEntry失败[FBrNo={0},FInterID={1},FEntryID={2}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
} else {
|
log.info("提取出库通知明细表OutStockBillEntry成功[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
}
|
} else {
|
// 数量有变化进行更新
|
if (Double.doubleToLongBits(one.getFAuxQty().doubleValue()) != Double.doubleToLongBits(outStockBillEntry.getFAuxQty().doubleValue())) {
|
outStockBillEntry.setFAmount(new BigDecimal(0));
|
if (!outStockService.update(outStockBillEntry, wrapper)) {
|
log.info("同步更新通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
exceptionHandle("同步更新通知明细表OutStockBillEntry失败[FBrNo={0},FInterID={1},FEntryID={2}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
} else {
|
log.info("同步更新通知明细表OutStockBillEntry成功[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
|
outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
|
}
|
}
|
}
|
}
|
} else {
|
|
}
|
|
if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID(),1)) {
|
log.error("更新出库通知单读取状态失败[FBrNo={},FInterID={}]", outStockBill.getFBrNo(),outStockBill.getFInterID());
|
}
|
}
|
}
|
|
// /**
|
// * 成品出库 发货通知单表体
|
// */
|
// @Scheduled(cron = "0/15 * * * * ? ")
|
// public void syncOutStockDetail(){
|
// List<OutStockBillEntry> result = erpService.syncOutStockDetail();
|
// for (Integer i = 0; i < result.size(); i++) {
|
// OutStockBillEntry main = outStockService.selectOne(new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID()));
|
// if (null == main) {
|
// OutStockBillEntry outStockBillEntry = result.get(i);
|
// outStockBillEntry.setFnumber(outStockBillEntry.getFnumber()+"|"+outStockBillEntry.getFSourceBillNo()); //产品代码|生产单号
|
// if (!outStockService.insert(outStockBillEntry)) {
|
// log.info("出库通知明细表OutStockBillEntry同步失败");
|
// };
|
// } else {
|
// // 数量有变化进行更新
|
// if (Double.doubleToLongBits(main.getFAuxQty().doubleValue()) != Double.doubleToLongBits(result.get(i).getFAuxQty().doubleValue())) {
|
// if (!outStockService.update(result.get(i), new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID()))) {
|
// log.info("出库通知明细表OutStockBillEntry同步失败");
|
// };
|
// }
|
// }
|
// }
|
// }
|
|
/**
|
* 原材料出库
|
*/
|
// @Scheduled(cron = "0/3 * * * * ? ")
|
public void outStockExecute(){
|
|
}
|
|
}
|