|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.task.handler; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSON; | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.DocType; | 
|---|
|  |  |  | import com.zy.asrs.entity.Order; | 
|---|
|  |  |  | import com.zy.asrs.entity.OrderDetl; | 
|---|
|  |  |  | import com.zy.asrs.entity.param.ReportErpParam; | 
|---|
|  |  |  | import com.zy.asrs.service.ApiLogService; | 
|---|
|  |  |  | import com.zy.asrs.service.DocTypeService; | 
|---|
|  |  |  | import com.zy.asrs.service.OrderDetlService; | 
|---|
|  |  |  | import com.zy.asrs.service.OrderService; | 
|---|
|  |  |  | import com.zy.asrs.task.AbstractHandler; | 
|---|
|  |  |  | import com.zy.asrs.task.core.ReturnT; | 
|---|
|  |  |  | import com.zy.common.service.erp.ErpService; | 
|---|
|  |  |  | import com.zy.common.service.erp.entity.VoucherDetail; | 
|---|
|  |  |  | import com.zy.common.utils.HttpHandler; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.jdbc.core.JdbcTemplate; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.transaction.interceptor.TransactionAspectSupport; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Arrays; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | public class OrderSyncHandler extends AbstractHandler<String> { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private JdbcTemplate jdbcTemplate; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderService orderService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderDetlService orderDetlService; | 
|---|
|  |  |  | 
|---|
|  |  |  | private ApiLogService apiLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DocTypeService docTypeService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ErpService erpService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${u8.url}") | 
|---|
|  |  |  | private String url; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${u8.orderReportPath}") | 
|---|
|  |  |  | private String orderReportPath; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> start(Order order) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<String> docNames = new ArrayList<>(Arrays.asList("银座采购入库单","银座委外材料出库单","银座委外入库单","银座生产材料出库单")); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DocType docType = docTypeService.selectById(order.getDocType()); | 
|---|
|  |  |  | if (null == docType) { | 
|---|
|  |  |  | if(!docNames.contains(docType.getDocName())){ | 
|---|
|  |  |  | order.setSettle(8L); | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!Cools.isEmpty(docType.getMemo())) { | 
|---|
|  |  |  | if (docType.getMemo().equals("hand")) { | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //        if("手动出库单".equals(docType.getDocName()) | 
|---|
|  |  |  | //                || "手动入库单".equals(docType.getDocName()) | 
|---|
|  |  |  | //                || "自动补货单".equals(docType.getDocName()) | 
|---|
|  |  |  | //                || "人工补货单".equals(docType.getDocName())){ | 
|---|
|  |  |  | //            order.setSettle(8L); | 
|---|
|  |  |  | //            orderService.updateById(order); | 
|---|
|  |  |  | //            return SUCCESS; | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ReportErpParam param = new ReportErpParam(); | 
|---|
|  |  |  | mappingParam(order,param); | 
|---|
|  |  |  | mappingParamChildren(orderDetlList,param); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int code = doHttpRequest(param, "单据审核", url, orderReportPath, null, "127.0.0.1"); | 
|---|
|  |  |  | if(code == 0){ | 
|---|
|  |  |  | order.setSettle(6L); | 
|---|
|  |  |  | orderService.updateById(order); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|---|
|  |  |  | // 入库完成上报 | 
|---|
|  |  |  | if (docType.getPakin() == 1) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // erp 同步 | 
|---|
|  |  |  | int state = 2; | 
|---|
|  |  |  | if (!erpService.updateStateForVoucher(order.getOrderNo(), state)) { | 
|---|
|  |  |  | throw new CoolException(order.getOrderNo() + "订单修改State为"+state+"失败"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | erpService.updateTimeForVoucherDetail(order.getOrderNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("fail", e); | 
|---|
|  |  |  | return FAIL.setMsg(e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 出库完成上报 | 
|---|
|  |  |  | if (docType.getPakout() == 1) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | double TotalNum = 0.0; | 
|---|
|  |  |  | Integer TotalCount = orderDetls.size(); | 
|---|
|  |  |  | // erp 同步 | 
|---|
|  |  |  | int state = 2; | 
|---|
|  |  |  | if (!erpService.updateStateForVoucher(order.getOrderNo(), state)) { | 
|---|
|  |  |  | throw new CoolException(order.getOrderNo() + "订单修改State为"+state+"失败"); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetls) { | 
|---|
|  |  |  | TotalNum = TotalNum + orderDetl.getAnfme(); | 
|---|
|  |  |  | if (null == erpService.selectVoucherDetail(order.getOrderNo(), orderDetl.getBatch())) { | 
|---|
|  |  |  | VoucherDetail voucherDetail = new VoucherDetail(); | 
|---|
|  |  |  | voucherDetail.setVoucherID(order.getOrderNo()); | 
|---|
|  |  |  | voucherDetail.setPickID("fepvnn0496"); | 
|---|
|  |  |  | voucherDetail.setBarcode(orderDetl.getBatch()); | 
|---|
|  |  |  | voucherDetail.setLastUpdatedDate(DateUtils.convert(now)); | 
|---|
|  |  |  | if (!erpService.insertVoucherDetail(voucherDetail)) { | 
|---|
|  |  |  | throw new CoolException(order.getOrderNo() + "订单添加VoucherDetail"+ JSON.toJSONString(voucherDetail)+"失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新重量和数量 | 
|---|
|  |  |  | if (!erpService.updateStateForVoucher(order.getOrderNo(), TotalNum, TotalCount)) { | 
|---|
|  |  |  | throw new CoolException(order.getOrderNo() + "订单修改重量和数量失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 修改订单状态 4.完成 ===>> 6.已上报 | 
|---|
|  |  |  | if (!orderService.updateSettle(order.getId(), 6L, null)) { | 
|---|
|  |  |  | throw new CoolException("服务器内部错误,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("fail", e); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | return FAIL.setMsg(e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void mappingParam(Order order, ReportErpParam param){ | 
|---|
|  |  |  | param.set操作系统号(order.getDefNumber()); | 
|---|
|  |  |  | param.set操作单据(order.getDocType$()); | 
|---|
|  |  |  | param.set操作类型("add"); | 
|---|
|  |  |  | param.setDdate(order.getOrderTime()); | 
|---|
|  |  |  | param.setCWhCode(""); | 
|---|
|  |  |  | param.setCDepCode("YZ"); | 
|---|
|  |  |  | param.setCOrderCode(order.getOrderNo()); | 
|---|
|  |  |  | param.setCMaker(""); | 
|---|
|  |  |  | param.setCHandler(""); | 
|---|
|  |  |  | param.setCDefine14(order.getOrderNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void mappingParamChildren(List<OrderDetl> orderDetlList, ReportErpParam param){ | 
|---|
|  |  |  | List<ReportErpParam.ChildInfo> paramChild = new ArrayList<>(); | 
|---|
|  |  |  | param.setChildren(paramChild); | 
|---|
|  |  |  | for (OrderDetl orderDetl : orderDetlList){ | 
|---|
|  |  |  | ReportErpParam.ChildInfo childInfo = new ReportErpParam.ChildInfo(); | 
|---|
|  |  |  | childInfo.setIrowno(orderDetl.getItemNum()); | 
|---|
|  |  |  | childInfo.setCInvCode(orderDetl.getMatnr()); | 
|---|
|  |  |  | childInfo.setIQuantity(orderDetl.getQty() + ""); | 
|---|
|  |  |  | childInfo.setCBatch(orderDetl.getBatch()); | 
|---|
|  |  |  | childInfo.setINum(orderDetl.getLength() + ""); | 
|---|
|  |  |  | childInfo.setIinvexchrate(""); | 
|---|
|  |  |  | childInfo.setBFree1(orderDetl.getDeadTime()); | 
|---|
|  |  |  | childInfo.setIPOsID(orderDetl.getSku()); | 
|---|
|  |  |  | childInfo.setCOrderCode(orderDetl.getOrderNo()); | 
|---|
|  |  |  | childInfo.setIvouchrowno(orderDetl.getItemNum()); | 
|---|
|  |  |  | childInfo.setCBatch(""); | 
|---|
|  |  |  | childInfo.setDefine22(orderDetl.getThreeCode()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | paramChild.add(childInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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("succeed"))){ | 
|---|
|  |  |  | throw new CoolException(jsonObject.get("dsc").toString()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String succeed = jsonObject.get("succeed").toString(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int code = Cools.eq("0",succeed) ? 0 : 1; | 
|---|
|  |  |  | if(code != 0){ | 
|---|
|  |  |  | throw new CoolException(jsonObject.get("dsc").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 | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|