package com.doumee.service.business.impl.thrid; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.alibaba.fastjson.TypeReference; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.HttpsUtil; 
 | 
import com.doumee.core.utils.SmsConstants; 
 | 
import com.doumee.core.wms.model.request.*; 
 | 
import com.doumee.core.wms.model.response.WmsBaseDataResponse; 
 | 
import com.doumee.core.wms.model.response.WmsBaseResponse; 
 | 
import com.doumee.core.wx.wxPlat.WxPlatConstants; 
 | 
import com.doumee.core.wx.wxPlat.WxPlatNotice; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.dao.MemberMapper; 
 | 
import com.doumee.dao.business.dao.SmsConfigMapper; 
 | 
import com.doumee.dao.business.dao.SmsEmailMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
  
 | 
import com.doumee.dao.business.model.Member; 
 | 
import com.doumee.dao.system.SystemUserMapper; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.service.business.impl.SmsEmailServiceImpl; 
 | 
import com.doumee.service.business.third.EmayService; 
 | 
import com.doumee.service.business.third.WmsService; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.checkerframework.checker.units.qual.A; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * WMS平台对接Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class WmsServiceImpl implements WmsService { 
 | 
    @Autowired 
 | 
    private PlatformWmsJobMapper platformWmsJobMapper; 
 | 
    @Autowired 
 | 
    private PlatformGroupMapper platformGroupMapper; 
 | 
    @Autowired 
 | 
    private CarsMapper carsMapper; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private SystemUserMapper systemUserMapper; 
 | 
    @Autowired 
 | 
    private PlatformJobMapper platformJobMapper; 
 | 
    @Autowired 
 | 
    private PlatformWmsDetailMapper platformWmsDetailMapper; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
    @Autowired 
 | 
    private WmsInterfaceLogMapper wmsInterfaceLogMapper; 
 | 
    @Autowired 
 | 
    private SmsConfigMapper smsConfigMapper; 
 | 
    @Autowired 
 | 
    private SmsEmailMapper smsEmailMapper; 
 | 
    @Autowired 
 | 
    private EmayService emayService; 
 | 
    @Autowired 
 | 
    private RetentionMapper retentionMapper; 
 | 
    @Autowired 
 | 
    private WxNoticeConfigMapper wxNoticeConfigMapper; 
 | 
    @Autowired 
 | 
    private PlatformLogMapper platformLogMapper; 
 | 
    /** 
 | 
     * 入库通知任务业务处理 
 | 
     * @param job 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public  WmsBaseResponse<WmsBaseDataResponse> orderPlatformBind(PlatformJob job) { 
 | 
        if(StringUtils.isBlank(job.getBillCode()) || StringUtils.isBlank(job.getPlatformWmsCode())){ 
 | 
            return null; 
 | 
        } 
 | 
        int type = 0; 
 | 
        if(Constants.equalsInteger(job.getType(),Constants.ONE) 
 | 
                || Constants.equalsInteger(job.getType(),Constants.THREE)){ 
 | 
            //如果是装货(出库) 
 | 
            type =1 ; 
 | 
        }else if(Constants.equalsInteger(job.getType(),Constants.ZERO) 
 | 
                || Constants.equalsInteger(job.getType(),Constants.TWO)){ 
 | 
            //如果是装货(出库) 
 | 
            type =0 ; 
 | 
        }else{ 
 | 
            return null; 
 | 
        } 
 | 
        List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                .eq(PlatformWmsDetail::getJobId,job.getId()) 
 | 
                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
        ); 
 | 
        String url = type == 0?systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_INBOUND_PLATFROM_URL).getCode(): 
 | 
                systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_OUTBOUND_PLATFROM_URL).getCode();; 
 | 
        String name = type ==0?"【WMS】入库作业单分配月台":"【WMS】出库作业的分配月台"; 
 | 
//        int sendSuccess = 0; 
 | 
//        int sendError = 0; 
 | 
        List<String> errorMassge = new ArrayList<>(); 
 | 
        List<String> successMassge = new ArrayList<>(); 
 | 
        WmsBaseResponse<WmsBaseDataResponse> response = null; 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){ 
 | 
            for (PlatformWmsDetail platformWmsDetail:platformWmsDetailList) { 
 | 
                if(StringUtils.isNotBlank(platformWmsDetail.getIocode())){ 
 | 
                    //只处理未发送的请求 
 | 
                    WmsOrderPlatformRequest  param  = new WmsOrderPlatformRequest(); 
 | 
                    param.setData(new ArrayList<>()); 
 | 
                    WmsOrderPlatformInfoRequest o = new WmsOrderPlatformInfoRequest(); 
 | 
                    o.setCarrierBillCode(platformWmsDetail.getIocode()); 
 | 
                    o.setRailwayNo(job.getPlatformWmsCode()); 
 | 
                    param.getData().add(o); 
 | 
                    response = sendHttpRequest(url,name,JSONObject.toJSONString(param),new TypeReference< WmsBaseResponse<WmsBaseDataResponse>>(){}); 
 | 
                    if(response!=null && response.getData() !=null 
 | 
                            && response.getData().size()>0 && StringUtils.equals(response.getData().get(0).getSuccess(),WmsBaseResponse.CODE_SUCCESS)){ 
 | 
                        //如果成功 
 | 
                        successMassge.add(o.getRailwayNo()); 
 | 
                    }else{ 
 | 
                        //如果失败 
 | 
                        errorMassge.add(o.getRailwayNo()); 
 | 
                   } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        if(successMassge.size()>0 || errorMassge.size()>0){ 
 | 
            PlatformJob update = new PlatformJob(); 
 | 
            update.setId(job.getId()); 
 | 
            update.setWmsSendDate(new Date()); 
 | 
            if(Objects.isNull(job.getWmsSendNum())){ 
 | 
                job.setWmsSendNum(1); 
 | 
            }else{ 
 | 
                update.setWmsSendNum(job.getWmsSendNum() + 1); 
 | 
            } 
 | 
            update.setWmsSendPlatformCode(job.getPlatformWmsCode()); 
 | 
            if(successMassge.size()>0 && errorMassge.size() ==0){ 
 | 
                //如果成功 
 | 
                update.setWmsSendStatus(Constants.ONE); 
 | 
            }else if(successMassge.size()==0 && errorMassge.size() >1){ 
 | 
                //如果失败 
 | 
                update.setWmsSendStatus(Constants.TWO); 
 | 
            } 
 | 
            Map<String ,Object> info= new HashMap<>(); 
 | 
            info.put("success", successMassge); 
 | 
            info.put("error", errorMassge); 
 | 
            update.setWmsSendInfo(JSONObject.toJSONString(info)); 
 | 
            platformJobMapper.updateById(update); 
 | 
        } 
 | 
  
 | 
         return response; 
 | 
  
 | 
    } 
 | 
  
 | 
    private boolean notSendedCode(String iocode, List<String> doneIoCode) { 
 | 
        if(doneIoCode!=null){ 
 | 
            for(String s : doneIoCode){ 
 | 
                if(StringUtils.equals(iocode,s)){ 
 | 
                    return false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 入库通知任务业务处理 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public WmsBaseResponse<WmsBaseDataResponse> getInventoryList(){ 
 | 
         String url =  systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_GET_INVENTORYLIST_URL).getCode() ; 
 | 
         String name = "【WMS】库存查询" ; 
 | 
         WmsBaseResponse<WmsBaseDataResponse> response = sendHttpRequest(url,name,JSONObject.toJSONString(new JSONObject()),new TypeReference< WmsBaseResponse<WmsBaseDataResponse>>(){}); 
 | 
        if(response!=null 
 | 
                && response.getData() !=null 
 | 
                && response.getData().size()>0 
 | 
                && StringUtils.equals(response.getData().get(0).getSuccess(),WmsBaseResponse.CODE_SUCCESS)){ 
 | 
            //如果请求成功 
 | 
  
 | 
        }else{ 
 | 
            //如果失败 
 | 
            if(response ==null){ 
 | 
                response = new WmsBaseResponse(); 
 | 
                response.setData(new ArrayList<>()); 
 | 
            } 
 | 
            if(response.getData() == null){ 
 | 
                response.setData(new ArrayList<>()); 
 | 
            } 
 | 
        } 
 | 
         return response; 
 | 
  
 | 
    } 
 | 
    @Override 
 | 
    public  void  saveInterfaceLog(String url,String name,String  param,Integer success,String respone,int type){ 
 | 
        if(wmsInterfaceLogMapper ==null){ 
 | 
            return; 
 | 
        } 
 | 
        WmsInterfaceLog log = new WmsInterfaceLog(); 
 | 
        log.setCreateDate(new Date()); 
 | 
        log.setUrl(url); 
 | 
        log.setEditDate(log.getCreateDate()); 
 | 
        log.setPlat(Constants.ZERO); 
 | 
        log.setName(name); 
 | 
        log.setIsdeleted(Constants.ZERO); 
 | 
        log.setRequest(param); 
 | 
        log.setType(type); 
 | 
        log.setSuccess(success); 
 | 
        log.setRepose(respone); 
 | 
        wmsInterfaceLogMapper.insert(log); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 发起wms接口请求 
 | 
     * @param url 
 | 
     * @param name 
 | 
     * @param param 
 | 
     * @param typeReference 
 | 
     * @return 
 | 
     * @param <T> 
 | 
     */ 
 | 
    public  <T> WmsBaseResponse<T> sendHttpRequest(String url, String name, String param,TypeReference<WmsBaseResponse<T>> typeReference){ 
 | 
        log.info("【"+name+"】================开始===="+ JSONObject.toJSONString(param)); 
 | 
        if ( StringUtils.isNotBlank(url)) { 
 | 
            String res = null; 
 | 
            int success = 0; 
 | 
            try { 
 | 
                Map<String,String> headers = new HashMap<>(); 
 | 
                res = HttpsUtil.postJson(url,param); 
 | 
                WmsBaseResponse result = JSONObject.parseObject(res, typeReference.getType()); 
 | 
                logResult(result,name); 
 | 
                if(result!=null && result.getData() !=null ){ 
 | 
  
 | 
                }else{ 
 | 
                    success =1; 
 | 
                } 
 | 
                return  result; 
 | 
            }catch (Exception e){ 
 | 
                success = 1; 
 | 
                e.printStackTrace(); 
 | 
                log.error("【"+name+"】================失败===="+ JSONObject.toJSONString(param)); 
 | 
            }finally { 
 | 
                saveInterfaceLog(url,name,param,success,res,Constants.ZERO); 
 | 
            } 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    private static void logResult(WmsBaseResponse<WmsBaseDataResponse> res,String name) { 
 | 
        if(StringUtils.equals(res.getData().get(0).getSuccess(), WmsBaseResponse.CODE_SUCCESS)){ 
 | 
            log.info("【WMS接口:"+name+"】================成功====\n"+ JSONObject.toJSONString(res)); 
 | 
        }else{ 
 | 
            log.error("【WMS接口:"+name+"】================失败====:\n"+  JSONObject.toJSONString(res)); 
 | 
        } 
 | 
    } 
 | 
    /** 
 | 
     * 入库通知任务业务处理 
 | 
     * @param list 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    @Transactional 
 | 
    public WmsBaseResponse<WmsBaseDataResponse> inboundNotice(WmsBaseRequest<WmsInboundNoticeRequest> list) { 
 | 
        try{ 
 | 
            if(list ==null || list.getData()==null|| list.getData().size() ==0){ 
 | 
                return returnFailReuslt("请求参数不正确,参数不能为空"); 
 | 
            } 
 | 
            List<PlatformJob> jobList = new ArrayList<>(); 
 | 
            List<Integer> jobIdList = new ArrayList<>(); 
 | 
            List<PlatformWmsDetail> details = new ArrayList<>(); 
 | 
            List<String> iocodeList = new ArrayList<>(); 
 | 
            for(WmsInboundNoticeRequest param : list.getData()){ 
 | 
                if(StringUtils.isBlank(param.getIoCode()) || 
 | 
                        StringUtils.isBlank(param.getCarrierBillCode())|| 
 | 
                        StringUtils.isBlank(param.getPlateNumber())|| 
 | 
                        StringUtils.isBlank(param.getDriverPhone())){ 
 | 
                    return returnFailReuslt("请求参数不正确,参数不合法!"); 
 | 
                } 
 | 
                //根据承运单号查询任务信息 
 | 
                PlatformWmsJob job = platformWmsJobMapper.selectOne(new QueryWrapper<PlatformWmsJob>().lambda() 
 | 
                        .eq(PlatformWmsJob::getCarryBillCode,param.getCarrierBillCode()) 
 | 
                        .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO) 
 | 
                        .last("limit 1" )); 
 | 
  
 | 
                if(job == null){ 
 | 
                    PlatformJob model =dealJobBizInbound(param); 
 | 
                    job = new PlatformWmsJob(); 
 | 
                    job.setCreateDate(new Date()); 
 | 
                    job.setIsdeleted(Constants.ZERO); 
 | 
                    job.setIsNew(Constants.ONE); 
 | 
                    job.setStatus(Constants.ONE); 
 | 
                    job.setContractNum(param.getContractNum()); 
 | 
                    job.setCarryBillCode(param.getCarrierBillCode()); 
 | 
                    job.setIocode(param.getIoCode()); 
 | 
                    job.setCarrierName(param.getCarrierName()); 
 | 
                    job.setDriverName(param.getDriverName()); 
 | 
                    job.setPlateNumber(param.getPlateNumber()); 
 | 
                    job.setType(Constants.ZERO); 
 | 
                    job.setIoCreatedate(param.getCreateDate()); 
 | 
//                    job.setOrigin(Constants.ONE); 
 | 
                    job.setJobId(model.getId()); 
 | 
                    job.setDriverPhone(param.getDriverPhone()); 
 | 
                    platformWmsJobMapper.insert(job); 
 | 
                    jobList.add(model); 
 | 
                } 
 | 
                jobIdList.add(job.getJobId()); 
 | 
                if(param.getDetails()!=null && param.getDetails().size()>0){ 
 | 
                    for(WmsInboundDetailRequest d :param.getDetails()){ 
 | 
                        PlatformWmsDetail entity = new PlatformWmsDetail(); 
 | 
                        entity.setCreateDate(new Date()); 
 | 
                        entity.setIsdeleted(Constants.ZERO); 
 | 
                        entity.setIocode(d.getIoCode()); 
 | 
                        entity.setJobId(job.getJobId()); 
 | 
                        entity.setContractNum(param.getContractNum()); 
 | 
                        entity.setWmsJobId(job.getId()); 
 | 
                        entity.setStatus(Constants.ZERO); 
 | 
                        entity.setIoQty(Constants.formatBigdecimal(d.getIoQty()).multiply(Constants.formatBigdecimal( d.getRate()))); 
 | 
                        entity.setRate(Objects.nonNull(d.getRate())?Constants.formatBigdecimal(d.getRate()).doubleValue()+"":"1"); 
 | 
                        entity.setMaterialName(d.getMaterialName()); 
 | 
                        entity.setInRepertotyCode(d.getInRepertotyCode()); 
 | 
                        iocodeList.add(d.getIoCode()); 
 | 
                        details.add(entity); 
 | 
                    } 
 | 
                    if(job.getIsNew() != 1&& iocodeList.size()>0){ 
 | 
                        //先清理同一个承运单号下重复推送的iocode数据,以最后一次推送为主 
 | 
                        platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                                .set(PlatformWmsDetail::getIsdeleted,Constants.ONE) 
 | 
                                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
                                .eq(PlatformWmsDetail::getWmsJobId,job.getId()) 
 | 
                                .in(PlatformWmsDetail::getIocode,iocodeList) 
 | 
                        ); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if(details.size()>0){ 
 | 
                platformWmsDetailMapper.insert(details); 
 | 
            } 
 | 
            list.setJobIdList(jobIdList); 
 | 
            if(jobList.size()>0){ 
 | 
                startEndNoticeToDriver(jobList); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            log.error("【WMS】处理入库取消通知业务===============业务处理异常"+e.getMessage()); 
 | 
            return returnFailReuslt("业务处理异常"); 
 | 
        } 
 | 
        return returnSuccessReuslt(null); 
 | 
    } 
 | 
  
 | 
  
 | 
    private void startEndNoticeToDriver(List<PlatformJob> jobList) { 
 | 
        for(PlatformJob job : jobList){ 
 | 
            //短信通知 
 | 
            if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.WAIT_CONFIRM.getKey())){ 
 | 
                SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                        emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,job.getId(), 
 | 
                        SmsConstants.platformJobContent.platformJobNewJob,null,null 
 | 
                ); 
 | 
                //查询司机信息 发送公众号通知 
 | 
                if(Objects.nonNull(job.getDriverId())){ 
 | 
                    //发送公众号通知 给提交人 
 | 
                    SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() 
 | 
                            .eq(SystemUser::getDeleted, Constants.ZERO) 
 | 
                            .eq(SystemUser::getType, Constants.ZERO) 
 | 
                            .eq(SystemUser::getMobile,job.getDrivierPhone()) 
 | 
                            .last(" limit 1 ")); 
 | 
                    if(Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())){ 
 | 
                        WxPlatNotice wxPlatNotice = new WxPlatNotice(); 
 | 
                        wxPlatNotice.sendWmsTemplateNotice(systemDictDataBiz, 
 | 
                                wxNoticeConfigMapper,job, 
 | 
                                WxPlatConstants.platformJobContent.platformJobNewJob, 
 | 
                                Arrays.asList(driver.getOpenid().split(",")) 
 | 
                        ); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private PlatformJob dealJobBizInbound(WmsInboundNoticeRequest param) { 
 | 
        PlatformJob job = new PlatformJob(); 
 | 
        job.setCreateDate(new Date()); 
 | 
        job.setIsdeleted(Constants.ZERO); 
 | 
        job.setType(Constants.platformJobType.wxcxh);//默认是外协车卸货 
 | 
        job.setStatus(Constants.PlatformJobStatus.WAIT_CONFIRM.getKey());//默认待确认状态 
 | 
        job.setBillCode(param.getCarrierBillCode()); 
 | 
        job.setCarrierName(param.getCarrierName()); 
 | 
        job.setCarCodeFront(param.getPlateNumber()); 
 | 
        job.setDrivierPhone(param.getDriverPhone()); 
 | 
        job.setDriverName(param.getDriverName()); 
 | 
        job.setOrigin(Constants.ONE); 
 | 
        //处理作业的车辆、司机、月台组关联关系,卸货 
 | 
        dealCarPlatformAndDriverInfo(job,0); 
 | 
//        platformJobMapper.insert(job); 
 | 
        return job; 
 | 
    } 
 | 
  
 | 
    private void dealCarPlatformAndDriverInfo(PlatformJob job,int type) { 
 | 
        //查询车辆是否自有车,以及jobNum表示但求作业数量(非已离园的作业数) 
 | 
        Cars car = carsMapper.selectOne(new QueryWrapper<Cars>() 
 | 
                .select("*,(select count(1) from platform_job b where b.plate_num='"+job.getCarCodeFront()+"' " + 
 | 
                        "and b.status in("+ 
 | 
                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.WART_SIGN_IN.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.WAIT_CALL.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.IN_WAIT.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.CALLED.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.TRANSFERING.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.OVER_NUMBER.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.EXCEPTION.getKey()+","+ 
 | 
                        Constants.PlatformJobStatus.WORKING.getKey()+")) as jobNum") 
 | 
                .lambda() 
 | 
                .eq(Cars::getIsdeleted,Constants.ZERO) 
 | 
                .eq(Cars::getType,Constants.ONE) 
 | 
                .eq(Cars::getCode,job.getCarCodeFront())); 
 | 
        if(car !=null){ 
 | 
            //如果是自有物流车 
 | 
            job.setType(type==0?Constants.platformJobType.zycxh:Constants.platformJobType.zyczh);//自有车卸货/装货 
 | 
            job.setCarCodeBack(job.getCarCodeFront());//自有车默认前后车牌一样 
 | 
            if(job.getType() ==Constants.platformJobType.zyczh 
 | 
                    && retentionMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,Constants.THREE) 
 | 
                    .eq(Retention::getCarNo,car.getCode()))>Constants.ZERO 
 | 
                    && car.getJobNum() == 0){ 
 | 
                //如果车辆在园 
 | 
                job.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey());//在园无作业状态,则自动【已签到】处理 
 | 
                job.setArriveDate(new Date()); 
 | 
                job.setSingType(Constants.TWO); 
 | 
                job.setSignDate(new Date()); 
 | 
                List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>(). 
 | 
                        lambda().apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  ") 
 | 
                ); 
 | 
                if(CollectionUtils.isEmpty(signList)){ 
 | 
                    job.setSignNum(Constants.ONE); 
 | 
                } else{ 
 | 
                    int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList())); 
 | 
                    job.setSignNum(maxNumber + Constants.ONE); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        PlatformGroup group = platformGroupMapper.selectOne(new QueryWrapper<PlatformGroup>().lambda() 
 | 
                .eq(PlatformGroup::getIsVirtual,Constants.ZERO)//非虚拟月台 
 | 
                .eq(PlatformGroup::getIsdeleted,Constants.ZERO) 
 | 
                .eq(PlatformGroup::getType,type==0?Constants.ZERO:Constants.ONE) 
 | 
                .last("limit 1") );//查询卸货月台组编码 
 | 
        job.setPlatformGroupId(group!=null?group.getId():null); 
 | 
        Member driver =  memberMapper.selectJoinOne(Member.class,new MPJLambdaWrapper<Member>() 
 | 
                .selectAll(Member.class) 
 | 
                .selectAs(Company::getCompanyNamePath,Member::getCompanyNamePath) 
 | 
                .leftJoin(Company.class,Company::getId,Member::getCompanyId) 
 | 
                .eq(Member::getIsdeleted,Constants.ZERO) 
 | 
                .eq(Member::getPhone,job.getDrivierPhone()) 
 | 
                .last("limit 1") );//查询装货月台组编码 
 | 
        if(driver!=null){ 
 | 
            job.setDriverId(driver.getId()); 
 | 
            job.setCompanyId(driver.getCompanyId()); 
 | 
            job.setCompanyNamePath(driver.getCompanyNamePath()); 
 | 
        } 
 | 
        platformJobMapper.insert(job); 
 | 
        if(car !=null){ 
 | 
            //存储操作日志 
 | 
            PlatformLog platformLog = new PlatformLog(); 
 | 
            platformLog.setIsdeleted(Constants.ZERO); 
 | 
            platformLog.setCreateDate(new Date()); 
 | 
            platformLog.setJobId(job.getId()); 
 | 
            platformLog.setObjType(Constants.PlatformJobLogType.SIGN.getKey()); 
 | 
            platformLog.setContent("自动签到"); 
 | 
            platformLog.setParam4(job.getCarCodeFront()); 
 | 
            platformLog.setAfterContent(JSONObject.toJSONString(job)); 
 | 
            platformLog.setObjId(job.getId().toString()); 
 | 
            platformLog.setParam3("0"); 
 | 
            platformLogMapper.insert(platformLog); 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
    private PlatformJob dealJobBizOutbound(WmsOutboundNoticeRequest param) { 
 | 
        PlatformJob job = new PlatformJob(); 
 | 
        job.setCreateDate(new Date()); 
 | 
        job.setIsdeleted(Constants.ZERO); 
 | 
        job.setType(Constants.platformJobType.wxczh);//默认是外协车装好 
 | 
        job.setStatus(Constants.PlatformJobStatus.WAIT_CONFIRM.getKey());//默认待确认状态 
 | 
        job.setBillCode(param.getCarrierBillCode()); 
 | 
        job.setCarrierName(param.getCarrierName()); 
 | 
        job.setCarCodeFront(param.getPlateNumber()); 
 | 
        job.setDrivierPhone(param.getDriverPhone()); 
 | 
        job.setDriverName(param.getDriverName()); 
 | 
        job.setOrigin(Constants.ONE); 
 | 
        //处理作业的车辆、司机、月台组关联关系,装货 
 | 
        dealCarPlatformAndDriverInfo(job,1); 
 | 
        return job; 
 | 
    } 
 | 
    /** 
 | 
     * 出库通知任务业务处理 
 | 
     * @param list 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public WmsBaseResponse outboundNotice(WmsBaseRequest<WmsOutboundNoticeRequest> list) { 
 | 
  
 | 
        try{ 
 | 
            if(list ==null ||list.getData()==null ||  list.getData().size() ==0){ 
 | 
                return returnFailReuslt("请求参数不正确,参数不能为空"); 
 | 
            } 
 | 
            List<PlatformJob> jobList = new ArrayList<>(); 
 | 
            List<Integer> jobIdList = new ArrayList<>(); 
 | 
            List<PlatformWmsDetail> details = new ArrayList<>(); 
 | 
            List<String> iocodeList = new ArrayList<>(); 
 | 
            for(WmsOutboundNoticeRequest param : list.getData()){ 
 | 
                if(StringUtils.isBlank(param.getIoCode()) || 
 | 
                        StringUtils.isBlank(param.getCarrierBillCode())|| 
 | 
                        StringUtils.isBlank(param.getPlateNumber())|| 
 | 
                        StringUtils.isBlank(param.getDriverPhone())){ 
 | 
                    return returnFailReuslt("请求参数不正确,参数不合法!"); 
 | 
                } 
 | 
                //根据承运单号查询任务信息 
 | 
                PlatformWmsJob job = platformWmsJobMapper.selectOne(new QueryWrapper<PlatformWmsJob>().lambda() 
 | 
                        .eq(PlatformWmsJob::getCarryBillCode,param.getCarrierBillCode()) 
 | 
                        .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO) 
 | 
                        .last("limit 1" )); 
 | 
  
 | 
                if(job == null){ 
 | 
                    PlatformJob model =dealJobBizOutbound(param); 
 | 
                    job = new PlatformWmsJob(); 
 | 
                    job.setCreateDate(new Date()); 
 | 
                    job.setIsdeleted(Constants.ZERO); 
 | 
                    job.setStatus(Constants.ZERO); 
 | 
                    job.setIsNew(Constants.ONE); 
 | 
                    job.setCarryBillCode(param.getCarrierBillCode()); 
 | 
                    job.setIocode(param.getIoCode()); 
 | 
                    job.setCarrierName(param.getCarrierName()); 
 | 
                    job.setPlateNumber(param.getPlateNumber()); 
 | 
                    job.setDriverName(param.getDriverName()); 
 | 
                    job.setType(Constants.ONE); 
 | 
                    job.setIoCreatedate(param.getCreateDate()); 
 | 
                    job.setJobId(model.getId()); 
 | 
                    job.setRepertotyAddress(param.getRepertotyAddress()); 
 | 
                    job.setContractNum(param.getContractNum()); 
 | 
                    job.setDriverPhone(param.getDriverPhone()); 
 | 
                    job.setDriverName(param.getDriverName()); 
 | 
                    platformWmsJobMapper.insert(job); 
 | 
                } 
 | 
                jobIdList.add(job.getJobId()); 
 | 
                if(param.getDetails()!=null && param.getDetails().size()>0){ 
 | 
                    for(WmsOutboundDetailRequest d :param.getDetails()){ 
 | 
                        PlatformWmsDetail entity = new PlatformWmsDetail(); 
 | 
                        entity.setCreateDate(new Date()); 
 | 
                        entity.setIsdeleted(Constants.ZERO); 
 | 
                        entity.setIocode(d.getIoCode()); 
 | 
                        entity.setJobId(job.getJobId()); 
 | 
                        entity.setWmsJobId(job.getId()); 
 | 
                        entity.setContractNum(param.getContractNum()); 
 | 
                        entity.setRepertotyAddress(param.getRepertotyAddress()); 
 | 
                        entity.setWmsJobId(job.getId()); 
 | 
                        entity.setStatus(Constants.ZERO); 
 | 
                        entity.setIoQty(Constants.formatBigdecimal(d.getIoQty()).multiply(Constants.formatBigdecimal( d.getRate()))); 
 | 
                        entity.setRate(Objects.nonNull(d.getRate())?Constants.formatBigdecimal(d.getRate()).doubleValue()+"":"1"); 
 | 
//                        entity.setIoQty(d.getIoQty()); 
 | 
//                        entity.setRate(d.getRate()); 
 | 
                        entity.setMaterialName(d.getMaterialName()); 
 | 
                        iocodeList.add(d.getIoCode()); 
 | 
                        details.add(entity); 
 | 
                    } 
 | 
                    if(job.getIsNew() != 1 && iocodeList.size()>0){ 
 | 
                        //先清理同一个承运单号下重复推送的iocode数据,以最后一次推送为主 
 | 
                        platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                                .set(PlatformWmsDetail::getIsdeleted,Constants.ONE) 
 | 
                                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
                                .eq(PlatformWmsDetail::getWmsJobId,job.getId()) 
 | 
                                .in(PlatformWmsDetail::getIocode,iocodeList) 
 | 
                        ); 
 | 
                    } 
 | 
                    jobIdList.add(job.getId()); 
 | 
                } 
 | 
            } 
 | 
            if(details.size()>0){ 
 | 
                platformWmsDetailMapper.insert(details); 
 | 
            } 
 | 
            list.setJobIdList(jobIdList); 
 | 
            if(jobList.size()>0){ 
 | 
                startEndNoticeToDriver(jobList); 
 | 
            } 
 | 
        }catch (Exception e){ 
 | 
            log.error("【WMS】处理入库取消通知业务===============业务处理异常"+e.getMessage()); 
 | 
            return returnFailReuslt("业务处理异常"); 
 | 
        } 
 | 
        return returnSuccessReuslt(null); 
 | 
    } 
 | 
    /** 
 | 
     * 入库取消通知任务业务处理 
 | 
     * @param list 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public WmsBaseResponse cancelInbound(WmsBaseRequest<WmsActionNoticeRequest> list) { 
 | 
        //-----------------处理入库取消通知业务-------------------- 
 | 
        try { 
 | 
            if(list ==null||list.getData()==null || list.getData().size() ==0 || list.getData().get(0).getIoCode() == null){ 
 | 
                return returnFailReuslt("请求参数不正确,参数不能为空"); 
 | 
            } 
 | 
            List<String> iocodeList = new ArrayList<>(); 
 | 
            for(WmsActionNoticeRequest param :list.getData()){ 
 | 
                if(StringUtils.isNotBlank(param.getIoCode())){ 
 | 
                    iocodeList.add(param.getIoCode()); 
 | 
                } 
 | 
            } 
 | 
            if(iocodeList.size() ==0 ){ 
 | 
                return returnFailReuslt("请求参数iocode不正确,参数不能为空"); 
 | 
            } 
 | 
            //取消全部数据状态为 【已取消】 
 | 
            platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .set(PlatformWmsDetail::getStatus,Constants.TWO) 
 | 
                    .in(PlatformWmsDetail::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO)); 
 | 
             
 | 
            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda() 
 | 
                    .set(PlatformWmsJob::getStatus,Constants.TWO) 
 | 
                    .in(PlatformWmsJob::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)); 
 | 
  
 | 
            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda() 
 | 
                    .in(PlatformWmsJob::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO) 
 | 
            ); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){ 
 | 
                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList()); 
 | 
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){ 
 | 
                    Set<Integer> setJobIds = new HashSet<>(jobIds); 
 | 
                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>() 
 | 
                            .lambda() 
 | 
                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) 
 | 
                            .in(PlatformJob::getId,setJobIds) 
 | 
                    ); 
 | 
  
 | 
                    for (Integer jobId:setJobIds 
 | 
                    ) { 
 | 
                        //短信通知 
 | 
                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId, 
 | 
                                SmsConstants.platformJobContent.platformJobStopJob,null,null 
 | 
                        ); 
 | 
                        //公众号通知司机 任务取消 
 | 
                        PlatformJob job = platformJobMapper.selectById(jobId); 
 | 
                        if(Objects.nonNull(job)){ 
 | 
  
 | 
                            //发送公众号通知 给提交人 
 | 
                            SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() 
 | 
                                    .eq(SystemUser::getDeleted, Constants.ZERO) 
 | 
                                    .eq(SystemUser::getType, Constants.ZERO) 
 | 
                                    .eq(SystemUser::getMobile,job.getDrivierPhone()) 
 | 
                                    .last(" limit 1 ")); 
 | 
                            if(Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())){ 
 | 
                                WxPlatNotice wxPlatNotice = new WxPlatNotice(); 
 | 
                                wxPlatNotice.sendWmsCancelTemplateNotice(systemDictDataBiz, 
 | 
                                        wxNoticeConfigMapper,job, 
 | 
                                        WxPlatConstants.platformJobContent.platformJobCancel,  
 | 
                                        Arrays.asList(driver.getOpenid().split(",")) 
 | 
                                ); 
 | 
                            } 
 | 
                        } 
 | 
  
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
        }catch (Exception e){ 
 | 
            log.error("【WMS】处理入库取消通知业务===============业务处理异常"+e.getMessage()); 
 | 
            return returnFailReuslt("业务处理异常"); 
 | 
        } 
 | 
        return returnSuccessReuslt(null); 
 | 
    } 
 | 
    /** 
 | 
     * 出库取消通知任务业务处理 
 | 
     * @param list 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public WmsBaseResponse cancelOutbound(WmsBaseRequest<WmsActionNoticeRequest> list) { 
 | 
        try { 
 | 
            if(list ==null||list.getData()==null || list.getData().size() ==0 ){ 
 | 
                return returnFailReuslt("请求参数不正确,参数不能为空"); 
 | 
            } 
 | 
            List<String> iocodeList = new ArrayList<>(); 
 | 
            for(WmsActionNoticeRequest param :list.getData()){ 
 | 
                if(StringUtils.isNotBlank(param.getIoCode())){ 
 | 
                    iocodeList.add(param.getIoCode()); 
 | 
                } 
 | 
            } 
 | 
            if(iocodeList.size() ==0 ){ 
 | 
                return returnFailReuslt("请求参数iocode不正确,参数不能为空"); 
 | 
            } 
 | 
            //取消全部数据状态为 【已取消】 
 | 
             platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .set(PlatformWmsDetail::getStatus,Constants.TWO) 
 | 
                    .in(PlatformWmsDetail::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO)); 
 | 
  
 | 
            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda() 
 | 
                    .set(PlatformWmsJob::getStatus,Constants.TWO) 
 | 
                    .in(PlatformWmsJob::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)); 
 | 
  
 | 
            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda() 
 | 
                    .in(PlatformWmsJob::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO) 
 | 
            ); 
 | 
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){ 
 | 
                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList()); 
 | 
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){ 
 | 
                    Set<Integer> setJobIds = new HashSet<>(jobIds); 
 | 
                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>() 
 | 
                            .lambda() 
 | 
                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) 
 | 
                            .in(PlatformJob::getId,setJobIds) 
 | 
                    ); 
 | 
                    for (Integer jobId:setJobIds 
 | 
                         ) { 
 | 
                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz, 
 | 
                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId, 
 | 
                                SmsConstants.platformJobContent.platformJobStopJob,null,null 
 | 
                        ); 
 | 
  
 | 
                        //公众号通知司机 任务取消 
 | 
                        PlatformJob job = platformJobMapper.selectById(jobId); 
 | 
                        if(Objects.nonNull(job)){  //发送公众号通知 给提交人 
 | 
                            SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() 
 | 
                                    .eq(SystemUser::getDeleted, Constants.ZERO) 
 | 
                                    .eq(SystemUser::getType, Constants.ZERO) 
 | 
                                    .eq(SystemUser::getMobile,job.getDrivierPhone()) 
 | 
                                    .last(" limit 1 ")); 
 | 
                            if(Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())){ 
 | 
                                WxPlatNotice wxPlatNotice = new WxPlatNotice(); 
 | 
                                wxPlatNotice.sendWmsCancelTemplateNotice(systemDictDataBiz, 
 | 
                                        wxNoticeConfigMapper,job, 
 | 
                                        WxPlatConstants.platformJobContent.platformJobCancel, 
 | 
                                        Arrays.asList(driver.getOpenid().split(",")) 
 | 
                                ); 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
  
 | 
        }catch (Exception e){ 
 | 
            log.error("【WMS】出库取消通知任务业务处理===============业务处理异常"+e.getMessage()); 
 | 
            return returnFailReuslt("业务处理异常"); 
 | 
        } 
 | 
        return returnSuccessReuslt(null); 
 | 
    } 
 | 
    /** 
 | 
     * 处理作业行数据的运输总量信息 
 | 
     * @param jobList 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public void computjobTotalNum(List<Integer> jobList) { 
 | 
        if(jobList==null || jobList.size()==0){ 
 | 
            return; 
 | 
        } 
 | 
        for(Integer jobId : jobList){ 
 | 
            BigDecimal num = new BigDecimal(0); 
 | 
            List<PlatformWmsDetail> details =   platformWmsDetailMapper.selectList( new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .eq(PlatformWmsDetail::getJobId,jobId) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO)); 
 | 
            if(details!=null && details.size()>0){ 
 | 
                for(PlatformWmsDetail d :details){ 
 | 
                    num =  num.add(Constants.formatBigdecimal(d.getIoQty())); 
 | 
                } 
 | 
            } 
 | 
            platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() 
 | 
                    .set(PlatformJob::getTotalNum,num) 
 | 
                    .eq(PlatformJob::getOrigin, Constants.ONE) 
 | 
                    .eq(PlatformJob::getId, jobId)); 
 | 
        } 
 | 
    } 
 | 
    /** 
 | 
     * 作业完成通知任务业务处理 
 | 
     * @param list 参数 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public WmsBaseResponse doneTask(WmsBaseRequest<WmsActionNoticeRequest> list) { 
 | 
        try { 
 | 
            if(list ==null||list.getData()==null || list.getData().size() ==0){ 
 | 
                return returnFailReuslt("请求参数不正确,参数不能为空"); 
 | 
            } 
 | 
            List<String> iocodeList = new ArrayList<>(); 
 | 
            for(WmsActionNoticeRequest param :list.getData()){ 
 | 
                if(StringUtils.isNotBlank(param.getIoCode())){ 
 | 
                    iocodeList.add(param.getIoCode()); 
 | 
                } 
 | 
            } 
 | 
            if(iocodeList.size() ==0 ){ 
 | 
                return returnFailReuslt("请求参数iocode不正确,参数不能为空"); 
 | 
            } 
 | 
            //取消全部数据状态为 【已完成】 
 | 
            platformWmsDetailMapper.update(null,new UpdateWrapper<PlatformWmsDetail>().lambda() 
 | 
                    .set(PlatformWmsDetail::getStatus,Constants.ONE) 
 | 
                    .in(PlatformWmsDetail::getIocode,iocodeList) 
 | 
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO)); 
 | 
        }catch (Exception e){ 
 | 
            log.error("【WMS】作业完成通知任务业务处理===============业务处理异常"+e.getMessage()); 
 | 
            return returnFailReuslt("业务处理异常"); 
 | 
        } 
 | 
        return returnSuccessReuslt(null); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 封装错误返回对象 
 | 
     * @param msg 
 | 
     * @return 
 | 
     */ 
 | 
  
 | 
    private WmsBaseResponse returnFailReuslt(String msg) { 
 | 
        WmsBaseResponse response = new WmsBaseResponse(); 
 | 
        response.setCode(-1); 
 | 
        response.setData(new ArrayList<>()); 
 | 
        WmsBaseDataResponse rData = new WmsBaseDataResponse(); 
 | 
        rData.setMsgDescr(msg); 
 | 
        rData.setSuccess("-1"); 
 | 
        response.getData().add(rData); 
 | 
        return  response; 
 | 
    } 
 | 
    /** 
 | 
     * 封装成功返回对象 
 | 
     * @param msg 
 | 
     * @return 
 | 
     */ 
 | 
  
 | 
  
 | 
    private WmsBaseResponse returnSuccessReuslt(String msg) { 
 | 
        WmsBaseResponse response = new WmsBaseResponse(); 
 | 
        response.setCode(1); 
 | 
        response.setData(new ArrayList<>()); 
 | 
        WmsBaseDataResponse rData = new WmsBaseDataResponse(); 
 | 
        rData.setMsgDescr(StringUtils.defaultString(msg,"操作成功")); 
 | 
        rData.setSuccess("1"); 
 | 
        response.getData().add(rData); 
 | 
        return  response; 
 | 
    } 
 | 
} 
 |