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.mapper.OrderDetlMapper; import com.zy.asrs.mapper.OrderMapper; import com.zy.asrs.service.*; 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 java.text.SimpleDateFormat; import java.util.*; @Slf4j @Service("orderService") public class OrderServiceImpl extends ServiceImpl 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 ManPakOutService manPakOutService; @Value("${u8.url}") private String url; @Value("${u8.orderReportPath}") private String orderReportPath; @Override public Order selectByNo(String orderNo) { List orderList = this.selectList(new EntityWrapper().eq("order_no", orderNo)); if (Cools.isEmpty(orderList)) { return null; } return orderList.get(0); } @Override public List selectWorkingDetls(Long orderId) { return orderDetlMapper.selectWorkingDetls(orderId); } @Override public boolean updateSettle(Long orderId, Long settle, Long userId) { return this.baseMapper.updateSettle(orderId, settle, userId) > 0; } @Override public void checkComplete(String orderNo) { Order order = this.selectByNo(orderNo); if(Cools.isEmpty(order)){ return; } if (order.getSettle() >= 4L) { return; } List orderDetls = orderDetlMapper.selectList(new EntityWrapper().eq("order_id", order.getId())); // 作业数量是否等于数量 boolean complete = true; for (OrderDetl orderDetl : orderDetls) { if (orderDetl.getAnfme() > orderDetl.getQty()) { complete = false; break; } } // 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据 boolean wrkDeltExist = wrkDetlService.selectCount(new EntityWrapper().eq("order_no", orderNo)) < 1; boolean agvWrkDetlExist = agvWrkDetlService.selectCount(new EntityWrapper().eq("order_no",orderNo)) < 1; boolean waitPakinExist = waitPakinService.selectCount(new EntityWrapper().eq("order_no",orderNo)) < 1; ManPakOut manPakOut = manPakOutService.selectByOrderWithName(orderNo); boolean manPakoutExist = Cools.isEmpty(manPakOut) || manPakOut.getPayment() == 1; if (complete && wrkDeltExist && agvWrkDetlExist && waitPakinExist && manPakoutExist) { // 出库订单重新整理明细 // DocType docType = docTypeService.selectById(order.getDocType()); // if (null != docType && docType.getPakout() == 1) { // // 重组明细 // if (!orderDetlService.delete(new EntityWrapper().eq("order_id", order.getId()))) { // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); // } // List wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo); // for (WrkDetl wrkDetl : wrkDetls) { // OrderDetl orderDetl = new OrderDetl(); // orderDetl.sync(wrkDetl); // orderDetl.setQty(orderDetl.getAnfme()); // orderDetl.setOrderId(order.getId()); // orderDetl.setOrderNo(orderNo); // orderDetl.setStatus(1); // orderDetl.setCreateTime(order.getCreateTime()); // orderDetl.setCreateBy(order.getCreateBy()); // orderDetl.setUpdateTime(order.getUpdateTime()); // orderDetl.setUpdateBy(order.getUpdateBy()); // if (!orderDetlService.insert(orderDetl)) { // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); // } // } // } if (!this.updateSettle(order.getId(), 4L, null)) { throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败"); } } } @Override public boolean saveHandlerOrder(Boolean pakin, WrkMast wrkMast, List wrkDetls) { try { List 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())) { 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().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 param = new HashMap<>(); param.put("id",order.getOrderNo()); param.put("dDate",sdf.format(new Date())); param.put("cHandler",username); List> orderDetlsParam = new ArrayList<>(); param.put("orderDetails",orderDetlsParam); List orderDetls = orderDetlService.selectByOrderId(orderId); for (OrderDetl orderDetl : orderDetls){ Map odMap = new HashMap<>(); odMap.put("autoid",orderDetl.getItemNum()); odMap.put("iQuantity",orderDetl.getQty()); orderDetlsParam.add(odMap); } int code = doHttpRequest(param, "单据审核", url, orderReportPath, null, "127.0.0.1"); //int code = doHttpRequest(param, "单据审核", "localhost:8080", "/test/report", null, "127.0.0.1"); if(code == 0){ order.setSettle(6L); this.updateById(order); } } @Override public List selectComplete() { return this.baseMapper.selectComplete(); } @Override public List mergePreview(List ids) { List result = new ArrayList<>(); for (Long orderId : ids) { Order order = this.selectById(orderId); // 获取所有未作业的明细 List 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 selectorderNoL(String orderNo) { return this.baseMapper.selectorderNoL(orderNo); } 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) .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 ); } } }