| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.Order; |
| | | import com.zy.asrs.entity.OrderDetl; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.OrderDetlService; |
| | | import com.zy.asrs.service.OrderService; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.common.constant.MesConstant; |
| | | import com.zy.common.model.MesPakinParam; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.asrs.utils.OrderInAndOutUtil; |
| | | import com.zy.common.model.DetlDto; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.jdbc.core.JdbcTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private OrderDetlService orderDetlService; |
| | | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | private InventoryCheckOrderDetlService inventoryCheckOrderDetlService; |
| | | |
| | | @Autowired |
| | | private DocTypeService docTypeService; |
| | | @Autowired |
| | | private ReportToThirdService reportToThirdService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> start(Order order) { |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | |
| | | MesPakinParam pakinParam = new MesPakinParam(); |
| | | pakinParam.setPakinTime(DateUtils.convert(order.getUpdateTime())); |
| | | pakinParam.setLgortFrom("5008"); |
| | | pakinParam.setLgortTo("5006"); |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | String serial = Cools.isEmpty(orderDetl.getBatch()) ? "" : orderDetl.getBatch(); |
| | | pakinParam.getList().add(new MesPakinParam.Detl(orderDetl.getMatnr() + (Cools.isEmpty(serial) ? "" : "-" + serial), orderDetl.getAnfme())); |
| | | public ReturnT<String> startOrderIssuedOnceMore(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | String response = ""; |
| | | boolean success = false; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(MesConstant.URL) |
| | | .setPath(MesConstant.PAKIN_URL) |
| | | .setJson(JSON.toJSONString(pakinParam)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | success = true; |
| | | // 修改订单状态 4.完成 ===>> 6.已上报 |
| | | if (!orderService.updateSettle(order.getId(), 6L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | } else { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", MesConstant.URL+MesConstant.PAKIN_URL, JSON.toJSONString(pakinParam), response); |
| | | throw new CoolException("上报mes系统失败"); |
| | | |
| | | Order order1 = OrderInAndOutUtil.selectByNo(order.getPakinPakoutStatus$(), order.getOrderNo()); |
| | | if (!Cools.isEmpty(order1)) { |
| | | return FAIL.setMsg("请等待...订单执行档案正在转历史档案!!!"); |
| | | } |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); |
| | | if (!Cools.isEmpty(orderDetls) || !orderDetls.isEmpty()) { |
| | | return FAIL.setMsg("请等待...订单执行明细档案正在转历史档案!!!"); |
| | | } |
| | | |
| | | // 单据明细档 |
| | | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId()); |
| | | for (OrderDetl orderDetl : orderDetlList) { |
| | | if (orderDetl.getQty().equals(0D)) { |
| | | continue; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("fail", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return FAIL.setMsg(e.getMessage()); |
| | | } finally { |
| | | try { |
| | | // 保存接口日志 |
| | | apiLogService.save( |
| | | "成品库入库上报", |
| | | MesConstant.URL + MesConstant.PAKIN_URL, |
| | | null, |
| | | "127.0.0.1", |
| | | JSON.toJSONString(pakinParam), |
| | | response, |
| | | success |
| | | ); |
| | | } catch (Exception e) { log.error("", e); } |
| | | orderDetl.setWorkQty(orderDetl.getQty()); |
| | | orderDetl.setAnfme(orderDetl.getAnfme() - orderDetl.getQty()); |
| | | orderDetl.setQty(0D); |
| | | orderDetlService.updateById(orderDetl); |
| | | } |
| | | |
| | | // 修改订单状态 99.再次作业 ===>> 1.待作业 |
| | | if (!orderService.updateSettle(order.getId(), 1L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> startOrderIssued(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | |
| | | OrderInAndOutUtil.insertOrder(order.getPakinPakoutStatus$(), order); |
| | | // 单据明细档 |
| | | List<DetlDto> list = new ArrayList<>(); |
| | | List<OrderDetl> orderDetlList = new ArrayList<>(); |
| | | |
| | | for (OrderDetl detail : orderDetls) { |
| | | DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getBrand(), detail.getStandby1(), detail.getStandby2(), detail.getStandby3(), |
| | | detail.getBoxType1(), detail.getBoxType2(), detail.getBoxType3(), detail.getAnfme()); |
| | | if (DetlDto.has(list, dto)) { |
| | | DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3()); |
| | | assert detlDto != null; |
| | | detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme()); |
| | | |
| | | OrderDetl orderDetl = OrderDetl.find(orderDetlList, dto.getMatnr(), dto.getBatch(), dto.getBrand(), dto.getStandby1(), dto.getStandby2(), dto.getStandby3(), dto.getBoxType1(), dto.getBoxType2(), dto.getBoxType3()); |
| | | assert orderDetl != null; |
| | | orderDetl.setAnfme(orderDetl.getAnfme() + detail.getAnfme()); |
| | | } else { |
| | | list.add(dto); |
| | | orderDetlList.add(detail); |
| | | } |
| | | } |
| | | for (OrderDetl orderDetl : orderDetlList) { |
| | | orderDetl.setWorkQty(0D); |
| | | OrderInAndOutUtil.insertOrderDetl(order.getPakinPakoutStatus$(), order, orderDetl); |
| | | } |
| | | // 修改订单状态 1.未作业 ===>> 2.作业中 |
| | | if (!orderService.updateSettle(order.getId(), 2L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> startOrderInAndOutUtil(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | // if (docType.getDocName().equals("销售发货")) { |
| | | // return SUCCESS; |
| | | // } |
| | | Order orderSou = orderService.selectByNo(order.getOrderNo()); |
| | | if (!orderSou.getSettle().equals(2L)) { |
| | | return FAIL.setMsg("订单状态不正确,请联系管理员"); |
| | | } |
| | | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(orderSou.getId()); |
| | | |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); |
| | | |
| | | for (OrderDetl orderDetlSou : orderDetlList) { |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getQty().equals(0D)) { |
| | | continue; |
| | | } |
| | | if (!Cools.isEmpty(orderDetlSou.getBatch())){ |
| | | if (orderDetlSou.beSimilar(orderDetl)) { |
| | | double v = orderDetlSou.getAnfme() - orderDetlSou.getQty(); |
| | | if (v < orderDetl.getQty() || orderDetl.getQty().equals(v)) { |
| | | orderDetlSou.setQty(orderDetlSou.getAnfme()); |
| | | orderDetl.setQty(orderDetl.getQty() - v); |
| | | break; |
| | | } else { |
| | | orderDetlSou.setQty(orderDetlSou.getQty() + orderDetl.getQty()); |
| | | orderDetl.setQty(0D); |
| | | } |
| | | } |
| | | }else { |
| | | if (orderDetlSou.beSimilar2(orderDetl)) { |
| | | double v = orderDetlSou.getAnfme() - orderDetlSou.getQty(); |
| | | if (v < orderDetl.getQty() || orderDetl.getQty().equals(v)) { |
| | | orderDetlSou.setQty(orderDetlSou.getAnfme()); |
| | | orderDetl.setQty(orderDetl.getQty() - v); |
| | | break; |
| | | } else { |
| | | orderDetlSou.setQty(orderDetlSou.getQty() + orderDetl.getQty()); |
| | | orderDetl.setQty(0D); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | for (OrderDetl orderDetlSou : orderDetlList) { |
| | | orderDetlService.updateById(orderDetlSou); |
| | | } |
| | | // 修改订单状态 2.作业中 ===>> 4.待上报 |
| | | if (!orderService.updateSettle(orderSou.getId(), 4L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | // 修改订单状态 4.完成 ===>> 6.结束 |
| | | OrderInAndOutUtil.updateOrder(order.getPakinPakoutStatus$(), order.getId(), 6L, null); |
| | | return SUCCESS; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> checkXSFH(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | if (!docType.getDocName().equals("销售发货")) { |
| | | return SUCCESS; |
| | | } |
| | | Order orderSou = orderService.selectByNo(order.getOrderNo()); |
| | | if (!orderSou.getSettle().equals(2L)) { |
| | | return FAIL.setMsg("订单状态不正确,请联系管理员"); |
| | | } |
| | | |
| | | List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); |
| | | boolean complete = true; |
| | | for (OrderDetl orderDetl : orderDetls) { |
| | | if (orderDetl.getAnfme() > orderDetl.getQty()) { |
| | | complete = false; |
| | | break; |
| | | } |
| | | } |
| | | if (complete) { |
| | | // 修改订单状态 2.作业中 ===>> 4.待上报 |
| | | if (!orderService.updateSettle(orderSou.getId(), 4L, null)) { |
| | | throw new CoolException("服务器内部错误,请联系管理员"); |
| | | } |
| | | // 修改订单状态 4.完成 ===>> 6.结束 |
| | | OrderInAndOutUtil.updateOrder(order.getPakinPakoutStatus$(), order.getId(), 6L, null); |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | public ReturnT<String> startOrderReport(Order order) { |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null == docType) { |
| | | return SUCCESS; |
| | | } |
| | | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); |
| | | try { |
| | | reportToThirdService.report(order, orderDetls, docType); |
| | | } catch (Exception e) { |
| | | return FAIL; |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | public ReturnT<String> reportCheck(InventoryCheckOrder checkOrder) { |
| | | List<InventoryCheckOrderDetl> checkOrderDetls = inventoryCheckOrderDetlService.selectList(new EntityWrapper<InventoryCheckOrderDetl>().eq("order_no", checkOrder.getOrderNo())); |
| | | for (InventoryCheckOrderDetl checkOrderDetl : checkOrderDetls) { |
| | | |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | } |