浏览代码

Merge remote-tracking branch 'origin/dev_1.1.0' into dev_1.1.0

wangliang 1 年之前
父节点
当前提交
cd6707c917

+ 0 - 1
sop-api/src/main/java/com/qmth/sop/server/api/DeviceDeliveryManageController.java

@@ -5,7 +5,6 @@ import com.qmth.sop.business.bean.params.DevicePlaceParam;
 import com.qmth.sop.business.bean.result.DevicePlaceResult;
 import com.qmth.sop.business.bean.result.DeviceSignResult;
 import com.qmth.sop.business.entity.SysUser;
-import com.qmth.sop.business.entity.TBDeviceDelivery;
 import com.qmth.sop.business.service.TBDeviceDeliveryService;
 import com.qmth.sop.common.annotation.OperationLog;
 import com.qmth.sop.common.contant.SystemConstant;

+ 162 - 53
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDeviceDeliveryServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service.impl;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -25,7 +26,6 @@ import com.qmth.sop.common.enums.*;
 import com.qmth.sop.common.util.FileUtil;
 import com.qmth.sop.common.util.GsonUtil;
 import com.qmth.sop.common.util.ServletUtil;
-import com.sun.org.apache.xpath.internal.operations.Bool;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
@@ -733,8 +733,7 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
 
     @Override
     public List<DeviceSignResult> signList(String crmNo) {
-        return baseMapper.listDeviceSign(crmNo,
-                Arrays.asList(DeviceDeliveryStatusEnum.DELIVER, DeviceDeliveryStatusEnum.USING));
+        return baseMapper.listDeviceSign(crmNo, Arrays.asList(DeviceDeliveryStatusEnum.DELIVER, DeviceDeliveryStatusEnum.USING));
     }
 
     @Override
@@ -744,8 +743,7 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
         if (Objects.isNull(deviceDelivery)) {
             throw ExceptionResultEnum.ERROR.exception(String.format("设备发货记录不存在,ID:[%s]", id));
         }
-        if (deviceDelivery.getStatus() != null && !deviceDelivery.getStatus()
-                .equals(DeviceDeliveryStatusEnum.DELIVER)) {
+        if (deviceDelivery.getStatus() != null && !deviceDelivery.getStatus().equals(DeviceDeliveryStatusEnum.DELIVER)) {
             throw ExceptionResultEnum.ERROR.exception("只能对未签收的设备做签收操作");
         }
         long now = System.currentTimeMillis();
@@ -756,8 +754,7 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
                         String.format("找不到中转设备的发货来源, 发货ID:[%s]", deviceDelivery.getSourceId()));
             }
             //中转设备的源记录的状态,修改为:中转已签收
-            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda()
-                    .eq(TBDeviceDelivery::getId, deviceDelivery.getSourceId())
+            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().eq(TBDeviceDelivery::getId, deviceDelivery.getSourceId())
                     .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.TRANSFER_SIGN)
                     .set(TBDeviceDelivery::getReceiveUserId, userId).set(TBDeviceDelivery::getReceiveTime, now)
                     .set(TBDeviceDelivery::getEffect, Boolean.FALSE).set(TBDeviceDelivery::getUpdateId, userId)
@@ -765,9 +762,9 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
         }
         //更新设备状态为使用中
         this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().eq(TBDeviceDelivery::getId, id)
-                .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.USING)
-                .set(TBDeviceDelivery::getReceiveUserId, userId).set(TBDeviceDelivery::getReceiveTime, now)
-                .set(TBDeviceDelivery::getUpdateId, userId).set(TBDeviceDelivery::getUpdateTime, now));
+                .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.USING).set(TBDeviceDelivery::getReceiveUserId, userId)
+                .set(TBDeviceDelivery::getReceiveTime, now).set(TBDeviceDelivery::getUpdateId, userId)
+                .set(TBDeviceDelivery::getUpdateTime, now));
     }
 
     @Override
@@ -787,17 +784,15 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
                 throw ExceptionResultEnum.ERROR.exception(
                         String.format("找不到中转设备的发货来源, 发货ID:[%s]", deviceDelivery.getSourceId()));
             }
-            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda()
-                    .eq(TBDeviceDelivery::getId, deviceDelivery.getSourceId())
-                    .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.TRANSFER)
-                    .set(TBDeviceDelivery::getEffect, Boolean.TRUE).set(TBDeviceDelivery::getUpdateId, userId)
-                    .set(TBDeviceDelivery::getUpdateTime, now));
+            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().eq(TBDeviceDelivery::getId, deviceDelivery.getSourceId())
+                    .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.TRANSFER).set(TBDeviceDelivery::getEffect, Boolean.TRUE)
+                    .set(TBDeviceDelivery::getUpdateId, userId).set(TBDeviceDelivery::getUpdateTime, now));
         }
 
         this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().eq(TBDeviceDelivery::getId, id)
-                .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.DELIVER)
-                .set(TBDeviceDelivery::getReceiveUserId, null).set(TBDeviceDelivery::getReceiveTime, null)
-                .set(TBDeviceDelivery::getUpdateId, userId).set(TBDeviceDelivery::getUpdateTime, now));
+                .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.DELIVER).set(TBDeviceDelivery::getReceiveUserId, null)
+                .set(TBDeviceDelivery::getReceiveTime, null).set(TBDeviceDelivery::getUpdateId, userId)
+                .set(TBDeviceDelivery::getUpdateTime, now));
     }
 
     @Override
@@ -881,8 +876,8 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
                         .eq(TBDeviceDelivery::getSerialNo, deviceDelivery.getSerialNo())
                         .eq(TBDeviceDelivery::getDeliveryType, InOutTypeEnum.IN));
         if (existDeviceDelivery != null) {
-            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.IN)
-                    .set(TBDeviceDelivery::getExpressNo, expressNo).set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.IN)
+            this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getExpressNo, expressNo)
+                    .set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.IN)
                     .set(TBDeviceDelivery::getDeliverTime, System.currentTimeMillis()).set(TBDeviceDelivery::getDeliverUserId, userId)
                     .set(TBDeviceDelivery::getEffect, Boolean.FALSE).set(TBDeviceDelivery::getUpdateId, userId)
                     .set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
@@ -890,22 +885,7 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
                     .eq(TBDeviceDelivery::getId, existDeviceDelivery.getId()));
         } else {
             //新建入库记录
-            TBDeviceDelivery inDeviceDelivery = new TBDeviceDelivery();
-            inDeviceDelivery.setCrmNo(deviceDelivery.getCrmNo());
-            inDeviceDelivery.setSerialNo(deviceDelivery.getSerialNo());
-            inDeviceDelivery.setUsageType(deviceDelivery.getUsageType());
-            inDeviceDelivery.setSupplierId(deviceDelivery.getSupplierId());
-            inDeviceDelivery.setExpressNo(expressNo);
-            inDeviceDelivery.setDeliveryType(InOutTypeEnum.IN);
-            inDeviceDelivery.setStatus(DeviceDeliveryStatusEnum.IN);
-            inDeviceDelivery.setDeliverTime(System.currentTimeMillis());
-            inDeviceDelivery.setDeliverUserId(userId);
-            inDeviceDelivery.setCreateTime(System.currentTimeMillis());
-            inDeviceDelivery.setCreateId(userId);
-            inDeviceDelivery.setEffect(Boolean.FALSE);
-            inDeviceDelivery.setDeviceStatus(deviceDelivery.getDeviceStatus());
-            inDeviceDelivery.setRemark(remark);
-            save(inDeviceDelivery);
+            saveInDeviceDelivery(expressNo, remark, userId, deviceDelivery);
         }
 
         //更改设备使用状态为入库
@@ -951,11 +931,124 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
                 .set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis()).eq(TBDeviceDelivery::getId, id));
 
         //新增一条发货记录
+        saveTransferDeviceDelivery(receiveCrmNo, expressNo, remark, userId, deviceDelivery);
+    }
+
+    @Override
+    @Transactional
+    public void devicePlaceEdit(DevicePlaceParam devicePlaceParam, Long userId) {
+        TBDeviceDelivery existDeviceDelivery = checkDevicePlace(devicePlaceParam);
+        //使用状态未发生变化
+        if (existDeviceDelivery.getStatus().name().equals(devicePlaceParam.getTransferStatus().name())) {
+            //入库
+            if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.IN)) {
+                this.update(
+                        new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getExpressNo, devicePlaceParam.getExpressNo())
+                                .set(TBDeviceDelivery::getEffect, Boolean.FALSE).set(TBDeviceDelivery::getUpdateId, userId)
+                                .set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
+                                .set(TBDeviceDelivery::getRemark, devicePlaceParam.getRemark())
+                                .set(TBDeviceDelivery::getMailType, devicePlaceParam.getTransferMode())
+                                .eq(TBDeviceDelivery::getId, existDeviceDelivery.getId()));
+            }
+            //中转
+            if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.TRANSFER)) {
+                this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getEffect, Boolean.FALSE)
+                        .set(TBDeviceDelivery::getRemark, devicePlaceParam.getRemark())
+                        .set(TBDeviceDelivery::getMailType, devicePlaceParam.getTransferMode()).set(TBDeviceDelivery::getUpdateId, userId)
+                        .set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
+                        .eq(TBDeviceDelivery::getId, existDeviceDelivery.getId()));
+                //更新接收方的信息
+                this.update(
+                        new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getCrmNo, devicePlaceParam.getReceiveCrmNo())
+                                .set(TBDeviceDelivery::getExpressNo, devicePlaceParam.getExpressNo())
+                                .set(TBDeviceDelivery::getRemark, devicePlaceParam.getRemark()).set(TBDeviceDelivery::getUpdateId, userId)
+                                .set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
+                                .eq(TBDeviceDelivery::getSourceId, existDeviceDelivery.getId())
+                                .eq(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.DELIVER));
+            }
+        } else {
+            //入库->中转
+            if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.TRANSFER)) {
+                //删除入库记录
+                LambdaQueryWrapper<TBDeviceDelivery> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(TBDeviceDelivery::getCrmNo, existDeviceDelivery.getCrmNo());
+                queryWrapper.eq(TBDeviceDelivery::getSerialNo, existDeviceDelivery.getSerialNo());
+                queryWrapper.eq(TBDeviceDelivery::getDeliveryType, InOutTypeEnum.IN);
+                queryWrapper.eq(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.IN);
+                baseMapper.delete(queryWrapper);
+                //写入一条中转记录
+                saveTransferDeviceDelivery(devicePlaceParam.getReceiveCrmNo(), devicePlaceParam.getExpressNo(),
+                        devicePlaceParam.getRemark(), userId, existDeviceDelivery);
+                //更新状态为中转
+                this.update(
+                        new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.TRANSFER)
+                                .set(TBDeviceDelivery::getEffect, Boolean.FALSE)
+                                .set(TBDeviceDelivery::getRemark, devicePlaceParam.getRemark())
+                                .set(TBDeviceDelivery::getMailType, devicePlaceParam.getTransferMode())
+                                .set(TBDeviceDelivery::getUpdateId, userId).set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
+                                .eq(TBDeviceDelivery::getId, existDeviceDelivery.getId()));
+            }
+            //中转->入库
+            if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.IN)) {
+                //删除中转记录
+                LambdaQueryWrapper<TBDeviceDelivery> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(TBDeviceDelivery::getSourceId, existDeviceDelivery.getId());
+                queryWrapper.eq(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.DELIVER);
+                baseMapper.delete(queryWrapper);
+                //写入入库记录
+                saveInDeviceDelivery(devicePlaceParam.getExpressNo(), devicePlaceParam.getRemark(), userId, existDeviceDelivery);
+                //更新状态为入库
+                this.update(new UpdateWrapper<TBDeviceDelivery>().lambda().set(TBDeviceDelivery::getStatus, DeviceDeliveryStatusEnum.IN)
+                        .set(TBDeviceDelivery::getMailType, devicePlaceParam.getTransferMode())
+                        .set(TBDeviceDelivery::getRemark, devicePlaceParam.getRemark()).set(TBDeviceDelivery::getEffect, Boolean.FALSE)
+                        .set(TBDeviceDelivery::getUpdateId, userId).set(TBDeviceDelivery::getUpdateTime, System.currentTimeMillis())
+                        .eq(TBDeviceDelivery::getId, existDeviceDelivery.getId()));
+            }
+        }
+
+    }
+
+    /**
+     * 写入一条新的入库记录
+     *
+     * @param expressNo           订单号
+     * @param remark              其他方式说明
+     * @param userId              登录用户ID
+     * @param existDeviceDelivery 操作的原始发货记录
+     */
+    private void saveInDeviceDelivery(String expressNo, String remark, Long userId, TBDeviceDelivery existDeviceDelivery) {
+        TBDeviceDelivery inDeviceDelivery = new TBDeviceDelivery();
+        inDeviceDelivery.setCrmNo(existDeviceDelivery.getCrmNo());
+        inDeviceDelivery.setSerialNo(existDeviceDelivery.getSerialNo());
+        inDeviceDelivery.setUsageType(existDeviceDelivery.getUsageType());
+        inDeviceDelivery.setSupplierId(existDeviceDelivery.getSupplierId());
+        inDeviceDelivery.setExpressNo(expressNo);
+        inDeviceDelivery.setDeliveryType(InOutTypeEnum.IN);
+        inDeviceDelivery.setStatus(DeviceDeliveryStatusEnum.IN);
+        inDeviceDelivery.setDeliverTime(System.currentTimeMillis());
+        inDeviceDelivery.setDeliverUserId(userId);
+        inDeviceDelivery.setCreateTime(System.currentTimeMillis());
+        inDeviceDelivery.setCreateId(userId);
+        inDeviceDelivery.setEffect(Boolean.FALSE);
+        inDeviceDelivery.setDeviceStatus(existDeviceDelivery.getDeviceStatus());
+        inDeviceDelivery.setRemark(remark);
+        save(inDeviceDelivery);
+    }
+
+    /**
+     * @param crmNo               中转的派单号
+     * @param expressNo           订单号
+     * @param remark              其他方式说明
+     * @param userId              登录用户ID
+     * @param existDeviceDelivery 操作的原始发货记录
+     */
+    private void saveTransferDeviceDelivery(String crmNo, String expressNo, String remark, Long userId,
+            TBDeviceDelivery existDeviceDelivery) {
         TBDeviceDelivery newDeviceDelivery = new TBDeviceDelivery();
-        newDeviceDelivery.setCrmNo(receiveCrmNo);
-        newDeviceDelivery.setSerialNo(deviceDelivery.getSerialNo());
-        newDeviceDelivery.setUsageType(deviceDelivery.getUsageType());
-        newDeviceDelivery.setSupplierId(deviceDelivery.getSupplierId());
+        newDeviceDelivery.setCrmNo(crmNo);
+        newDeviceDelivery.setSerialNo(existDeviceDelivery.getSerialNo());
+        newDeviceDelivery.setUsageType(existDeviceDelivery.getUsageType());
+        newDeviceDelivery.setSupplierId(existDeviceDelivery.getSupplierId());
         newDeviceDelivery.setExpressNo(expressNo);
         newDeviceDelivery.setDeliveryType(InOutTypeEnum.OUT);
         newDeviceDelivery.setStatus(DeviceDeliveryStatusEnum.DELIVER);
@@ -964,29 +1057,45 @@ public class TBDeviceDeliveryServiceImpl extends ServiceImpl<TBDeviceDeliveryMap
         newDeviceDelivery.setCreateTime(System.currentTimeMillis());
         newDeviceDelivery.setCreateId(userId);
         newDeviceDelivery.setEffect(Boolean.FALSE);
-        newDeviceDelivery.setDeviceStatus(deviceDelivery.getDeviceStatus());
+        newDeviceDelivery.setDeviceStatus(existDeviceDelivery.getDeviceStatus());
         newDeviceDelivery.setRemark(remark);
         save(newDeviceDelivery);
     }
 
-    @Override
-    @Transactional
-    public void devicePlaceEdit(DevicePlaceParam devicePlaceParam, Long userId) {
+    private @NotNull TBDeviceDelivery checkDevicePlace(DevicePlaceParam devicePlaceParam) {
         if (devicePlaceParam.getTransferStatus() == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择使用状态");
         }
-        //TODO 业务需要考虑使用状态变更的情况
-        //使用状态为中转
+        if (devicePlaceParam.getTransferMode().equals(MailTypeEnum.MAIL) && StringUtils.isEmpty(devicePlaceParam.getExpressNo())) {
+            throw ExceptionResultEnum.ERROR.exception("快递单号不能为空");
+        }
+        if (devicePlaceParam.getTransferMode().equals(MailTypeEnum.OTHER) && StringUtils.isEmpty(devicePlaceParam.getRemark())) {
+            throw ExceptionResultEnum.ERROR.exception("备注不能为空");
+        }
         if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.TRANSFER)) {
-            transfer(devicePlaceParam.getId().toString(), devicePlaceParam.getTransferMode(), devicePlaceParam.getExpressNo(),
-                    devicePlaceParam.getReceiveCrmNo(), devicePlaceParam.getRemark(), userId);
+            if (StringUtils.isEmpty(devicePlaceParam.getReceiveCrmNo())) {
+                throw ExceptionResultEnum.ERROR.exception("接收方单号不能为空");
+            }
+            TBCrm crm = tbCrmService.getOne(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getCrmNo, devicePlaceParam.getReceiveCrmNo())
+                    .eq(TBCrm::getEnable, Boolean.TRUE).last(SystemConstant.LIMIT1));
+            if (Objects.isNull(crm)) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("接受方单号[%s]不存在", devicePlaceParam.getReceiveCrmNo()));
+            }
         }
-
-        //使用状态为入库
-        if (devicePlaceParam.getTransferStatus().equals(DeviceUseStatusEnum.IN)) {
-            in(devicePlaceParam.getId().toString(), devicePlaceParam.getTransferMode(), devicePlaceParam.getExpressNo(),
-                    devicePlaceParam.getRemark(), userId);
+        TBDeviceDelivery existDeviceDelivery = getById(devicePlaceParam.getId());
+        if (existDeviceDelivery.getStatus().equals(DeviceDeliveryStatusEnum.TRANSFER_SIGN)) {
+            throw ExceptionResultEnum.ERROR.exception("设备已经被签收,无法在编辑");
+        }
+        if (existDeviceDelivery.getStatus().equals(DeviceDeliveryStatusEnum.IN)) {
+            TBDeviceDelivery inDeviceDelivery = baseMapper.selectOne(
+                    new QueryWrapper<TBDeviceDelivery>().lambda().eq(TBDeviceDelivery::getCrmNo, existDeviceDelivery.getCrmNo())
+                            .eq(TBDeviceDelivery::getSerialNo, existDeviceDelivery.getSerialNo())
+                            .eq(TBDeviceDelivery::getDeliveryType, InOutTypeEnum.IN));
+            if (inDeviceDelivery != null && inDeviceDelivery.getStatus().equals(DeviceDeliveryStatusEnum.RECEIVE)) {
+                throw ExceptionResultEnum.ERROR.exception("设备已经被签收,无法在编辑");
+            }
         }
+        return existDeviceDelivery;
     }
 
     private @NotNull String getTransportMode(String expressNo, String remark) {