package com.zy.asrs.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
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.entity.param.OpenOrderPakinParam;
|
import com.zy.asrs.entity.param.OpenOrderPakoutParam;
|
import com.zy.asrs.entity.param.ReportErpParam;
|
import com.zy.asrs.mapper.OrderDetlMapper;
|
import com.zy.asrs.mapper.OrderMapper;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.task.handler.OrderSyncHandler;
|
import com.zy.common.model.DetlDto;
|
import com.zy.common.model.OrderDto;
|
import com.zy.common.model.OrderMergeVo;
|
import com.zy.common.service.erp.ErpService;
|
import com.zy.common.utils.HttpHandler;
|
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.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.concurrent.TimeUnit;
|
|
@Slf4j
|
@Service("orderService")
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Autowired
|
private OrderDetlMapper orderDetlMapper;
|
@Autowired
|
private OpenService openService;
|
@Autowired
|
private SnowflakeIdWorker snowflakeIdWorker;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private DocTypeService docTypeService;
|
@Autowired
|
private WrkDetlService wrkDetlService;
|
@Autowired
|
private AgvWrkDetlService agvWrkDetlService;
|
@Autowired
|
private MatService matService;
|
@Autowired
|
private ErpService erpService;
|
@Autowired
|
private ApiLogService apiLogService;
|
@Autowired
|
private WaitPakinService waitPakinService;
|
@Autowired
|
private AgvWaitPakinService agvWaitPakinService;
|
@Autowired
|
private ManPakOutService manPakOutService;
|
|
@Autowired
|
private OrderSyncHandler orderSyncHandler;
|
|
@Autowired
|
private AgvLocMastService agvLocMastService;
|
|
@Value("${u8.url}")
|
private String url;
|
|
@Value("${u8.orderReportPath}")
|
private String orderReportPath;
|
|
@Override
|
public Order selectByNo(String orderNo) {
|
List<Order> orderList = this.selectList(new EntityWrapper<Order>().eq("order_no", orderNo));
|
if (Cools.isEmpty(orderList)) {
|
return null;
|
}
|
return orderList.get(0);
|
}
|
|
@Override
|
public List<OrderDetl> selectWorkingDetls(Long orderId) {
|
return orderDetlMapper.selectWorkingDetls(orderId);
|
}
|
|
@Override
|
public boolean updateTel(Long orderId, String tel) {
|
return this.baseMapper.updateTel(orderId, tel) > 0;
|
}
|
|
@Override
|
public boolean updateSettle(Long orderId, Long settle, Long userId) {
|
return this.baseMapper.updateSettle(orderId, settle, userId) > 0;
|
}
|
|
@Override
|
public boolean updateSettle2(Long orderId, Long settle, Integer plt, String inTime) {
|
return this.baseMapper.updateSettle2(orderId, settle, plt, inTime) > 0;
|
}
|
|
@Override
|
public void checkComplete(String orderNo, Integer pltType) {
|
Order order = this.selectByNo(orderNo);
|
if (order.getDocType() == 38) {
|
return;
|
}
|
if (Cools.isEmpty(order)) {
|
return;
|
}
|
if (order.getSettle() >= 4L) {
|
return;
|
}
|
List<OrderDetl> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()));
|
// 作业数量是否等于数量
|
boolean complete = true;
|
for (OrderDetl orderDetl : orderDetls) {
|
if (orderDetl.getAnfme() > orderDetl.getQty()) {
|
complete = false;
|
break;
|
}
|
}
|
|
// 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据
|
//int count = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo));
|
boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1;
|
boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no", orderNo)) < 1;
|
boolean waitPakinExist = agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().like("order_no", orderNo)) < 1;
|
boolean agvWrkDetlExist2 = true;
|
try {
|
agvWrkDetlExist2 = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().eq("model", orderNo)) < 1;
|
} catch (Exception e) {
|
|
}
|
|
ManPakOut manPakOut = manPakOutService.selectByOrderWithName(orderNo);
|
|
boolean manPakoutExist = Cools.isEmpty(manPakOut) || (manPakOut.getPayment() != null && manPakOut.getPayment() == 1);
|
if (complete && wrkDeltExist && agvWrkDetlExist && waitPakinExist && manPakoutExist && agvWrkDetlExist2) {
|
if (pltType == null) {
|
if (!this.updateSettle(order.getId(), 6L, 9528L)) {
|
throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
|
}
|
} else if (!this.updateSettle2(order.getId(), 6L, pltType, DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F))) {
|
throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
|
}
|
} else {
|
if (pltType != null && pltType > 0) {
|
order.setPltType(pltType);
|
order.setInTime(DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F));
|
this.baseMapper.updateById(order);
|
}
|
}
|
}
|
|
|
|
@Override
|
@Transactional
|
public void checkComplete2(String orderNo) {
|
Order order = this.selectByNo(orderNo);
|
if (Cools.isEmpty(order)) {
|
return;
|
}
|
if (order.getSettle() >= 4L) {
|
return;
|
}
|
List<OrderDetl> orderDetls = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()));
|
// 作业数量是否等于数量
|
boolean complete = true;
|
|
for (OrderDetl orderDetl : orderDetls) {
|
if (orderDetl.getAnfme() > orderDetl.getQty()) {
|
complete = false;
|
break;
|
}
|
}
|
|
// 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据
|
//int count = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo));
|
boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1;
|
boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no", orderNo)) < 1;
|
boolean waitPakinExist = agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().like("order_no", orderNo)) < 1;
|
boolean agvWrkDetlExist2 = true;
|
try {
|
agvWrkDetlExist2 = agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().eq("model", orderNo)) < 1;
|
} catch (Exception e) {
|
|
}
|
|
ManPakOut manPakOut = manPakOutService.selectByOrderWithName(orderNo);
|
|
boolean manPakoutExist = Cools.isEmpty(manPakOut) || (manPakOut.getPayment() != null && manPakOut.getPayment() == 1);
|
if (complete && wrkDeltExist && agvWrkDetlExist && waitPakinExist && manPakoutExist && agvWrkDetlExist2) {
|
if (!this.updateSettle(order.getId(), 6L, 9528L)) {
|
throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败");
|
}
|
}
|
}
|
|
@Override
|
public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List<WrkDetl> wrkDetls) {
|
try {
|
List<DetlDto> detlDtos = new ArrayList<>();
|
wrkDetls.forEach(wrkDetl -> {
|
detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme()));
|
});
|
String orderNo = "HAND" + snowflakeIdWorker.nextId();
|
if (pakin) {
|
// 生成入库单据
|
OpenOrderPakinParam openParam = new OpenOrderPakinParam();
|
openParam.setOrderNo(orderNo);
|
openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
|
openParam.setOrderType("手动入库单");
|
openParam.setOrderDetails(detlDtos);
|
openService.pakinOrderCreate(openParam);
|
} else {
|
// 生成出库单据
|
OpenOrderPakoutParam openParam = new OpenOrderPakoutParam();
|
openParam.setOrderNo(orderNo);
|
openParam.setOrderTime(DateUtils.convert(wrkMast.getModiTime()));
|
openParam.setOrderType("手动出库单");
|
openParam.setOrderDetails(detlDtos);
|
openService.pakoutOrderCreate(openParam);
|
}
|
|
Order order = this.selectByNo(orderNo);
|
if (null == order) {
|
throw new CoolException("生成单据失败");
|
}
|
if (!this.updateSettle(order.getId(), 4L, null)) {
|
throw new CoolException("修改单据状态失败");
|
}
|
for (DetlDto detlDto : detlDtos) {
|
// 修改订单明细数量
|
if (!orderDetlService.increase(order.getId(), detlDto.getMatnr(), detlDto.getBatch(), detlDto.getAnfme(), detlDto.getCsocode(), detlDto.getIsoseq())) {
|
throw new CoolException("修改单据明细数量失败");
|
}
|
}
|
// 工作档明细更新单据编号
|
for (WrkDetl wrkDetl : wrkDetls) {
|
wrkDetlService.updateOrderNo(orderNo, wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
|
}
|
} catch (Exception e) {
|
log.error("", e);
|
return false;
|
}
|
return true;
|
}
|
|
@Override
|
public void remove(Long orderId) {
|
if (!this.deleteById(orderId)) {
|
throw new CoolException("删除单据失败");
|
}
|
orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", orderId));
|
}
|
|
public void report(Long orderId, String username) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
Order order = this.selectById(orderId);
|
// Map<String, Object> param = new HashMap<>();
|
// param.put("id",order.getOrderNo());
|
// param.put("dDate",sdf.format(new Date()));
|
// param.put("cHandler",username);
|
//
|
// List<Map<String,Object>> orderDetlsParam = new ArrayList<>();
|
// param.put("orderDetails",orderDetlsParam);
|
|
List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(orderId);
|
|
ReportErpParam reportErpParam = new ReportErpParam();
|
orderSyncHandler.mappingParam(order, reportErpParam);
|
orderSyncHandler.mappingParamChildren(orderDetls, reportErpParam);
|
|
// for (OrderDetl orderDetl : orderDetls){
|
// Map<String, Object> odMap = new HashMap<>();
|
// odMap.put("autoid",orderDetl.getItemNum());
|
// odMap.put("iQuantity",orderDetl.getQty());
|
// orderDetlsParam.add(odMap);
|
// }
|
|
int code = doHttpRequest(reportErpParam, "单据审核", url, orderReportPath, null, "127.0.0.1");
|
//int code = doHttpRequest(param, "单据审核", "localhost:8080", "/test/report", null, "127.0.0.1");
|
if (code == 0) {
|
log.info("单据审核,{}", order);
|
order.setSettle(6L);
|
this.updateById(order);
|
}
|
}
|
|
@Override
|
public List<Order> selectComplete() {
|
return this.baseMapper.selectComplete();
|
}
|
|
@Override
|
public List<OrderMergeVo> mergePreview(List<Long> ids) {
|
List<OrderMergeVo> result = new ArrayList<>();
|
for (Long orderId : ids) {
|
Order order = this.selectById(orderId);
|
// 获取所有未作业的明细
|
List<OrderDetl> orderDetls = orderDetlService.selectRemainder(orderId);
|
for (OrderDetl orderDetl : orderDetls) {
|
Double leave = orderDetl.getAnfme() - orderDetl.getQty();
|
OrderMergeVo vo = new OrderMergeVo(orderDetl.getMatnr(), orderDetl.getBatch(), leave);
|
OrderDto orderDto = new OrderDto(orderDetl.getOrderNo(), null, null, leave);
|
if (OrderMergeVo.has(result, vo)) {
|
OrderMergeVo exist = OrderMergeVo.find(result, vo.getMatnr(), vo.getBatch());
|
assert exist != null;
|
exist.setAnfme(exist.getAnfme() + vo.getAnfme());
|
exist.getOrderDtos().add(orderDto);
|
} else {
|
vo.getOrderDtos().add(orderDto);
|
result.add(vo);
|
}
|
|
}
|
}
|
for (OrderMergeVo vo : result) {
|
Mat mat = matService.selectByMatnr(vo.getMatnr());
|
assert mat != null;
|
vo.setMaktx(mat.getMaktx());
|
vo.setSpecs(mat.getSpecs());
|
}
|
return result;
|
}
|
|
@Override
|
public List<Order> selectorderNoL(String orderNo) {
|
return this.baseMapper.selectorderNoL(orderNo);
|
}
|
|
@Override
|
public List<Order> selectToBeHistoryOrder() {
|
return this.selectList(new EntityWrapper<Order>().eq("status", 1).ge("settle", 6));
|
|
//return this.baseMapper.selectToBeHistoryOrder();
|
}
|
|
private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip) {
|
String response = "";
|
boolean success = false;
|
|
try {
|
response = new HttpHandler.Builder()
|
.setUri(url)
|
.setPath(path)
|
.setTimeout(30, TimeUnit.SECONDS)
|
.setJson(JSONObject.toJSONString(requestParam))
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
|
if (Cools.isEmpty(jsonObject.get("errCode"))) {
|
throw new CoolException(jsonObject.get("Message").toString());
|
}
|
|
int code = (int) jsonObject.get("errCode");
|
if (code != 0) {
|
throw new CoolException(jsonObject.get("errMsg").toString());
|
}
|
success = true;
|
return code;
|
} catch (Exception e) {
|
log.error(e.getMessage());
|
throw new CoolException("调用接口响应错误");
|
} finally {
|
apiLogService.save(
|
namespace,
|
url + path,
|
appkey,
|
ip,
|
JSON.toJSONString(JSONObject.toJSONString(requestParam)),
|
response,
|
success
|
);
|
}
|
|
}
|
}
|