| package com.zy.ints.task.scheduler; | 
|   | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.core.common.Cools; | 
| import com.zy.asrs.entity.DocType; | 
| import com.zy.asrs.entity.Order; | 
| import com.zy.asrs.entity.OrderDetl; | 
| 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.ints.entity.LkDetTb; | 
| import com.zy.ints.entity.LkDetTbBak; | 
| import com.zy.ints.erp.ErpSqlServer; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.scheduling.annotation.Scheduled; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.text.SimpleDateFormat; | 
| import java.util.Date; | 
| import java.util.HashMap; | 
| import java.util.List; | 
|   | 
| /** | 
|  * erp任务控制器 | 
|  * Created by vincent on 2020/11/27 | 
|  */ | 
| @Slf4j | 
| @Component | 
| public class LkDetTbScheduler { | 
|     /** | 
|      * ERP接口是否启用 | 
|      */ | 
|     @Value("${erp.enabled}") | 
|     private Boolean erpEnabled; | 
|     @Value("${erp.useName.ip}") | 
|     private String ip; | 
|     @Autowired | 
|     private ApiLogService apiLogService; | 
|     @Autowired | 
|     private ErpSqlServer erpSqlServer; | 
|     @Autowired | 
|     private OrderService orderService; | 
|     @Autowired | 
|     private OrderDetlService orderDetlService; | 
|     @Autowired | 
|     private DocTypeService docTypeService; | 
|   | 
|     /** | 
|      * 上报入出库完结订单信息 | 
|      */ | 
|     @Scheduled(cron = "${erp.refreshtime}") | 
|     public void reportOrder() { | 
|         if (!erpEnabled) return; | 
|         String sqlSelectLkDetTb = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb where 1=1"; | 
|         String sqlSelectLkDetTbBak = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb_bak where 1=1"; | 
|   | 
|         try { | 
|             List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L)); | 
|             if (orders.size() > 0) { | 
|                 for (Order order : orders) { | 
|                     List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId()); | 
|                     if (!Cools.isEmpty(orderDetls)) { | 
|                         for (OrderDetl orderDetl : orderDetls) { | 
|                             Date now = new Date(); | 
|                             List<LkDetTb> lkDetTbs = erpSqlServer.select(sqlSelectLkDetTb + | 
|                                             " and bill_no='" + orderDetl.getOrderNo() + "'" + | 
|                                             " and prd_no='" + orderDetl.getMatnr() + "'" + | 
|                                             " and prd_mark='" + orderDetl.getBatch() + "'" | 
|                                     , LkDetTb.class); | 
|                             List<LkDetTbBak> lkDetTbBaks = erpSqlServer.select(sqlSelectLkDetTbBak + | 
|                                             " and bill_no='" + orderDetl.getOrderNo() + "'" + | 
|                                             " and prd_no='" + orderDetl.getMatnr() + "'" + | 
|                                             " and prd_mark='" + orderDetl.getBatch() + "'" | 
|                                     , LkDetTbBak.class); | 
|                             if (lkDetTbs.size() == 1) { | 
|                                 callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "已经上报但是明细依旧存在,请联系开发人员!!!", false); | 
|                                 continue; | 
|                             } else if (lkDetTbBaks.size() == 1) { | 
|                                 callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "已经上报但是明细依旧存在,请联系开发人员!!!", false); | 
|                                 continue; | 
|                             } else if (lkDetTbs.size() > 1) { | 
|                                 callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "存在重复资料,联系开发人员!!!", false); | 
|                                 continue; | 
|                             } else if (lkDetTbBaks.size() > 1) { | 
|                                 callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "存在重复资料,联系开发人员!!!", false); | 
|                                 continue; | 
|                             } else { | 
|                                 String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); | 
|                                 HashMap<String, Object> condition = new HashMap<>(); | 
|                                 condition.put("bill_no", "'" + orderDetl.getOrderNo() + "'"); | 
|                                 condition.put("prd_no", "'" + orderDetl.getMatnr() + "'"); | 
|   | 
|                                 DocType docType = docTypeService.selectById(order.getDocType()); | 
|                                 if (!Cools.isEmpty(docType)) { | 
|                                     int addid = docType.getPakin() == 1 ? 1 : 2; | 
|                                     condition.put("iokindid", "'" + docType.getDocName$() + "'"); | 
|                                     condition.put("add_id", "'" + addid + "'"); | 
|                                 } | 
|   | 
|                                 condition.put("qty", "'" + orderDetl.getQty() + "'"); | 
|                                 condition.put("prd_mark", "'" + orderDetl.getBatch() + "'"); | 
|                                 condition.put("wh", "'" + orderDetl.getMemo() + "'"); | 
|                                 condition.put("billdate", "'" + format + "'"); | 
|                                 condition.put("status", "'" + 0 + "'"); | 
|                                 erpSqlServer.insert(LkDetTb.class, condition); | 
|                                 callApiLogSaveOrderDetl(orderDetl, "完结订单明细上报完成", true); | 
|                             } | 
|                             //保存订单明细历史档 | 
|                             if (orderDetlService.addToLogTable(orderDetl)) { | 
| //                                callApiLogSaveOrderDetl(orderDetl, "保存订单明细历史档成功!", true); | 
|                                 //删除订单明细 | 
|                                 orderDetlService.deleteById(orderDetl.getId()); | 
|                                 callApiLogSaveOrderDetl(orderDetl, "订单明细档保存后删除成功!", true); | 
|                             } | 
|                         } | 
|                         //保存订单历史档 | 
|                         if (orderService.addToLogTable(order)) { | 
| //                            callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档成功!!!", true); | 
|                             //删除完结订单 | 
|                             orderService.deleteById(order.getId()); | 
|                             callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档后删除完结订单成功!!!", true); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             Date date = new Date(); | 
|             log.error(date + ": 表名:lk_det_tb :" + e); | 
|         } | 
|     } | 
|   | 
|     public void callApiLogSaveLkDetTb(LkDetTb lkDetTb, String tableName, String response, Boolean bool) { | 
|         apiLogService.save("上报完结订单明细信息", tableName, "null", ip, | 
|                 "订单号:" + lkDetTb.getBillNo() + "、品号:" + lkDetTb.getPrdNo() + "、货品特征:" + lkDetTb.getPrdMark() + "、状态:" + lkDetTb.getStatus$(), | 
|                 response, bool); | 
|     } | 
|   | 
|     public void callApiLogSaveLkDetTbBak(LkDetTbBak lkDetTbBak, String tableName, String response, Boolean bool) { | 
|         apiLogService.save("上报完结订单明细信息", tableName, "null", ip, | 
|                 "订单号:" + lkDetTbBak.getBillNo() + "、品号:" + lkDetTbBak.getPrdNo() + "、货品特征:" + lkDetTbBak.getPrdMark() + "、状态:" + lkDetTbBak.getStatus$(), | 
|                 response, bool); | 
|     } | 
|   | 
|     public void callApiLogSaveOrderDetl(OrderDetl orderDetl, String response, Boolean bool) { | 
|         apiLogService.save("上报完结订单明细信息", "lk_det_tb", "null", ip, | 
|                 "订单号:" + orderDetl.getOrderNo() + "、品号:" + orderDetl.getMatnr() + "、货品特征:" + orderDetl.getBatch(), | 
|                 response, bool); | 
|     } | 
|   | 
|     public void callApiLogSaveOrder(Order order, String response, Boolean bool) { | 
|         apiLogService.save("完结订单信息上报完成", "lk_det_tb", "null", ip, | 
|                 "订单号:" + order.getOrderNo(), response, bool); | 
|     } | 
| } |