package com.zy.asrs.wms.task.handler; 
 | 
  
 | 
  
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.alibaba.fastjson.JSONArray; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.zy.asrs.common.sys.entity.OperateLog; 
 | 
import com.zy.asrs.common.sys.service.OperateLogService; 
 | 
import com.zy.asrs.common.utils.HttpHandler; 
 | 
import com.zy.asrs.common.utils.Utils; 
 | 
import com.zy.asrs.common.wms.entity.Order; 
 | 
import com.zy.asrs.common.wms.entity.WaitPakin; 
 | 
import com.zy.asrs.common.wms.entity.WrkDetl; 
 | 
import com.zy.asrs.common.wms.entity.WrkMast; 
 | 
import com.zy.asrs.common.wms.service.*; 
 | 
import com.zy.asrs.framework.common.Cools; 
 | 
import com.zy.asrs.wms.task.AbstractHandler; 
 | 
import com.zy.asrs.wms.task.core.ReturnT; 
 | 
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 org.springframework.transaction.interceptor.TransactionAspectSupport; 
 | 
  
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * Created by vincent on 2020/7/6 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class WorkLogHandler extends AbstractHandler<String> { 
 | 
  
 | 
    @Autowired 
 | 
    private WrkMastService wrkMastService; 
 | 
    @Autowired 
 | 
    private WrkMastLogService wrkMastLogService; 
 | 
    @Autowired 
 | 
    private WrkDetlService wrkDetlService; 
 | 
    @Autowired 
 | 
    private WrkDetlLogService wrkDetlLogService; 
 | 
    @Autowired 
 | 
    private WaitPakinService waitPakinService; 
 | 
    @Autowired 
 | 
    private WaitPakinLogService waitPakinLogService; 
 | 
    @Autowired 
 | 
    private OrderService orderService; 
 | 
    @Autowired 
 | 
    private OperateLogService operateLogService; 
 | 
  
 | 
    @Value("${erp.url}") 
 | 
    private String ERP_URL; 
 | 
  
 | 
    @Value("${erp.report}") 
 | 
    private String ERP_REPORT; 
 | 
  
 | 
    @Value("${erp.login}") 
 | 
    private String ERP_LOGIN; 
 | 
  
 | 
    // update asr_wrk_mast set inv_wh = 'Y', ove_mk = 'Y' where wrk_no = 
 | 
    @Transactional 
 | 
    public ReturnT<String> start(WrkMast wrkMast) { 
 | 
        Long hostId = wrkMast.getHostId(); 
 | 
        try { 
 | 
            List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId)); 
 | 
            // 区分订单任务 
 | 
            List<WrkDetl> wrkDetlsKeyOrder = new ArrayList<>(); 
 | 
            if (!Cools.isEmpty(wrkDetls)) { 
 | 
                Iterator<WrkDetl> iterator = wrkDetls.iterator(); 
 | 
                while (iterator.hasNext()) { 
 | 
                    WrkDetl wrkDetl = iterator.next(); 
 | 
                    if (!Cools.isEmpty(wrkDetl.getOrderNo())) { 
 | 
                        wrkDetlsKeyOrder.add(wrkDetl); 
 | 
                        iterator.remove(); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            // 入库 -------------------------------------------------------------------------------- 
 | 
            if (wrkMast.getWrkSts() == 100) { 
 | 
                // 全板入库 
 | 
                if (wrkMast.getIoType() == 1) { 
 | 
                    // 入库通知单 
 | 
                    if (!Cools.isEmpty(wrkMast.getBarcode())) { 
 | 
                        // 保存入库通知档历史档 
 | 
                        if (!waitPakinLogService.saveToHistory(wrkMast.getBarcode(), hostId)) { 
 | 
                            exceptionHandle("保存入库通知档历史档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                        } 
 | 
                        // 删除入库通知档 
 | 
                        if (!waitPakinService.remove(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getZpallet, wrkMast.getBarcode()).eq(WaitPakin::getHostId, hostId))) { 
 | 
                            exceptionHandle("删除入库通知档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                        } 
 | 
                    } 
 | 
//                    // 手动入库生成单据 【 上报三方平台 】 
 | 
//                    if (!Cools.isEmpty(wrkDetls)) { 
 | 
//                        if (!orderService.saveHandlerOrder(Boolean.TRUE, wrkMast, wrkDetls, hostId)) { 
 | 
//                            exceptionHandle("生成手动入库单据[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
//                        } 
 | 
//                    } 
 | 
                    // 拣料再入库 
 | 
                } else if (wrkMast.getIoType() == 53) { 
 | 
                    if (!Cools.isEmpty(wrkDetls)) { 
 | 
                        if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) { 
 | 
                            exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                // 出库 -------------------------------------------------------------------------------- 
 | 
            } else if (wrkMast.getWrkSts() == 200) { 
 | 
                if (!Cools.isEmpty(wrkDetls)) { 
 | 
                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls, hostId)) { 
 | 
                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (!wrkDetlsKeyOrder.isEmpty()) { 
 | 
                //上报念初ERP   【 上报三方平台 】 
 | 
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
 | 
                String nowFormat = dateFormat.format(new Date()); 
 | 
  
 | 
                ArrayList<LinkedHashMap<String, Object>> mats = new ArrayList<>(); 
 | 
                String orderNo = ""; 
 | 
                for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { 
 | 
                    orderNo = wrkDetl.getOrderNo(); 
 | 
                    LinkedHashMap<String, Object> mat = new LinkedHashMap<>(); 
 | 
                    mat.put("GoodsCode", wrkDetl.getMatnr()); 
 | 
                    mat.put("Num", wrkDetl.getAnfme()); 
 | 
                    if (!Cools.isEmpty(wrkDetl.getBatch())) { 
 | 
                        mat.put("BatchNo", wrkDetl.getBatch()); 
 | 
                    } 
 | 
                    if (!Cools.isEmpty(wrkDetl.getThreeCode())) { 
 | 
                        mat.put("DepotName", wrkDetl.getThreeCode()); 
 | 
                    } 
 | 
                    if (!Cools.isEmpty(wrkDetl.getSupp())) { 
 | 
                        mat.put("FromDanCode", wrkDetl.getSupp()); 
 | 
                    } 
 | 
                    if (!Cools.isEmpty(wrkDetl.getSuppCode())) { 
 | 
                        mat.put("FromNo", wrkDetl.getSuppCode()); 
 | 
                    } 
 | 
                    mats.add(mat); 
 | 
                } 
 | 
                Order order = orderService.selectByNo(orderNo, hostId); 
 | 
                if (order != null) { 
 | 
                    LinkedHashMap<String, Object> param = new LinkedHashMap<>(); 
 | 
                    param.put("Login", ERP_LOGIN); 
 | 
                    param.put("DanType", order.getDocType$()); 
 | 
                    param.put("Date", nowFormat); 
 | 
                    param.put("DanCode", orderNo); 
 | 
                    param.put("Data", mats); 
 | 
  
 | 
                    String response = ""; 
 | 
                    try { 
 | 
                        response = new HttpHandler.Builder() 
 | 
                                .setUri(ERP_URL) 
 | 
                                .setPath(ERP_REPORT + Utils.ncErpDataEncode(param)) 
 | 
                                .build() 
 | 
                                .doGet(); 
 | 
                        JSONObject jsonObject = JSON.parseObject(response); 
 | 
                        JSONArray result = jsonObject.getJSONArray("result"); 
 | 
                        Object object = result.get(0); 
 | 
                        JSONObject data = JSON.parseObject(object.toString()); 
 | 
                        if (data.getBoolean("State")) { 
 | 
                            //上报成功 
 | 
                        } else { 
 | 
                            //上报失败 
 | 
                            exceptionHandle("上报ERP失败[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                        } 
 | 
                    } catch (Exception e) { 
 | 
                        e.printStackTrace(); 
 | 
                        //异常上报失败 
 | 
                        exceptionHandle("上报ERP异常失败[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
                    } finally { 
 | 
                        //记录上报数据 
 | 
                        OperateLog operateLog = new OperateLog(); 
 | 
                        operateLog.setAction("上报ERP," + ERP_URL + ERP_REPORT); 
 | 
                        operateLog.setRequest(Utils.ncErpDataEncode(param)); 
 | 
                        operateLog.setResponse(response); 
 | 
                        operateLog.setCreateTime(new Date()); 
 | 
                        operateLog.setSystem("WMS"); 
 | 
                        operateLog.setUserId(9527L); 
 | 
                        operateLog.setIp("127.0.0.1"); 
 | 
                        operateLogService.save(operateLog); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            // 保存工作主档历史档 
 | 
            if (!wrkMastLogService.saveToHistory(wrkMast.getId())) { 
 | 
                exceptionHandle("保存工作历史档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
            } 
 | 
            // 删除工作主档 
 | 
            if (!wrkMastService.removeById(wrkMast)) { 
 | 
                exceptionHandle("删除工作主档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
            } 
 | 
            // 保存工作明细档历史档 
 | 
            if (!wrkDetlLogService.saveToHistory(wrkMast.getWrkNo(), hostId)) { 
 | 
//                exceptionHandle("保存工作明细历史档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
            } 
 | 
            // 删除工作明细档 
 | 
            if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) { 
 | 
//                exceptionHandle("删除工作明细档[workNo={0}]失败", wrkMast.getWrkNo()); 
 | 
            } 
 | 
            // 修改订单状态 作业中 ===>> 已完成 
 | 
            for (WrkDetl wrkDetl : wrkDetlsKeyOrder) { 
 | 
                orderService.checkComplete(wrkDetl.getOrderNo(), hostId); 
 | 
            } 
 | 
        } catch (Exception e) { 
 | 
            log.error("fail", e); 
 | 
            e.printStackTrace(); 
 | 
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 
 | 
            return FAIL.setMsg(e.getMessage()); 
 | 
        } 
 | 
        return SUCCESS; 
 | 
    } 
 | 
  
 | 
} 
 |