package com.zy.api.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.zy.api.entity.OrderItemsParam;
|
import com.zy.api.entity.OrderParams;
|
import com.zy.api.entity.OutOrderParams;
|
import com.zy.api.entity.PubOrderParams;
|
import com.zy.api.entity.ReportOrderParam;
|
import com.zy.api.entity.StockUpOrderParams;
|
import com.zy.api.entity.SyncMatParmas;
|
import com.zy.api.enums.MatLocType;
|
import com.zy.api.enums.OrderType;
|
import com.zy.api.enums.OrderWkType;
|
import com.zy.api.service.KopenApiService;
|
import com.zy.asrs.entity.Mat;
|
import com.zy.asrs.entity.Order;
|
import com.zy.asrs.entity.OrderDetl;
|
import com.zy.asrs.enums.CommonEnum;
|
import com.zy.asrs.enums.OrderSettle;
|
import com.zy.asrs.enums.OrderTypeEnum;
|
import com.zy.asrs.service.MatService;
|
import com.zy.asrs.service.OrderDetlService;
|
import com.zy.asrs.service.OrderService;
|
|
import com.zy.asrs.utils.Utils;
|
import com.zy.common.utils.HttpHandler;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
@Service("kopenApiServiceImpl")
|
public class KopenApiServiceImpl implements KopenApiService {
|
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private MatService matService;
|
|
/**
|
* 接收下发订单信息
|
*
|
* @param params
|
* @return com.core.common.R
|
* @author Ryan
|
* @date 2025/11/24 14:49
|
*/
|
@Override
|
public R receiveOrders(PubOrderParams params) {
|
if (params.getType().equals(OrderWkType.getTypeVal(params.getType()))) {
|
return R.error("当前类型不是上架派工单!!");
|
}
|
addOrUpdateOrders(params, "add");
|
return R.ok("单据下发成功!!");
|
}
|
|
/**
|
* 上架派工单反馈
|
*
|
* @author Ryan
|
* @date 2025/11/24 15:33
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R getInDispatchResult(ReportOrderParam params) {
|
if (Objects.isNull(params)) {
|
return R.error("参数不能为空!!");
|
}
|
String response = null;
|
try {
|
response = new HttpHandler.Builder()
|
.setUri("127.0.0.1:8081")
|
.setPath("/wms/order/getInDispatchResult")
|
.setJson(JSONObject.toJSONString(params))
|
.build()
|
.doPost();
|
if (Objects.isNull(response) || response.trim().isEmpty()) {
|
return R.error("外网接口无响应!!");
|
}
|
JSONObject jsonObject = JSONObject.parseObject(response);
|
Integer code = jsonObject.getInteger("code");
|
if (!Objects.isNull(code) && code.equals(1)) {
|
return R.ok("入库单上报完成!!");
|
} else {
|
String msg = jsonObject.getString("message");
|
return R.error(Objects.isNull(msg) ? "上报失败!!" : msg);
|
}
|
} catch (Exception e) {
|
return R.error(e.getMessage());
|
}
|
}
|
|
/* */
|
|
/**
|
* 备货指示派工单下发
|
*
|
* @param params
|
* @return com.core.common.R
|
* @author Ryan
|
* @date 2025/11/24 15:21
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R sendOutDispatch(PubOrderParams params) {
|
if (Objects.isNull(params)) {
|
return R.error("参数不能为空!!");
|
}
|
// 校验参数
|
if (Objects.isNull(params.getDispatch_no())) {
|
return R.error("派工单编号不能为空!!");
|
}
|
if (Objects.isNull(params.getKopen_id())) {
|
return R.error("流水号不能为空!!");
|
}
|
if (Objects.isNull(params.getCompany_id())) {
|
return R.error("公司ID不能为空!!");
|
}
|
|
addOrUpdateOrders(params, "add");
|
|
return R.ok("备货指示派工单下发成功!!");
|
}
|
|
// /**
|
// * 备货指示派工单
|
// *
|
// * @author Ryan
|
// * @date 2025/12/16 9:15
|
// * @param params
|
// */
|
// private void outOrderAddAndUpdate(PubOrderParams params, String type) {
|
// if (Objects.isNull(params)) {
|
// throw new CoolException("参数不能为空!!");
|
// }
|
// if (Objects.isNull(params.getType())) {
|
// throw new CoolException("订单类型不能为空!!");
|
// }
|
|
// OrderParams orderParams =
|
// JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
|
// Order order = orderService.selectOne(new
|
// EntityWrapper<Order>().eq("order_no", orderParams.getInv_no()));
|
// if (type.equals("add") && !Objects.isNull(order)) {
|
// throw new CoolException("单据已存在, 不可重复添加!!");
|
// }
|
// // 判断订单是否存在
|
// if (Objects.isNull(order)) {
|
// /** 不存在,新增订单 */
|
// generateOrders(params);
|
// } else {
|
// /** 存在,删除老订单,更新插入新订单 */
|
// // 删除旧订单明细
|
// if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id",
|
// order.getId()))) {
|
// throw new CoolException("订单明细删除失败!!");
|
// }
|
// ;
|
// if (!orderService.deleteById(order.getId())) {
|
// throw new CoolException("原单据删除失败!!");
|
// }
|
// generateOrders(params);
|
// }
|
|
// }
|
|
/**
|
* 基础零件变更
|
*
|
* @param params
|
* @return com.core.common.R
|
* @author Ryan
|
* @date 2025/11/24 15:05
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public synchronized R basMatupdate(List<SyncMatParmas> params) {
|
if (Objects.isNull(params) || params.isEmpty()) {
|
return R.error("参数不能为空!!");
|
}
|
params.forEach(mats -> {
|
if (Objects.isNull(mats) ) {
|
throw new CoolException("物料编码不能为空!!");
|
}
|
Mat matnr = matService.selectByMatnr(mats.getPro_komcode());
|
if (!Objects.isNull(matnr)) {
|
// 订单时间
|
if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
|
Date date1 = Utils.getFormateDate(mats.getUpdate_time());
|
matnr.setUpdateTime(date1);
|
}
|
matnr.setMaktx(mats.getPro_name());
|
matnr.setSpecs(mats.getPro_size());
|
matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
|
matnr.setSuppCode(mats.getPro_id());
|
matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
|
matnr.setManu(mats.getCompany_id());
|
if (!matService.updateById(matnr)) {
|
throw new CoolException("物料更新失败或无需更新!!");
|
}
|
} else {
|
if (Objects.isNull(matnr)) {
|
matnr = new Mat();
|
}
|
// 订单时间
|
if (Utils.isValidFormat(mats.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
|
Date date1 = Utils.getFormateDate(mats.getUpdate_time());
|
matnr.setUpdateTime(date1);
|
}
|
matnr.setMaktx(mats.getPro_name());
|
matnr.setMatnr(mats.getPro_komcode());
|
matnr.setSpecs(mats.getPro_size());
|
matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
|
matnr.setSuppCode(mats.getPro_id());
|
matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
|
matnr.setManu(mats.getCompany_id());
|
if (!matService.insert(matnr)) {
|
throw new CoolException("物料更新失败!!");
|
}
|
}
|
});
|
|
return R.ok("保存成功!!");
|
}
|
|
/**
|
* 新增或修改订单信息
|
*
|
* @author Ryan
|
* @date 2025/11/24 15:32
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addOrUpdateOrders(PubOrderParams params, String type) {
|
if (Objects.isNull(params)) {
|
throw new CoolException("参数不能为空!!");
|
}
|
if (Objects.isNull(params.getType())) {
|
throw new CoolException("订单类型不能为空!!");
|
}
|
OrderParams orderParams = JSONObject.parseObject(JSONObject.toJSONString(params), OrderParams.class);
|
// Order order = orderService.selectOne(new
|
// EntityWrapper<Order>().eq("order_no", orderParams.getDispatch_no()));
|
Order order = new Order();
|
if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 入库
|
order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
|
orderParams.getDispatch_no()));
|
} else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 出库
|
if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
|
// 备货单出库
|
order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
|
orderParams.getPick_no()));
|
} else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
|
|| OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
|
// 备货指示派工单(EO/SO)出库
|
order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",
|
orderParams.getDispatch_no()));
|
}
|
}
|
// 出库
|
|
if (type.equals("add") && !Objects.isNull(order)) {
|
throw new CoolException("单据已存在, 不可重复添加!!");
|
}
|
// 判断订单是否存在
|
if (Objects.isNull(order)) {
|
/** 不存在,新增订单 */
|
generateOrders(params);
|
} else {
|
/** 存在,删除老订单,更新插入新订单 */
|
// 删除旧订单明细
|
if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
|
throw new CoolException("订单明细删除失败!!");
|
}
|
|
if (!orderService.deleteById(order.getId())) {
|
throw new CoolException("原单据删除失败!!");
|
}
|
generateOrders(params);
|
}
|
}
|
|
public static String generateUUID(OrderParams params) {
|
return java.util.UUID.randomUUID().toString();
|
}
|
|
/**
|
* 生成订单信息
|
*
|
* @param params
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void generateOrders(PubOrderParams params) {
|
// 将数据当新订单插入
|
Order newOrder = new Order();
|
// 派工单号
|
newOrder.setOrderNo(params.getDispatch_no());
|
if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 入库
|
newOrder.setPakinPakoutStatus(1);
|
newOrder.setDocType(Long.parseLong(params.getType()));
|
newOrder.setNumber(params.getInv_no());
|
} else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 出库
|
if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
|
// 备货单出库
|
newOrder.setOrderNo(params.getPick_no());
|
newOrder.setNumber(params.getDispatch_no());
|
newOrder.setCstmrName(params.getCus_id());
|
newOrder.setTel(params.getCus_address());
|
newOrder.setDocType(Long.parseLong(OrderTypeEnum.STOCK.type + ""));
|
} else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
|
|| OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
|
// 备货指示派工单(EO/SO)出库
|
newOrder.setDocType(Long.parseLong(OrderTypeEnum.TRANSFER.type + ""));
|
}
|
newOrder.setPakinPakoutStatus(2);
|
}
|
|
newOrder.setUuid(generateUUID(params));
|
// 流水号(唯一)
|
newOrder.setDefNumber(params.getKopen_id());
|
// 箱号
|
newOrder.setItemName(params.getPm_tktid());
|
newOrder.setSettle(OrderSettle.ORDER_SETTLE_HOLDING.type);
|
newOrder.setStatus(CommonEnum.COMMON_ENUM_Y.type);
|
// 订单时间
|
if (Utils.isValidFormat(params.getUpdate_time(), "yyyy-MM-dd HH:mm:ss")) {
|
newOrder.setOrderTime(params.getUpdate_time());
|
}
|
// 公司ID
|
newOrder.setCstmrName(params.getCompany_id());
|
newOrder.setCreateTime(new Date());
|
newOrder.setUpdateTime(new Date());
|
if (!orderService.insert(newOrder)) {
|
throw new RuntimeException("新增订单失败!!");
|
}
|
if (!Objects.isNull(params.getDetails()) && !params.getDetails().isEmpty()) {
|
params.getDetails().forEach(item -> {
|
Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", item.getPro_komcode()));
|
if (Objects.isNull(matnr)) {
|
throw new CoolException("物料编码不存在!!");
|
}
|
OrderDetl orderItem = new OrderDetl();
|
BeanUtils.copyProperties(matnr, orderItem);
|
orderItem.setOrderId(newOrder.getId());
|
orderItem.setOrderNo(newOrder.getOrderNo());
|
|
if (OrderType.ORDER_IN.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 入库
|
orderItem.setAnfme(Math.round(item.getInv_qty() * 10000) / 10000.0);
|
} else if (OrderType.ORDER_OUT.type.equals(OrderWkType.getTypeVal(params.getType()))) {
|
// 出库
|
if (OrderWkType.ORDER_WK_ORDER_OUT.val.equals(params.getType())) {
|
// 备货单出库
|
orderItem.setAnfme(Math.round(item.getPick_qty() * 10000) / 10000.0);
|
} else if (OrderWkType.ORDER_WK_ORDER_OUT_EO.val.equals(params.getType())
|
|| OrderWkType.ORDER_WK_ORDER_OUT_SO.val.equals(params.getType())) {
|
// 备货指示派工单(EO/SO)出库
|
orderItem.setAnfme(Math.round(item.getOrder_qty() * 10000) / 10000.0);
|
}
|
}
|
orderItem.setMatnr(matnr.getMatnr());
|
orderItem.setMaktx(matnr.getMaktx());
|
orderItem.setBrand(matnr.getBrand());
|
orderItem.setBatch(1 + "");
|
orderItem.setStandby1(item.getPro_id());
|
// 关联上加派工单号+零件代码+供应商代码
|
orderItem.setThreeCode(item.getTotal_serial());
|
// 供应商代码
|
orderItem.setSuppCode(item.getPro_id());
|
orderItem.setCreateTime(new Date());
|
orderItem.setUpdateTime(new Date());
|
if (!orderDetlService.insert(orderItem)) {
|
throw new CoolException("订单明细新增失败!!");
|
}
|
});
|
}
|
}
|
|
/**
|
* 备货单下发
|
*
|
* @param params
|
* @return com.core.common.R
|
* @author Ryan
|
* @date 2025/11/24 15:40
|
*/
|
@Override
|
public R getOutDetails(StockUpOrderParams params) {
|
if (Objects.isNull(params)) {
|
return R.error("参数不能为空!!");
|
}
|
// 校验参数
|
if (Objects.isNull(params.getDispatch_no())) {
|
return R.error("派工单编号不能为空!!");
|
}
|
if (Objects.isNull(params.getKopen_id())) {
|
return R.error("流水号不能为空!!");
|
}
|
if (Objects.isNull(params.getCompany_id())) {
|
return R.error("公司ID不能为空!!");
|
}
|
if (Objects.isNull(params.getDetails()) || params.getDetails().isEmpty()) {
|
return R.error("订单明细不能为空!!");
|
}
|
|
List<OrderItemsParam> items = new ArrayList<>();
|
if (params.getDetails() != null) {
|
for (OutOrderParams detail : params.getDetails()) {
|
if (detail.getPartList() != null) {
|
items.addAll(detail.getPartList());
|
}
|
}
|
}
|
|
params.getDetails().forEach(item -> {
|
PubOrderParams pubOrderParams = new PubOrderParams();
|
BeanUtils.copyProperties(params, pubOrderParams);
|
pubOrderParams.setType(item.getType())
|
.setPick_no(item.getPick_no())
|
.setCus_address(item.getCus_address())
|
.setOrder_no(item.getOrder_no())
|
.setUpdate_time(params.getUpdate_time())
|
.setCus_id(item.getCus_id());
|
pubOrderParams.setDetails(item.getPartList());
|
addOrUpdateOrders(pubOrderParams, "add");
|
});
|
|
return R.ok("备货单下发成功!!");
|
}
|
|
}
|