Prechádzať zdrojové kódy

监理相关操作逻辑调整

zhuang 1 rok pred
rodič
commit
9e98e09a62

+ 14 - 3
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxOutsideInspectionItpServiceImpl.java

@@ -226,9 +226,20 @@ public class ZhcxOutsideInspectionItpServiceImpl extends ServiceImpl<ZhcxOutside
                 dispatchDo.setDispatchstatus("20");
             } else {
                 /* 接收/有条件接收 */
-                dispatchDo.setInspectionconclusion(operType.equals("50") ? "10" : "30");
-                dispatchDo.setRefusereason(vo.get(i).getReason());
-                inspectionItpDo.setInspectionstatus("30");
+                //不是本人的数据无法接收 Inspectionstatus=40代表取消
+                if(!dispatchDo.getSupervisionid().equals(user.getId())){
+                    sb.append("单据号:"+inspectioncode+"已被改派,不能接收,请刷新数据查看</br>");
+                }
+                if("40".equals(inspectionItpDo.getInspectionstatus())){
+                    sb.append("单据号:"+inspectioncode+"已被取消,请刷新数据查看</br>");
+                }
+                if (Integer.valueOf(inspectionItpDo.getInspectionstatus()) == 20) {
+                    dispatchDo.setInspectionconclusion(operType.equals("50") ? "10" : "30");
+                    dispatchDo.setRefusereason(vo.get(i).getReason());
+                    inspectionItpDo.setInspectionstatus("30");
+                }else{
+                    sb.append("单据号:"+inspectioncode+"已被接收,请刷新数据查看</br>");
+                }
             }
             /* 检验员拒收和接收时会传回检验开始/结束时间和文件 */
             if (Arrays.asList("20", "50", "60").contains(operType)) {

+ 36 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/utils/LockUtils.java

@@ -0,0 +1,36 @@
+package com.rongwei.bscommon.sys.utils;
+
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author shangmi
+ */
+@Component
+public class LockUtils {
+
+    private ConcurrentHashMap map = new ConcurrentHashMap();
+    /** * 行锁的加锁方法 */
+    public synchronized void lock(String type,String id) {
+        System.out.println("当前线程 " + Thread.currentThread().getName());
+        try {
+            while(map.containsKey(type+id)){
+            wait();
+            }
+            map.put(type+id,"");
+            System.out.println("线程 " + Thread.currentThread().getName() + "拿到锁 , 锁定资源" + id);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+    }
+    /** * 行锁的解锁方法 */
+    public synchronized void unlock(String type,String id){
+        while(map.containsKey(type+id)){
+            map.remove(type+id);
+            System.out.println("线程 " + Thread.currentThread().getName() + "释放锁 , 释放资源" + id);
+            notifyAll();
+        }
+    }
+}

+ 18 - 2
business-server/src/main/java/com/rongwei/bsserver/controller/ZhcxOperOutsideInspectionController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ZhcxOutsideInspectionItpService;
+import com.rongwei.bscommon.sys.utils.LockUtils;
 import com.rongwei.bsentity.vo.OperOutsideInspectionVo;
 import com.rongwei.rwcommon.base.R;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,10 +17,25 @@ import java.util.List;
 public class ZhcxOperOutsideInspectionController {
     @Autowired
     private ZhcxOutsideInspectionItpService inspectionService;
+    @Autowired
+    private LockUtils lockUtils;
 
     @RequestMapping("/OperInspectionStatus")
     public R OperInspectionStatus(@RequestBody List<OperOutsideInspectionVo> vo) {
-        R r = inspectionService.operInspectionStatus(vo);
-        return r;
+        try {
+            for(OperOutsideInspectionVo inspectionVo : vo){
+                String itpId = inspectionVo.getItpId();
+                lockUtils.lock("itpid",itpId);
+            }
+            R r = inspectionService.operInspectionStatus(vo);
+            return r;
+        } catch (Exception e) {
+            return R.errorWithMsg("操作失败");
+        }finally {
+            for(OperOutsideInspectionVo inspectionVo : vo){
+                String itpId = inspectionVo.getItpId();
+                lockUtils.lock("itpid",itpId);
+            }
+        }
     }
 }