فهرست منبع

fix:社保申报添加锁,并且添加重复审核判断

ly 10 ماه پیش
والد
کامیت
a694efeb37

+ 51 - 33
src/main/java/cn/ezhizao/project/business/socialSecurity/controller/SocialSecurityConfirmController.java

@@ -431,43 +431,61 @@ public class SocialSecurityConfirmController extends BaseController {
     @PostMapping("/verifyDetail")
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult verifyDetail(@RequestBody BizSocialSecurityConfirmDetail detail) {
+        String join = LockKey.join(LockKey.SOCIALSECURITYCONFIRMDETAIL,detail.getSocialSecurityConfirmId(),detail.getYear(),detail.getMonth(),detail.getCompanyId());
+        DistributionLock lock = new DistributionLock(join);
         boolean bool = true;
-        detail.setVerifierId(SecurityUtils.getUserId());
-        if (detail.getStatus().equals(3)) {
-            BizSocialSecurityConfirm bizSocialSecurityConfirm = socialSecurityConfirmService.getById(detail.getSocialSecurityConfirmId());
-            QueryWrapper<BizSocialSecurityDeclare> qw = new QueryWrapper<>();
-            qw.eq("work_order_id", bizSocialSecurityConfirm.getWorkOrderId());
-
-            BizSocialSecurityDeclare bizSocialSecurityDeclare = socialSecurityDeclareService.getOne(qw);
-            if (bizSocialSecurityDeclare != null) {
-                QueryWrapper<BizSocialSecurityDeclareDetail> kqw = new QueryWrapper<>();
-                kqw.eq("social_security_declare_id", bizSocialSecurityDeclare.getId());
-                kqw.eq("year", detail.getYear());
-                kqw.eq("month", detail.getMonth());
-                BizSocialSecurityDeclareDetail socialSecurityDeclareDetail =
-                        socialSecurityDeclareDetailService.getOne(kqw);
-                if (socialSecurityDeclareDetail == null) {
-                    socialSecurityDeclareDetail = new BizSocialSecurityDeclareDetail();
-                }
-                socialSecurityDeclareDetail.setSocialSecurityDeclareId(bizSocialSecurityDeclare.getId());
-                socialSecurityDeclareDetail.setYear(detail.getYear());
-                socialSecurityDeclareDetail.setMonth(detail.getMonth());
-                socialSecurityDeclareDetail.setCompanyId(detail.getCompanyId());
-                socialSecurityDeclareDetail.setStatus(socialSecurityDeclareDetail.getStatus() != null && socialSecurityDeclareDetail.getStatus() > 1 ? socialSecurityDeclareDetail.getStatus() : 1);
-
-                if (socialSecurityDeclareDetail.getId() == null) {
-                    bool = socialSecurityDeclareDetailService.save(socialSecurityDeclareDetail);
-                } else {
-                    bool = socialSecurityDeclareDetailService.updateById(socialSecurityDeclareDetail);
-                }
+        try {
+            lock.lock();
+            detail.setVerifierId(SecurityUtils.getUserId());
+            List<BizSocialSecurityConfirmDetail> confirmDetailList = socialSecurityConfirmDetailService.query()
+                    .eq("social_security_confirm_id",detail.getSocialSecurityConfirmId())
+                    .eq("year",detail.getYear())
+                    .eq("month", detail.getMonth())
+                    .eq("status",3).list();
+            if(!confirmDetailList.isEmpty()) {
+                return error("审核失败,数据已被审核请刷新");
             }
-            bool = bool && addRecord(detail.getSocialSecurityConfirmId(), detail.getYear(), detail.getMonth(), SecurityUtils.getUserId(), "社保人员信息审核通过");
+            if (detail.getStatus().equals(3)) {
+                BizSocialSecurityConfirm bizSocialSecurityConfirm = socialSecurityConfirmService.getById(detail.getSocialSecurityConfirmId());
+                QueryWrapper<BizSocialSecurityDeclare> qw = new QueryWrapper<>();
+                qw.eq("work_order_id", bizSocialSecurityConfirm.getWorkOrderId());
+
+                BizSocialSecurityDeclare bizSocialSecurityDeclare = socialSecurityDeclareService.getOne(qw);
+                if (bizSocialSecurityDeclare != null) {
+                    QueryWrapper<BizSocialSecurityDeclareDetail> kqw = new QueryWrapper<>();
+                    kqw.eq("social_security_declare_id", bizSocialSecurityDeclare.getId());
+                    kqw.eq("year", detail.getYear());
+                    kqw.eq("month", detail.getMonth());
+                    BizSocialSecurityDeclareDetail socialSecurityDeclareDetail =
+                            socialSecurityDeclareDetailService.getOne(kqw);
+                    if (socialSecurityDeclareDetail == null) {
+                        socialSecurityDeclareDetail = new BizSocialSecurityDeclareDetail();
+                    }
+                    socialSecurityDeclareDetail.setSocialSecurityDeclareId(bizSocialSecurityDeclare.getId());
+                    socialSecurityDeclareDetail.setYear(detail.getYear());
+                    socialSecurityDeclareDetail.setMonth(detail.getMonth());
+                    socialSecurityDeclareDetail.setCompanyId(detail.getCompanyId());
+                    socialSecurityDeclareDetail.setStatus(socialSecurityDeclareDetail.getStatus() != null && socialSecurityDeclareDetail.getStatus() > 1 ? socialSecurityDeclareDetail.getStatus() : 1);
+
+                    if (socialSecurityDeclareDetail.getId() == null) {
+                        bool = socialSecurityDeclareDetailService.save(socialSecurityDeclareDetail);
+                    } else {
+                        bool = socialSecurityDeclareDetailService.updateById(socialSecurityDeclareDetail);
+                    }
+                }
+                bool = bool && addRecord(detail.getSocialSecurityConfirmId(), detail.getYear(), detail.getMonth(), SecurityUtils.getUserId(), "社保人员信息审核通过");
 //            return bool;
-        } else {
-            bool = bool && addRecord(detail.getSocialSecurityConfirmId(), detail.getYear(), detail.getMonth(), SecurityUtils.getUserId(), "社保人员信息审核不通过");
+            } else {
+                bool = bool && addRecord(detail.getSocialSecurityConfirmId(), detail.getYear(), detail.getMonth(), SecurityUtils.getUserId(), "社保人员信息审核不通过");
+            }
+            detail.setVerifierTime(new Date());
+            bool = bool && socialSecurityConfirmDetailService.updateById(detail);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return error("审核失败,请不要同时审核");
+        } finally {
+            lock.unlock();
         }
-        detail.setVerifierTime(new Date());
-        bool = bool && socialSecurityConfirmDetailService.updateById(detail);
         return toAjax(bool);
     }