package com.steerinfo.dil.service.impl; import com.steerinfo.dil.config.WebExceptionHandler; import com.steerinfo.dil.mapper.OmsOrderChildMapper; import com.steerinfo.dil.mapper.OmsTransOrderMapper; import com.steerinfo.dil.mapper.TmsReplaceFrontResultMapper; import com.steerinfo.dil.mapper.TmsSignInResultMapper; import com.steerinfo.dil.model.*; import com.steerinfo.dil.util.DaZongUtil; import com.steerinfo.dil.util.DataChange; import com.steerinfo.framework.mapper.IBaseMapper; import com.steerinfo.framework.service.impl.BaseServiceImpl; import org.apache.ibatis.annotations.One; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; /** * TmsSignInResult服务实现: * @author generator * @version 1.0-SNAPSHORT 2023-11-14 02:50 * 类描述 * 修订历史: * 日期:2023-11-14 * 作者:generator * 参考: * 描述:TmsSignInResult服务实现 * @see null * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved. */ @Service(value = "tmsSignInResultService") public class TmsSignInResultServiceImpl { static final Logger log = Logger.getLogger(TmsSignInResultServiceImpl.class); @Autowired private TmsSignInResultMapper tmsSignInResultMapper; @Autowired private TmsReplaceFrontResultMapper tmsReplaceFrontResultMapper; @Autowired private OmsTransOrderMapper omsTransOrderMapper; @Autowired OmsOrderChildMapper omsOrderChildMapper; @Autowired OmsTransOrderServiceImpl omsTransOrderService; @Autowired TmsQueueResultServiceImpl tmsQueueResultService; @Autowired DaZongUtil daZongUtil; @Autowired OmsOrderChildServiceImpl omsOrderChildService; @Transactional(rollbackFor = Exception.class) public String signIn(Map map) throws Exception { //查询运输订单 List transOrderIds = omsTransOrderMapper.getTransOrderIdByNumber(map); if(transOrderIds.size() != 1){ throw new Exception("操作失败!运输订单异常!"); } OmsTransOrder omsTransOrder = omsTransOrderMapper.selectByPrimaryKey(transOrderIds.get(0)); BigDecimal isBan = DataChange.dataToBigDecimal(omsTransOrder.getAlternateFields24()); if(isBan.compareTo(BigDecimal.ONE) == 0){ throw new Exception("该订单已禁用,无法签到!"); } //查询状态为正在执行的运单数量(仅查采购与销售) List orderIds = omsTransOrderMapper.getTransOrderByDriver(omsTransOrder.getDriverId()); if(orderIds.size() > 0 && !"生产".equals(omsTransOrder.getBusinessScene())){ for(BigDecimal orderId : orderIds){ try { omsTransOrderService.correctTransOrder(orderId); orderIds = omsTransOrderMapper.getTransOrderByDriver(omsTransOrder.getDriverId()); } catch (Exception e) { e.printStackTrace(); } } } if (orderIds.size() > 0 && !"生产".equals(omsTransOrder.getBusinessScene())) { //已有正在签到的运单 //判断正在执行中的运单是否与当前签到的运单是否相同 if(transOrderIds.get(0).compareTo(orderIds.get(0)) == 0){ //查询换车头实绩 Map searchMap = new HashMap<>(); searchMap.put("transOrderId",transOrderIds.get(0)); searchMap.put("deleted",0); List replaceFrontResults = tmsReplaceFrontResultMapper.selectByParameters(searchMap); if(replaceFrontResults.size() != 0 && replaceFrontResults.get(0).getReplaceTime() != null){ Map driver = omsTransOrderMapper.findDriverMes(omsTransOrder.getDriverId()); if(driver.get("innerCode") == null || driver.get("innerCode").equals(" ")){ throw new Exception("司机没有身份证内码,无法线上签到!请线下签到或联系管理员录入身份证内码!"); } //换车头后点击签到,推送大宗签到 try{ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map params = new HashMap<>(); params.put("rjhh", omsTransOrder.getSerialNumber()); params.put("qdsj", dateFormat.format(new Date())); daZongUtil.execute("30010000039", new Map[]{params}); }catch (Exception e){ log.error(e.getMessage()); throw new Exception("已签到,请进厂!"); } return "签到成功,请进厂!"; } throw new Exception("请勿重复签到!"); } throw new Exception("签到失败,请先完成当前运单!"); }else{ omsTransOrder.setConfirmReason("系统签到"); omsTransOrder.setDriverConfirmTime(new Date()); omsTransOrder.setOrderCommunicationDuration( new BigDecimal( (omsTransOrder.getDriverConfirmTime().getTime() - omsTransOrder.getIssueTime().getTime()) / 60000 ) ); omsTransOrder.setUpdateUsername(map.get("userName").toString()); omsTransOrder.setUpdateTime(new Date()); omsTransOrder.setDeleted(new BigDecimal(5)); omsTransOrderMapper.updateByPrimaryKeySelective(omsTransOrder); //获取物资子表 if("采购".equals(omsTransOrder.getBusinessScene())) { Map objectObjectHashMap = new HashMap<>(); objectObjectHashMap.put("transOrderId",omsTransOrder.getTransOrderId()); objectObjectHashMap.put("deleted",0); List omsOrderChildList = omsOrderChildMapper.selectByParameters(objectObjectHashMap); if(omsOrderChildList.get(0).getMaterialNumber() == null || omsOrderChildList.get(0).getMaterialNumber().compareTo(BigDecimal.ZERO) == 0) { //获取原发 Map orderMap = omsTransOrderService.matching(omsTransOrder.getTransOrderId()); if(orderMap == null || DataChange.dataToBigDecimal(orderMap.get("materialNumber")).compareTo(BigDecimal.ZERO) == 0) { log.info("未匹配到原发运输订单"+omsTransOrder.getTransOrderId()); throw new Exception("未匹配到原发,请联系派车人手动录入原发"); } omsOrderChildList.get(0).setMaterialNumber(DataChange.dataToBigDecimal(orderMap.get("materialNumber"))); omsOrderChildList.get(0).setAlternateFields15(orderMap.get("oldTransOrderId").toString()); omsOrderChildMapper.updateByPrimaryKeySelective(omsOrderChildList.get(0)); omsTransOrderService.dispatchPushUpdateYf(omsTransOrder.getTransOrderId(),omsOrderChildList.get(0)); } } //推送大宗 Map config = omsTransOrderMapper.getConfigByName("接单推送大宗"); config = config == null ? new HashMap<>() : config; if("是".equals(config.get("valueString"))){ omsTransOrderService.dispatchPushById(omsTransOrder.getTransOrderId()); }else{ log.info("配置如此,无需上传大宗"); } } //查询运输订单下的签到实绩 Map searchMap = new HashMap<>(); searchMap.put("transOrderId",transOrderIds.get(0)); searchMap.put("deleted",0); List list = tmsSignInResultMapper.selectByParameters(searchMap); Map config = omsTransOrderMapper.getConfigByName("签到过期时间"); config = config == null ? new HashMap<>() : config; BigDecimal expireHour = DataChange.dataToBigDecimal(config.get("valueNumber")); for(TmsSignInResult item : list){ item.setSignInMode(map.get("signInMode").toString()); item.setSignInAddress(map.get("signInAddress").toString()); item.setLocationMode(map.get("locationMode").toString()); item.setSignInTime(new Date()); if(expireHour.compareTo(BigDecimal.ZERO) > 0){ item.setExpireTime( new Date(item.getSignInTime().getTime() + expireHour.multiply(new BigDecimal(1000*60*60)).longValue()) ); } item.setResultImage(DataChange.getString(map.get("resultImage"))); item.setUpdateTime(new Date()); item.setUpdateUsername(map.get("userName").toString()); tmsSignInResultMapper.updateByPrimaryKeySelective(item); omsTransOrderService.updateOrderStatus(transOrderIds.get(0),item.getSegmentSqe(),"签到",item.getUpdateUsername()); omsOrderChildService.updateOrderChildInfo(transOrderIds.get(0),null,item.getSignInTime(),"签到"); map.put("resultId",item.getResultId());//返回给日志记录 List replaceFrontResults = tmsReplaceFrontResultMapper.selectByParameters(searchMap); if(replaceFrontResults.size() == 0){ if ("采购".equals(omsTransOrder.getBusinessScene()) || "销售".equals(omsTransOrder.getBusinessScene())) { Map driver = omsTransOrderMapper.findDriverMes(omsTransOrder.getDriverId()); if(driver.get("innerCode") == null || driver.get("innerCode").equals(" ")){ throw new Exception("司机没有身份证内码,无法线上签到!请线下签到或联系管理员录入身份证内码!"); } //如果运输实绩中没有换车头实绩,直接推送大宗 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map params = new HashMap<>(); params.put("rjhh", omsTransOrder.getSerialNumber()); params.put("qdsj", dateFormat.format(item.getSignInTime())); daZongUtil.execute("30010000039", new Map[]{params}); } } return "签到成功!"; } throw new Exception("没有能修改的记录!"); } public List> getSignInResultList(Map map) { return tmsSignInResultMapper.getTmsSignInResultList(map); } @Transactional(rollbackFor = Exception.class) public String signInExpireCheck() { List list = tmsSignInResultMapper.getSignInExpireList(); List transOrders = new ArrayList<>(); for(TmsSignInResult item : list){ //回退运单及签到实绩 item.setLocationMode(null); item.setSignInMode(null); item.setSignInTime(null); item.setSignInTime(null); item.setUpdateTime(new Date()); item.setUpdateUsername("system"); OmsTransOrder omsTransOrder = omsTransOrderMapper.selectByPrimaryKey(item.getTransOrderId()); omsTransOrder.setOrderStatus("签到过期"); omsTransOrder.setCurrentLineSeq(item.getSegmentSqe().subtract(BigDecimal.ONE)); omsTransOrder.setUpdateTime(new Date()); omsTransOrder.setUpdateUsername("system"); transOrders.add(omsTransOrder); } if(list.size() > 0){ tmsSignInResultMapper.batchUpdate(list); omsTransOrderMapper.batchUpdate(transOrders); } return "执行成功!"; } }