From a2e8712808c7c21c489d0385f88d344152257ed7 Mon Sep 17 00:00:00 2001 From: zt Date: Tue, 22 Apr 2025 16:30:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sProjectSubcontractingApplyController.java | 11 +-- ...AppFbsProjectSubcontractingController.java | 13 +++ .../common/constants/ZbfMessageConstant.java | 6 +- .../java/com/ruoyi/common/util/ValidUtil.java | 90 +++++++++++++------ .../impl/FbsWageApplicationServiceImpl.java | 3 +- .../ruoyi/zbf/service/IZbfProjectService.java | 6 +- ...IZbfProjectSubcontractingApplyService.java | 5 ++ ...ProjectSubcontractingApplyServiceImpl.java | 21 +++++ 8 files changed, 108 insertions(+), 47 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingApplyController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingApplyController.java index 873a160..a707f0c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingApplyController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingApplyController.java @@ -1,14 +1,10 @@ package com.ruoyi.web.controller.fbs; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.enums.SubcontractingApplyStatus; -import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.zbf.domain.ZbfProjectSubcontractingApply; import com.ruoyi.zbf.service.IZbfProjectSubcontractingApplyService; import io.swagger.annotations.Api; @@ -34,7 +30,6 @@ public class AppFbsProjectSubcontractingApplyController extends BaseController { private final IZbfProjectSubcontractingApplyService iZbfProjectSubcontractingApplyService; - /** * 新增总包方项目分包申请 */ @@ -55,10 +50,6 @@ public class AppFbsProjectSubcontractingApplyController extends BaseController { @PutMapping("/{subId}") public AjaxResult cancel(@NotNull(message = "主键不能为空") @PathVariable("subId") Long subId) { - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .eq(ZbfProjectSubcontractingApply::getSubId, subId) - .eq(ZbfProjectSubcontractingApply::getFbsUserId, SecurityUtils.getAppUserId()) - .set(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.CANCEL.getCode()); - return AjaxResult.success(iZbfProjectSubcontractingApplyService.update(wrapper)); + return AjaxResult.success(iZbfProjectSubcontractingApplyService.cancel(subId)); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java index 357ee70..41ff9ef 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/fbs/AppFbsProjectSubcontractingController.java @@ -54,4 +54,17 @@ public class AppFbsProjectSubcontractingController extends BaseController { return AjaxResult.success(vo); } + @ApiOperation("分包商消息-查询项目分包详细信息") + @GetMapping("/message/{applyId}") + public AjaxResult getInfoByApplyId(@NotNull(message = "主键不能为空") + @PathVariable("applyId") Long applyId) { + ZbfProjectSubcontractingApply apply = iZbfProjectSubcontractingApplyService.getById(applyId); + ZbfProjectSubcontracting zbfProjectSubcontracting = iZbfProjectSubcontractingService.queryById(apply.getSubId()); + FbsProjectSubcontractingDetailVO vo = BeanUtil.copyProperties(zbfProjectSubcontracting, FbsProjectSubcontractingDetailVO.class); + vo.setSectionName(zbfProjectSectionService.getById(vo.getSectionId()).getSectionName()); + vo.setProjectImg(zbfProjectService.getById(vo.getProjectId()).getProjectImg()); + vo.setApplyStatus(apply.getApplyStatus()); + return AjaxResult.success(vo); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java b/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java index dadd3c7..3623e8c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/constants/ZbfMessageConstant.java @@ -29,10 +29,10 @@ public class ZbfMessageConstant { //任务审批 public static final String ZBF_SIGN_UP_APPLY_HEADLINE = "您申请的【%s】项目【%s】分包,已得到回复!"; - public static final String ZBF_SIGN_UP_APPLY_SUBHEADING = "您申请的【%s】任务【%s】分包,审核人【%s】已%s!"; + public static final String ZBF_SIGN_UP_APPLY_SUBHEADING = "您申请的【%s】项目【%s】分包,审核人【%s】已%s!"; //工资审批 - public static final String ZBF_PAY_APPLY_HEADLINE = "您【%s】任务【%s】分包工资申请已审批!"; - public static final String ZBF_PAY_APPLY_SUBHEADING = "您申请的【%s】任务【%s】分包工资,审核人【%s】已%s!"; + public static final String ZBF_PAY_APPLY_HEADLINE = "您【%s】项目【%s】分包工资申请已审批!"; + public static final String ZBF_PAY_APPLY_SUBHEADING = "您申请的【%s】项目【%s】分包工资,审核人【%s】已%s!"; //分包商->包工头 消息类型 diff --git a/ruoyi-system/src/main/java/com/ruoyi/common/util/ValidUtil.java b/ruoyi-system/src/main/java/com/ruoyi/common/util/ValidUtil.java index 3e7df74..780ac57 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/common/util/ValidUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/common/util/ValidUtil.java @@ -1,6 +1,8 @@ package com.ruoyi.common.util; -import java.util.regex.Pattern; +import cn.hutool.core.util.CreditCodeUtil; +import cn.hutool.core.util.IdcardUtil; +import cn.hutool.core.util.PhoneUtil; /** * 校验工具类 @@ -9,49 +11,79 @@ import java.util.regex.Pattern; */ public class ValidUtil { + //身份证校验 public static boolean isValidIdentityCard(String identityCard) { - // 允许15位纯数字或者18位身份证,18位身份证最后一位可以是数字或字母X/x - return identityCard != null && identityCard.matches("\\d{15}|\\d{17}[\\dXx]"); + return IdcardUtil.isValidCard(identityCard); } + //银行卡号校验 public static boolean isValidBankCard(String bankCard) { // 简单的银行卡号校验逻辑,可以根据需要进行更复杂的校验 - return bankCard != null && bankCard.matches("\\d{16,19}"); + return checkBankCard(bankCard); } - // 定义中国大陆手机号码的正则表达式 - private static final String MOBILE_REGEX = "^1[3-9]\\d{9}$"; - private static final Pattern MOBILE_PATTERN = Pattern.compile(MOBILE_REGEX); - + //手机校验 public static boolean isValidChineseMobile(String phoneNumber) { - if (phoneNumber == null) { - return false; - } // 使用正则表达式进行匹配 - return MOBILE_PATTERN.matcher(phoneNumber).matches(); + return PhoneUtil.isMobile(phoneNumber); } - private static final String BASE_CODE_STRING = "0123456789ABCDEFGHJKLMNPQRTUWXY"; - private static final char[] BASE_CODE_ARRAY = BASE_CODE_STRING.toCharArray(); - private static final int[] WEIGHT = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28}; - //统一社会信用代码校验 public static boolean verifyCreditCode(String code) { - if (code == null || code.length() != 18) { + return CreditCodeUtil.isCreditCode(code); + } + + + /** + * 校验银行卡号方法 + * @param bankCard + * @return + */ + public static boolean checkBankCard(String bankCard) { + if(bankCard == null) { return false; } - char[] inputCodeArray = code.toCharArray(); - char checkCode = inputCodeArray[17]; - int sum = 0; - for (int i = 0; i < 17; i++) { - int idx = BASE_CODE_STRING.indexOf(inputCodeArray[i]); - if (idx == -1) { - return false; - } - sum += idx * WEIGHT[i]; + if(bankCard.length() < 15 || bankCard.length() > 19) { + return false; } - int modulus = sum % 31; - int index = (31 - modulus) % 31; - return checkCode == BASE_CODE_ARRAY[index]; + char bit = getBankCardCheckCode(bankCard.substring(0, bankCard.length() - 1)); + if(bit == 'N'){ + return false; + } + return bankCard.charAt(bankCard.length() - 1) == bit; } + + + /** + * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 + * @param nonCheckCodeBankCard + * @return + */ + public static char getBankCardCheckCode(String nonCheckCodeBankCard){ + if(nonCheckCodeBankCard == null || nonCheckCodeBankCard.trim().length() == 0 + || !nonCheckCodeBankCard.matches("\\d+")) { + //如果传的不是数据返回N + return 'N'; + } + char[] chs = nonCheckCodeBankCard.trim().toCharArray(); + int luhmSum = 0; + for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) { + int k = chs[i] - '0'; + if(j % 2 == 0) { + k *= 2; + k = k / 10 + k % 10; + } + luhmSum += k; + } + return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0'); + } + + + public static void main(String[] args) { + System.out.println(isValidIdentityCard("511622198907061135")); + System.out.println(isValidBankCard("6217857000014152765")); + System.out.println(isValidChineseMobile("15086914548")); + System.out.println(verifyCreditCode("91441900678347132K")); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsWageApplicationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsWageApplicationServiceImpl.java index 4e72c83..149ce7f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsWageApplicationServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/fbs/service/impl/FbsWageApplicationServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; -import com.ruoyi.bgt.domain.BgtProjectTaskProgress; import com.ruoyi.common.core.domain.entity.ZbfUser; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; @@ -215,7 +214,7 @@ public class FbsWageApplicationServiceImpl extends ServicePlusImpl { */ FbsProjectTaskDetailWageVO fbsWage(Long projectId); - - /** * 总包方新增项目 */ Boolean add(ZbfProjectAddDTO dto); - + /** + * 总包方编辑项目 + */ Boolean edit(ZbfProjectAddDTO dto); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java index abab426..cb91cb3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/IZbfProjectSubcontractingApplyService.java @@ -74,4 +74,9 @@ public interface IZbfProjectSubcontractingApplyService extends IServicePlus queryByProjectId(Long projectId); + + /** + * 分包商取消项目分包申请 + */ + Boolean cancel(Long subId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java index 04c9c5c..2885a65 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/zbf/service/impl/ZbfProjectSubcontractingApplyServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; @@ -268,4 +269,24 @@ public class ZbfProjectSubcontractingApplyServiceImpl extends ServicePlusImpl wrapper = Wrappers.lambdaUpdate() + .eq(ZbfProjectSubcontractingApply::getSubId, subId) + .eq(ZbfProjectSubcontractingApply::getFbsUserId, SecurityUtils.getAppUserId()) + .eq(ZbfProjectSubcontractingApply::getApplyStatus, SubcontractingApplyStatus.APPLY.getCode()); + + List list = list(wrapper); + if(CollectionUtil.isEmpty(list)){ + throw new BaseException("您还未申请过该分包"); + } + ZbfProjectSubcontractingApply zbfProjectSubcontractingApply = list.get(0); + zbfProjectSubcontractingApply.setApplyStatus(SubcontractingApplyStatus.CANCEL.getCode()); + ZbfProject project = projectService.getById(zbfProjectSubcontractingApply.getProjectId()); + + zbfMessageService.operation(USERTYPE_FBS, SecurityUtils.getAppUserId(), USERTYPE_ZBF, project.getUserId(), zbfProjectSubcontractingApply.getId(),SqlHelper.table(ZbfProjectSubcontractingApply.class).getTableName()); + return updateById(zbfProjectSubcontractingApply); + } }