浏览代码

Merge branch 'master' of https://git.steerinfo.com/DAL-DAZHOU/DAL-DAZHOU-AMS-API

luobang 2 年之前
父节点
当前提交
b832529390

+ 17 - 0
src/main/java/com/steerinfo/dil/controller/AmsSaleOrderController.java

@@ -1768,4 +1768,21 @@ public class AmsSaleOrderController<RedisTemplate> extends BaseRESTfulController
         return success(i);
     }
 
+    @ApiOperation("批量派车或换车")
+    @PostMapping("batchUpdateCapacity")
+    public RESTfulResult batchUpdateCapacity(@RequestBody(required = false) Map<String,Object> map) {
+        try{
+            List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("list");
+            amsSaleOrderService.batchUpdateCapacity(list);
+        }catch (Exception e){
+            e.printStackTrace();
+            if(e.getMessage()==null || e.getMessage().contains("Exception")){
+                return failed("未知异常,请重试!");
+            }else{
+                return failed(e.getMessage());
+            }
+        }
+        return success("修改成功");
+    }
+
 }

+ 4 - 0
src/main/java/com/steerinfo/dil/service/IAmsSaleOrderService.java

@@ -191,4 +191,8 @@ public interface IAmsSaleOrderService {
     int updateTransportOrderStatus(BigDecimal orderId);
 
    int pushCarNumberToEas(Map<String,Object> map) throws Exception;
+
+    int batchPushCarNumberToEas(List<Map<String,Object>> list) throws Exception;
+
+    int batchUpdateCapacity(List<Map<String, Object>> mapList) throws Exception;
 }

+ 430 - 0
src/main/java/com/steerinfo/dil/service/impl/AmsSaleOrderServiceImpl.java

@@ -1113,6 +1113,31 @@ public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService {
         return  result;
     }
 
+    /**
+     * 钢材批量派车或改车
+     * @param mapList
+     * @return
+     * @throws Exception
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int batchUpdateCapacity(List<Map<String, Object>> mapList) throws Exception {
+        //先派车
+        for(Map<String, Object> item:mapList){
+            String capacityIds=""+item.get("capacityIds");
+            if(capacityIds.equals("0")){
+                //钢材派车
+                dispatchSteelOrderNotPush(item);
+            }else{
+                //钢材改车
+                updateSteelOrderNotPush(item);
+            }
+        }
+        //再上传金蝶
+        batchPushCarNumberToEas(mapList);
+        return 0;
+    }
+
     @Override
     public int continueSteelOrder(List<Map<String, Object>> mapList) throws Exception {
         int result = 0;
@@ -3047,4 +3072,409 @@ public class AmsSaleOrderServiceImpl implements IAmsSaleOrderService {
         }
         return 1;
     }
+
+    /**
+     * 批量推送
+     * @param mapList
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public int batchPushCarNumberToEas(List<Map<String, Object>> mapList) throws Exception {
+        Map<String,Object> input = joinFeign.findCarNumberByOrderList(mapList);
+        Map<String,Object> totalMap = new HashMap<>();
+        totalMap.putAll(easCapacityTestUtil.getTotalMap());
+        totalMap.put("input",input);
+        Map<String,Object> s = joinFeign.pushCarNumberToEas(totalMap);
+        System.out.println(totalMap);
+        String json = JSONUtils.toJSONString(totalMap);
+        System.out.println(json);
+        totalMap.put("output",s);
+        try {
+            newFileTool.newFile("pushCarNumberToEas:"+totalMap,"金蝶通讯报文");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        if (s == null || s.size() == 0) {
+            throw new Exception("登录金蝶失败!请重试派车!");
+        }else{
+            try{
+                JSONObject result = new JSONObject(s);
+                //如果status不为1,抛出异常
+                if(!result.getJSONObject("res").getString("status").equals("1")){
+                    throw new Exception("上传金蝶失败!请重试派车:"+result.getJSONObject("requestException").getString("message"));
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+                //只抛出自定义异常
+                if(e.getMessage().contains("Exception")){
+                    throw new Exception("上传金蝶失败!请重试派车!");
+                }else{
+                    throw new Exception(e.getMessage());
+                }
+
+            }
+        }
+        return 1;
+    }
+
+    /**
+     * 钢材派车,不上传金蝶
+     * @param map
+     * @return
+     * @throws Exception
+     */
+    private int dispatchSteelOrderNotPush(Map<String, Object> map) throws Exception {
+        Integer isCheckGps = amsSaleOrderMapper.getDispachSwitch();
+        Integer saleStatus = amsSaleOrderMapper.findStatus(DataChange.dataToBigDecimal(map.get("saleOrderMaterialId")));
+        String selfMention = amsSaleOrderMapper.findSelfMention(DataChange.dataToBigDecimal(map.get("saleOrderMaterialId")));
+        //如果这个车序号下面有运单,则证明已经派了
+        Map<String,Object> orderMap = amsSaleOrderMapper.getSteelOrderMap(DataChange.dataToBigDecimal(map.get("saleOrderMaterialId")));
+        //判断该车序号对应的分录是否全部关闭
+        Integer flCount = amsSaleMaterialMapper.getAbleFlcount(DataChange.dataToBigDecimal(map.get("saleOrderMaterialId")));
+        if(flCount == 0) {
+            throw new Exception("该运单下所有分录被关闭,无法派车");
+        }
+        if (orderMap != null) {
+            throw new Exception("该订单已派发,无法重复派车");
+        }
+        if (saleStatus == 1) {
+            throw new Exception("订单未审核,无法派车!");
+        }
+        int result = 0;
+        //得到此次是否校验GPS
+        boolean onceCheck = true;
+        try{
+            onceCheck = (boolean) map.get("isCheckGPS");
+        }catch (Exception e){
+            //取值失败不处理,默认校验GPS
+        }
+        // 得到车牌号
+        String capacityNumber = (String) map.get("capacityNumber");
+        // 得到运力id
+        BigDecimal capacityId = amsSaleOrderMaterialMapper.getCapacityId(capacityNumber);
+        //校验该车是否存在手机号
+        String tel=omstruckOrderMapper.getTelByCapacityId(capacityId);//数据库的手机号
+        String driverTel = (String) map.get("driverTel");//填写的手机号
+        if(tel==null || "".equals(tel)){
+            throw new Exception("该车没有电话号码,无法派车!请去资源管理-运力维护该车的电话号码!");
+        }
+        //查询车牌号是否是黑名单
+        if(amsSaleOrderMapper.isBlackList(capacityNumber)>0){
+            throw new Exception("该车在黑名单中,无法派车!请联系销售公司!");
+        }
+        //非自提,单次校验且全局校验,且车不允许无GPS
+        int isGPS=amsSaleOrderMapper.isGPS(capacityNumber);
+        if((selfMention==null || selfMention.equals("否")) && onceCheck && (isCheckGps!=null && isCheckGps==0) && isGPS <= 0){
+            Map<String,Object> data=null;
+            try{
+                data= (Map<String,Object>)otmsFeign.getCurrentLocation(capacityNumber).getData();
+            }catch (Exception e){
+                throw new Exception("该车没有GPS定位信息,请联系销售公司物流部,申请是否可以派车。");
+            }
+            if(data==null || !"1001".equals(""+data.get("status"))){
+                throw new Exception("该车没有GPS定位信息,请联系销售公司物流部,申请是否可以派车。");
+            }
+        }
+        // 得到车序号表主键
+        BigDecimal saleOrderMaterialId = DataChange.dataToBigDecimal(map.get("saleOrderMaterialId"));
+        // 得到承运商
+        BigDecimal carrierId = DataChange.dataToBigDecimal(map.get("carrierId"));
+        // 查询到车序号的单价
+        BigDecimal priceId = amsSaleOrderMapper.getOrderPrice(map);
+        // 得到详细地址id
+        BigDecimal placeId = amsSaleOrderMapper.getPlaceId(saleOrderMaterialId);
+        // 如果已经设置单价则不覆盖,详细地址匹配不到单价,则匹配省市县内最高的一条单价(只给非自提的进行匹配)
+        if (priceId == null && placeId != null && selfMention.equals("否")) {
+            priceId = amsSaleOrderMapper.getPriceIdByPlaceId(placeId);
+        }
+        // 运输线路id
+        BigDecimal lineId = DataChange.dataToBigDecimal(map.get("lineId"));
+        if(lineId==null || lineId.compareTo(BigDecimal.ZERO)==0){
+            throw new Exception("线路异常!");
+        }
+        BigDecimal isSteel = new BigDecimal(1);
+        if (capacityId == null) {
+            return 0;
+        }
+        List<Map<String, Object>> materialList = amsSaleOrderMaterialMapper.getMaterial(saleOrderMaterialId);
+        /*
+         定向派单表
+         */
+        // 通过车序号主键确认定向派单是否已存在
+        BigDecimal dispatchId0 = amsDispatchSaleOrderMapper.isDispatchExist(saleOrderMaterialId);
+        if (dispatchId0 == null || dispatchId0.toString().length() == 0) {
+            AmsDispatchSaleOrder amsDispatchSaleOrder = new AmsDispatchSaleOrder();
+            // 主键
+            BigDecimal dispatchId = amsDispatchSaleOrderMapper.selectOtherId();
+            amsDispatchSaleOrder.setDispatchId(dispatchId);
+            // 车序号表id
+            amsDispatchSaleOrder.setSaleOrderMaterialId(saleOrderMaterialId);
+            // 承运商id
+            amsDispatchSaleOrder.setCarrierId(carrierId);
+            // 派单时间和成交时间
+            amsDispatchSaleOrder.setDispatchTime(new Date());
+            amsDispatchSaleOrder.setDispatchDealTime(new Date());
+            // 成交类型
+            amsDispatchSaleOrder.setDispatchType(new BigDecimal(2));
+            // 车序号状态
+            amsDispatchSaleOrder.setDispatchStatus(new BigDecimal(2));
+            result += amsDispatchSaleOrderMapper.insertSelective(amsDispatchSaleOrder);
+        }
+        // 如果已经匹配过承运商或者给某个承运商授权过,则派车时做修改承运商操作
+        else {
+            AmsDispatchSaleOrder amsDispatchSaleOrder = amsDispatchSaleOrderMapper.selectByPrimaryKey(dispatchId0);
+            amsDispatchSaleOrder.setCarrierId(carrierId);
+            result += amsDispatchSaleOrderMapper.updateByPrimaryKeySelective(amsDispatchSaleOrder);
+        }
+        /*
+         运输订单
+         */
+        OmstruckOrder omstruckOrder = new OmstruckOrder();
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("orderType", new BigDecimal(2));
+        map1.put("orderPlanId", saleOrderMaterialId);
+        List<OmstruckOrder> omstruckOrders = omstruckOrderMapper.selectByParameters(map1);
+        if (omstruckOrders == null || omstruckOrders.size() == 0) {
+            // 运输订单主键
+            BigDecimal orderId = omstruckOrderMapper.selectMaxId();
+            omstruckOrder.setOrderId(orderId);
+            // 车序号主键
+            omstruckOrder.setOrderPlanId(saleOrderMaterialId);
+            //添加承运商ID 和 运价ID
+//            Object priceId = map.get("priceId");
+            if (priceId != null) {
+                omstruckOrder.setPriceId(priceId);
+            } else {
+                omstruckOrder.setPriceId(new BigDecimal(0));
+            }
+            omstruckOrder.setCarrierId(carrierId);
+            // 运输订单号
+            omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD", orderId.intValue()));
+            // 运力id
+            omstruckOrder.setCapacityId(capacityId);
+            // 承运商
+            omstruckOrder.setCarrierId(carrierId);
+            // 是否可作业
+            omstruckOrder.setCanWork(new BigDecimal(0));
+            // 下发时间
+            omstruckOrder.setOrderIssueTime(new Date());
+            // 运单状态
+            omstruckOrder.setOrderStatus(new BigDecimal(4));
+            // 司机电话
+            if(tel != null && !"".equals(tel)){
+                omstruckOrder.setDriverTel(tel);
+            }
+            BigDecimal status;
+            // 钢材
+            if (isSteel != null && isSteel.intValue() == 1) {
+                status = new BigDecimal(1);
+            }
+            // 非钢材(危化品,焦炭,副产品)
+            else {
+                status = new BigDecimal(2);
+            }
+            // 订单类型
+            omstruckOrder.setOrderType(status);
+            // 运输线路id
+            omstruckOrder.setLineId(lineId);
+            omstruckOrder.setInsertTime(new Date());
+            omstruckOrder.setInsertUsername("");
+            result += omstruckOrderMapper.insertSelective(omstruckOrder);
+            //插入日志
+            saleLogUtil.logOrder(orderId,"普通派单",map,SaleLogUtil.INSERT);
+        } else {
+            omstruckOrder = omstruckOrders.get(0);
+        }
+        for (Map<String, Object> materialMap : materialList) {
+            BigDecimal materialId = (BigDecimal) materialMap.get("materialId");
+            BigDecimal materialWeight = (BigDecimal) materialMap.get("materialWeight");
+            BigDecimal materialNumber = (BigDecimal) materialMap.get("materialNumber");
+            BigDecimal saleMaterialId = (BigDecimal) materialMap.get("saleMaterialId");
+            /*
+            运输订单物资子表
+            */
+            OmstruckOrderMaterial omstruckOrderMaterial = new OmstruckOrderMaterial();
+            // 主键
+            BigDecimal orderMaterialId = omstruckOrderMaterialMapper.selectMaxId();
+            omstruckOrderMaterial.setOrderMaterialId(orderMaterialId);
+            // 运输订单id
+            omstruckOrderMaterial.setOrderId(omstruckOrder.getOrderId());
+            // 物资id
+            omstruckOrderMaterial.setMaterialId(materialId);
+            // 物资重量
+            omstruckOrderMaterial.setOrderMaterialWeight(materialWeight);
+            // 物资件数
+            omstruckOrderMaterial.setOrderMaterialNumber(materialNumber);
+            omstruckOrderMaterial.setSaleMaterialId(saleMaterialId);
+            // 新增运输订单子表
+            result += omstruckOrderMaterialMapper.insertSelective(omstruckOrderMaterial);
+        }
+        // 调用websocket
+        Map<String, Object> orderIdMap = new HashMap<>();
+        orderIdMap.put("orderId", omstruckOrder.getOrderId());
+        try {
+            amsSaleOrderMaterialService.pushMesToWebsocket(orderIdMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        // 生成运输执行总实绩
+        result += tmsTruckFeign.addTotalResult(orderIdMap);
+        return  result;
+    }
+
+    /**
+     * 钢材改车,不上传金蝶
+     * @param mapValue
+     * @return
+     * @throws Exception
+     */
+    private int updateSteelOrderNotPush(Map<String, Object> mapValue) throws Exception {
+        Object lineSequence = mapValue.get("lineSequence");
+        int result = 0;
+        if (mapValue.get("orderId") == null) {
+            throw new Exception("还未派车,不允许修改车牌号");
+        }
+        //判断该车序号对应的分录是否全部关闭
+        if(mapValue.get("saleOrderMaterialId") != null && DataChange.dataToBigDecimal(mapValue.get("capacityId")).compareTo(new BigDecimal(35128)) != 0) {
+            Integer flCount = amsSaleMaterialMapper.getAbleFlcount(DataChange.dataToBigDecimal(mapValue.get("saleOrderMaterialId")));
+            if(flCount == 0) {
+                throw new Exception("该运单下所有分录被关闭,无法派车");
+            }
+        }
+        //查询输入进来的车牌号是否与原有车牌号一致,如果一致则退出
+        BigDecimal oldCapacityId = omstruckOrderMapper.getOldCapacityId(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+        if(oldCapacityId.compareTo(DataChange.dataToBigDecimal(mapValue.get("capacityId"))) == 0) {
+            return 1;
+        }
+        //校验该车是否存在手机号
+        String tel=omstruckOrderMapper.getTelByCapacityId(DataChange.dataToBigDecimal(mapValue.get("capacityId")));
+        String driverTel = (String) mapValue.get("driverTel");//填写的手机号
+        if(tel==null || "".equals(tel)){
+            throw new Exception("该车没有电话号码,无法派车!请去资源管理-运力维护该车的电话号码!");
+        }
+        Integer isCheckGps = amsSaleOrderMapper.getDispachSwitch();
+        String capacityNo = (String) mapValue.get("capacityNumber");
+        //得到此次是否校验GPS
+        boolean onceCheck = true;
+        //查询是否自提
+        String selfMention = "否";
+        try{
+            selfMention = amsSaleOrderMapper.findSelfMention(DataChange.dataToBigDecimal(mapValue.get("saleOrderMaterialId")));
+            onceCheck = (boolean) mapValue.get("isCheckGPS");
+        }catch (Exception e){
+            //取值失败不处理,取默认值
+        }
+        //查询车牌号是否是黑名单
+        if(amsSaleOrderMapper.isBlackList(capacityNo)>0){
+            throw new Exception("该车在黑名单中,无法派车!请联系销售公司!");
+        }
+        //非自提,单次校验且全局校验,且车辆不允许无GPS
+        int isGPS=amsSaleOrderMapper.isGPS(capacityNo);
+        if((selfMention==null || selfMention.equals("否")) && onceCheck && (isCheckGps!=null && isCheckGps==0) && isGPS <= 0){
+            Map<String,Object> data=null;
+            try{
+                data= (Map<String,Object>)otmsFeign.getCurrentLocation(capacityNo).getData();
+            }catch (Exception e){
+                throw new Exception("该车没有GPS定位信息,请联系销售公司物流部,申请是否可以派车。");
+            }
+            if(data==null || !"1001".equals(""+data.get("status"))){
+                throw new Exception("该车没有GPS定位信息,请联系销售公司物流部,申请是否可以派车。");
+            }
+        }
+        saleLogUtil.logOrder(DataChange.dataToBigDecimal(mapValue.get("orderId")),"修改车牌号",mapValue,SaleLogUtil.UPDATE);
+        if (lineSequence == null || "0".equals(lineSequence.toString()) || "1".equals(lineSequence.toString()) || "2".equals(lineSequence.toString())) {
+            String capacityids="";
+            Integer capacityid1= (Integer) mapValue.get("capacityIds");
+            Integer capacityid2= (Integer) mapValue.get("capacityId");
+            if (capacityid1!=null && !("".equals(capacityid1))){
+                capacityids=capacityid1+","+capacityid2;
+            }
+            mapValue.put("capacityids",capacityids);
+            //这是修改车牌号
+            //取消是新车牌号,那么不删除排队信息,不删除实绩信息,将运单状态变为7
+            if (DataChange.dataToBigDecimal(mapValue.get("capacityId")).compareTo(new BigDecimal(35128)) != 0) {
+                //根据订单id查询车牌号改动记录
+                String oldCpacityIds = omstruckOrderMapper.getOrderCapacityHistory(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                BigDecimal oldOldCapacityId = null;
+                if(oldCpacityIds != null) {
+                    oldOldCapacityId = DataChange.dataToBigDecimal(oldCpacityIds.split(",")[0]);
+                }
+                //如果旧车号是取消,且取消的前一个车与该车相等,那么就将状态还原
+                if (oldOldCapacityId != null && oldCapacityId != null && oldCapacityId.compareTo(new BigDecimal(35128)) == 0 && DataChange.dataToBigDecimal(mapValue.get("capacityId")).compareTo(oldOldCapacityId) == 0 ) {
+                    //判断该订单下有没有子实绩
+                    BigDecimal  resultId = amsSaleOrderMaterialMapper.selectEnFactory(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                    if(resultId == null) {
+                        OmstruckOrder omstruckOrder = new OmstruckOrder();
+                        omstruckOrder.setOrderId(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                        omstruckOrder.setOrderStatus(new BigDecimal(4));
+                        omstruckOrder.setOrderLineSequence(new BigDecimal(0));
+                        omstruckOrder.setInsertUpdateRemark("将取消改回来原来的车状态不变!");
+                        if(tel != null && !"".equals(tel)){
+                            omstruckOrder.setDriverTel(tel);
+                        }
+                        /*omstruckOrder.set*/
+                        result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
+                    }else{
+                        OmstruckOrder omstruckOrder = new OmstruckOrder();
+                        omstruckOrder.setOrderId(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                        omstruckOrder.setOrderStatus(new BigDecimal(5));
+                        if(tel != null && !"".equals(tel)){
+                            omstruckOrder.setDriverTel(tel);
+                        }
+                        omstruckOrder.setInsertUpdateRemark("将取消改回来原来的车状态不变!");
+                        /*omstruckOrder.set*/
+                        result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
+                    }
+
+                }else{
+                    //将排队信息删掉
+                    Map<String, Object> isSpellingMap = omstruckOrderMapper.getSteelIsSpelling(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                    if(isSpellingMap != null && isSpellingMap.get("listId") != null){
+                        int isSpelling = DataChange.dataToBigDecimal(isSpellingMap.get("isSpelling")).intValue();
+                        if(isSpelling == 1 ){
+                            result += omstruckOrderMapper.deleteSpellingList(isSpellingMap.get("listId"));
+                        }else{
+                            result += omstruckOrderMapper.deleteQueueList(isSpellingMap.get("listId"));
+                        }
+                    }
+                    //若是接单之后还需要删除实绩且将状态变为4
+                    //查询运输订单的状态和总实绩ID
+                    Map<String, Object> orderMesMap = amsSaleOrderMapper.getOrderMes(mapValue);
+                    BigDecimal resultTotalId = DataChange.dataToBigDecimal(orderMesMap.get("resultTotalId"));
+                    //删除排队实绩
+                    if (resultTotalId !=null && !("".equals(resultTotalId))){
+                        omstruckOrderMapper.deleteQueuingPerformance(resultTotalId);
+                    }
+                    OmstruckOrder omstruckOrder = new OmstruckOrder();
+                    omstruckOrder.setOrderId(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                    // 设置新的运输订单号
+                    omstruckOrder.setOrderNumber(DataChange.generateEightDigitsNumber("WYSDD", omstruckOrderMapper.selectMaxId().intValue()));
+                    omstruckOrder.setOrderStatus(new BigDecimal(4));
+                    omstruckOrder.setOrderLineSequence(new BigDecimal(0));
+                    if(tel != null && !"".equals(tel)){
+                        omstruckOrder.setDriverTel(tel);
+                    }
+                    /*omstruckOrder.set*/
+                    result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
+                    //插入日志
+                    result += omstruckOrderMapper.deleteEnResult(resultTotalId);
+                    result += omstruckOrderMapper.deleteWeightResult(resultTotalId);
+                    result += omstruckOrderMapper.deleteLoadResult(resultTotalId);
+                    result += omstruckOrderMapper.deleteLeaveResult(resultTotalId);
+                }
+            }else{
+                OmstruckOrder omstruckOrder = new OmstruckOrder();
+                omstruckOrder.setOrderId(DataChange.dataToBigDecimal(mapValue.get("orderId")));
+                if(tel != null && !"".equals(tel)){
+                    omstruckOrder.setDriverTel(tel);
+                }
+                omstruckOrder.setOrderStatus(new BigDecimal(7));
+                omstruckOrder.setInsertUpdateRemark("取消车牌号,保留实绩将状态变为7");
+                result += omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
+            }
+            result += amsSaleOrderMapper.updateCapacityNumberInFactory(mapValue);
+        }
+        return result;
+    }
 }