package zy.cloud.wms.common.service.erp;
|
|
import com.alibaba.fastjson.JSON;
|
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 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 org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
import zy.cloud.wms.common.service.erp.entity.*;
|
import zy.cloud.wms.manager.entity.*;
|
import zy.cloud.wms.manager.mapper.CustOrderMapper;
|
import zy.cloud.wms.manager.mapper.TagMapper;
|
import zy.cloud.wms.manager.service.*;
|
import zy.cloud.wms.manager.utils.HttpHandler;
|
import zy.cloud.wms.manager.utils.NodeUtils;
|
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* erp任务控制器
|
* Created by vincent on 2020/11/27
|
*/
|
@Slf4j
|
@Component
|
@RestController
|
public class ErpScheduler {
|
|
public static final String URI = "http://8.133.182.21:8080/api";
|
public static final String GET_ORDERS = "cM/basis/getOrders";
|
public static final String GET_BASIS = "cM/basis/getBasis";
|
public static final String UPLOAD_BILL = "cM/basis/uploadBill";
|
public static final String UPLOAD_STOCK = "cM/basis/uploadStock";
|
|
@Autowired
|
private CustOrderService custOrderService;
|
@Autowired
|
private MatService matService;
|
@Autowired
|
private CstmrService cstmrService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private TagService tagService;
|
@Autowired
|
private TagMapper tagMapper;
|
@Autowired
|
private CustOrderMapper custOrderMapper;
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
|
/**
|
* 商品下载
|
*/
|
// @Scheduled(cron = "0/5 * * * * ? ")
|
@GetMapping("/test1")
|
// @PostConstruct
|
public void getBasis1Execute(){
|
try {
|
Map<String, Object> param = new HashMap<>();
|
param.put("rec", 0);
|
param.put("Flag", 1);
|
String response = new HttpHandler.Builder()
|
.setUri(URI)
|
.setPath(GET_BASIS)
|
.setJson(JSON.toJSONString(param))
|
.build()
|
.doPost();
|
if (!Cools.isEmpty(response)) {
|
log.info(response);
|
Date now = new Date();
|
Result result = JSON.parseObject(response, Result.class);
|
if (result.getCode() != 1) {
|
return;
|
}
|
List<GetBasisResult> list = JSON.parseArray(result.getData(), GetBasisResult.class);
|
Tag first = null;
|
for (GetBasisResult data : list) {
|
Mat mat = matService.selectByMatnr(data.getUserCode());
|
String modifyDate = data.getModifyDate();
|
Date updateTime = null;
|
if (!Cools.isEmpty(modifyDate)) {
|
updateTime = DateUtils.convert(data.getModifyDate());
|
}
|
|
// 分类
|
Tag second = tagService.selectOne(new EntityWrapper<Tag>().eq("name", data.getYjfl()).eq("level", 2));
|
if (second == null) {
|
if (first == null) {
|
first = tagService.selectOne(new EntityWrapper<Tag>().eq("level", 1));
|
if (first == null) {
|
throw new CoolException("全部分类出错");
|
}
|
}
|
NodeUtils nodeUtils = new NodeUtils();
|
nodeUtils.executePath(first.getId());
|
second = new Tag(
|
null, // 编号
|
data.getYjfl(), // 名称
|
first.getId(), // 父级
|
first.getName(), // 父级名称
|
nodeUtils.path.toString(), // 关联路径
|
nodeUtils.pathName.toString(), // 关联路径名
|
0, // 类型
|
null, // 负责人
|
null, // 图片
|
null, // 简要描述
|
null, // 数量
|
2, // 等级
|
null, // 排序
|
1, // 状态
|
now, // 添加时间
|
null, // 添加人员
|
now, // 修改时间
|
null, // 修改人员
|
null // 备注
|
);
|
if (tagMapper.insert(second) == 0) {
|
throw new CoolException("插入分类失败");
|
}
|
}
|
|
Tag third = tagService.selectOne(new EntityWrapper<Tag>().eq("level", 3).eq("name", data.getEjfl()).eq("parent_name", data.getYjfl()));
|
if (third == null) {
|
NodeUtils nodeUtils = new NodeUtils();
|
nodeUtils.executePath(second.getId());
|
third = new Tag(
|
null, // 编号
|
data.getEjfl(), // 名称
|
second.getId(), // 父级
|
second.getName(), // 父级名称
|
nodeUtils.path.toString(), // 关联路径
|
nodeUtils.pathName.toString(), // 关联路径名
|
0, // 类型
|
null, // 负责人
|
null, // 图片
|
null, // 简要描述
|
null, // 数量
|
3, // 等级
|
null, // 排序
|
1, // 状态
|
now, // 添加时间
|
null, // 添加人员
|
now, // 修改时间
|
null, // 修改人员
|
null // 备注
|
);
|
if (tagMapper.insert(third) == 0) {
|
throw new CoolException("插入分类失败");
|
}
|
}
|
|
if (null == mat) {
|
mat = new Mat(
|
String.valueOf(data.getRec()), // 编号
|
null, // 所属区域
|
third.getId(), // 所属归类
|
data.getUserCode(), // 商品编号
|
data.getFullName(), // 商品名称
|
null, // 名称
|
data.getStandard(), // 规格
|
null, // 型号
|
null, // 批号
|
data.getUnit3(), // 单位
|
data.getBarcode(), // 条码
|
null, // 单据类型
|
null, // 单据编号
|
null, // 客户名称
|
null, // 品项数
|
null, // 库存余量
|
null, // 重量
|
1, //
|
null, // 添加人员
|
now, // 添加时间
|
null, // 修改人员
|
updateTime, // 修改时间
|
null // 备注
|
);
|
matService.insert(mat);
|
} else {
|
mat.setUuid(String.valueOf(data.getRec()));
|
mat.setMatnr(data.getUserCode());
|
mat.setMaktx(data.getFullName());
|
mat.setSpecs(data.getStandard());
|
mat.setUpdateTime(updateTime);
|
mat.setBarcode(data.getBarcode());
|
mat.setUnit(data.getUnit3());
|
matService.updateById(mat);
|
}
|
log.info("====>> 更新物料:{}", data.getUserCode());
|
}
|
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e.getMessage());
|
}
|
}
|
|
/**
|
* 客户下载
|
*/
|
// @Scheduled(cron = "0/5 * * * * ? ")
|
// @PostConstruct
|
public void getBasis2Execute(){
|
try {
|
Map<String, Object> param = new HashMap<>();
|
param.put("rec", 0);
|
param.put("Flag", 2);
|
String response = new HttpHandler.Builder()
|
.setUri(URI)
|
.setPath(GET_BASIS)
|
.setJson(JSON.toJSONString(param))
|
.build()
|
.doPost();
|
if (!Cools.isEmpty(response)) {
|
log.info(response);
|
Date now = new Date();
|
Result result = JSON.parseObject(response, Result.class);
|
if (result.getCode() != 1) {
|
return;
|
}
|
List<GetBasisResult> list = JSON.parseArray(result.getData(), GetBasisResult.class);
|
for (GetBasisResult data : list) {
|
Cstmr cstmr = cstmrService.selectOne(new EntityWrapper<Cstmr>().eq("uuid", data.getUserCode()));
|
String modifyDate = data.getModifyDate();
|
Date updateTime = null;
|
if (!Cools.isEmpty(modifyDate)) {
|
updateTime = DateUtils.convert(data.getModifyDate());
|
}
|
if (null == cstmr) {
|
cstmr = new Cstmr(
|
data.getUserCode(), // 客户编号[非空]
|
data.getFullName(), // 客户名称
|
null, // 联系人
|
null, // 联系电话
|
null, // 联系地址
|
1, // 状态
|
null, // 添加人员
|
now, // 添加时间
|
null, // 修改人员
|
updateTime, // 修改时间
|
String.valueOf(data.getRec()) // 备注
|
);
|
cstmrService.insert(cstmr);
|
} else {
|
cstmr.setUuid(data.getUserCode());
|
cstmr.setName(data.getFullName());
|
cstmr.setUpdateTime(updateTime);
|
cstmr.setMemo(String.valueOf(data.getRec()));
|
cstmrService.updateById(cstmr);
|
}
|
log.info("====>> 更新客户资料:{}", data.getUserCode());
|
}
|
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e.getMessage());
|
}
|
}
|
|
/**
|
* 持久化销售订单
|
*/
|
@Scheduled(cron = "0/45 * * * * ? ")
|
@Transactional
|
// @PostConstruct
|
public void getOrdersExecute(){
|
try {
|
Map<String, Object> json = new HashMap<>();
|
json.put("vchType", 151);
|
String response = new HttpHandler.Builder()
|
.setUri(URI)
|
.setPath(GET_ORDERS)
|
.setJson(JSON.toJSONString(json))
|
.build()
|
.doPost();
|
if (!Cools.isEmpty(response)) {
|
// log.info(response);
|
Date now = new Date();
|
Result result = JSON.parseObject(response, Result.class);
|
if (result.getCode() != 1) {
|
return;
|
}
|
List<GetOrderResult0> list = JSON.parseArray(result.getData(), GetOrderResult0.class);
|
if (!Cools.isEmpty(list)) {
|
boolean complete = true;
|
for (GetOrderResult0 data : list) {
|
if (custOrderService.selectCount(new EntityWrapper<CustOrder>()
|
.eq("number", data.getNumber())
|
// .ne("bType_id", data.getBTypeID())
|
) > 0) {
|
// log.error("{}单号已存在", data.getNumber());
|
complete = false;
|
continue;
|
}
|
for (GetOrderResultDetl0 detl0 : data.getDetail()) {
|
CustOrder custOrder = new CustOrder(
|
data.getNumber(), // 销售单号
|
data.getBillDate(), // 单据日期[非空]
|
data.getBTypeID(), // 客户编号
|
data.getETypeID(), // 经手人编号[非空]
|
detl0.getUserCode(), // 商品编号
|
detl0.getQty(), // 商品数量
|
detl0.getQty(), // 总数量
|
detl0.getPrice(), // 商品单价
|
detl0.getComment(), // 商品备注[非空]
|
0, // 状态
|
now, // 添加时间
|
now, // 修改时间
|
data.getSummary() // 备注
|
);
|
boolean insert = custOrderService.insert(custOrder);
|
if (!insert) {
|
complete = false;
|
log.error("保存销售订单失败!");
|
}
|
}
|
}
|
if (complete) {
|
List<String> collect = list.stream().map(GetOrderResult0::getNumber).distinct().collect(Collectors.toList());
|
for (String number : collect) {
|
custOrderService.updateStatus(number, 1);
|
}
|
}
|
|
}
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw new RuntimeException(e.getMessage());
|
}
|
|
}
|
|
/**
|
* 完成销售订单
|
*/
|
// @Scheduled(cron = "0/10 * * * * ? ")
|
@Transactional
|
// @PostConstruct
|
public void finishOrdersExecute(){
|
try {
|
List<CustOrder> custOrders = custOrderService.selectList(new EntityWrapper<CustOrder>().eq("status", 4));
|
if (!Cools.isEmpty(custOrders)) {
|
List<String> numbers = custOrders.stream().map(CustOrder::getNumber).distinct().collect(Collectors.toList());
|
for (String number : numbers) {
|
GetOrderResult0 getOrderResult0 = new GetOrderResult0();
|
List<GetOrderResultDetl0> list = new ArrayList<>();
|
getOrderResult0.setDetail(list);
|
// 遍历递减
|
Iterator<CustOrder> iterator = custOrders.iterator();
|
while (iterator.hasNext()) {
|
CustOrder custOrder = iterator.next();
|
if (custOrder.getNumber().equals(number)) {
|
// 表头
|
if (Cools.isEmpty(getOrderResult0.getNumber())) {
|
getOrderResult0.setNumber(number);
|
getOrderResult0.setVchType(11); // todo:luxiaotao
|
getOrderResult0.setBillDate(custOrder.getBillDate());
|
getOrderResult0.setBTypeID(custOrder.getBTypeId());
|
getOrderResult0.setKTypeID("宏挺仓库");
|
}
|
// 表体
|
GetOrderResultDetl0 detl0 = new GetOrderResultDetl0();
|
detl0.setUserCode(custOrder.getUserCode());
|
detl0.setQty(custOrder.getTotal());
|
detl0.setPrice(custOrder.getPrice());
|
detl0.setComment(custOrder.getComment());
|
list.add(detl0);
|
iterator.remove();
|
}
|
}
|
|
System.out.println(JSON.toJSONString(getOrderResult0));
|
|
|
String response = new HttpHandler.Builder()
|
.setUri(URI)
|
.setPath(UPLOAD_BILL)
|
.setJson(JSON.toJSONString(getOrderResult0))
|
.build()
|
.doPost();
|
if (!Cools.isEmpty(response)) {
|
log.warn(response);
|
Result result = JSON.parseObject(response, Result.class);
|
if (result.getCode() != 1) {
|
return;
|
}
|
// 转历史档
|
int save = custOrderMapper.saveLog(getOrderResult0.getNumber());
|
if (save > 0) {
|
if (custOrderMapper.delete(new EntityWrapper<CustOrder>().eq("number", getOrderResult0.getNumber())) == 0) {
|
throw new CoolException("删除销售订单失败");
|
}
|
log.info("{}销售订单拣货结束", getOrderResult0.getNumber());
|
}
|
}
|
|
}
|
}
|
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException(e.getMessage());
|
}
|
|
}
|
|
/**
|
* 库存上传
|
*/
|
@Scheduled(cron = "0/15 * * * * ? ")
|
@GetMapping("test2")
|
public void uploadStockExecute(){
|
try {
|
|
List<LocDetl> statis = locDetlService.getLocDetlStatis();
|
if (!Cools.isEmpty(statis)) {
|
UploadStock uploadStock = new UploadStock();
|
uploadStock.setNumber(String.valueOf(snowflakeIdWorker.nextId()));
|
uploadStock.setVchType(89);
|
uploadStock.setBillDate(DateUtils.convert(new Date(), DateUtils.yyyyMMdd_F));
|
uploadStock.setDataSize(statis.size());
|
List<UploadStockDtel> detail = new ArrayList<>();
|
uploadStock.setDetail(detail);
|
for (LocDetl locDetl : statis) {
|
Mat mat = matService.selectByMatnr(locDetl.getMatnr());
|
if (mat == null) {continue;}
|
UploadStockDtel detl = new UploadStockDtel();
|
detl.setUserCode(mat.getMatnr());
|
detl.setQty(locDetl.getAnfme());
|
// detl.setPrice(Double.parseDouble());
|
detl.setComment(mat.getMemo());
|
detail.add(detl);
|
}
|
|
String response = new HttpHandler.Builder()
|
.setUri(URI)
|
.setPath(UPLOAD_STOCK)
|
.setJson(JSON.toJSONString(uploadStock))
|
.build()
|
.doPost();
|
if (!Cools.isEmpty(response)) {
|
log.info("上报库存明细统计 ======>> \nrequest:{} \nresponse:{}", JSON.toJSONString(uploadStock), response);
|
Result result = JSON.parseObject(response, Result.class);
|
if (result.getCode() != 1) {
|
}
|
}
|
}
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
|
}
|
|
|
}
|