فهرست منبع

Merge branch 'feat-somethting-20220217'

shc 3 سال پیش
والد
کامیت
3f27ce58d0

+ 74 - 21
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Assert;
@@ -143,9 +144,11 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.Instant;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -903,7 +906,7 @@ public class ApiController {
 			try {
 				String fieldVal = (String) field.get(wmTaskContent);
 
-				all = duplicateImage(fieldVal, id, errorHash, ducImgUrl,all);
+				all = duplicateImage(fieldVal, id, errorHash, ducImgUrl, all);
 			} catch (Exception ignored) {
 			}
 
@@ -911,10 +914,10 @@ public class ApiController {
 
 		if (CollUtil.isNotEmpty(ducImgUrl)) {
 			// 保存图片
-			log.info("all size:{}",all.size());
-			if (CollUtil.isNotEmpty(all)){
+			log.info("all size:{}", all.size());
+			if (CollUtil.isNotEmpty(all)) {
 				all.forEach(hash -> {
-					String  key = String.format("%s:%s", id, hash);
+					String key = String.format("%s:%s", id, hash);
 					log.info("key: {}", key);
 					redisTemplate.delete(key);
 				});
@@ -932,20 +935,20 @@ public class ApiController {
 			redisTemplate.delete(key);
 		}
 
-		if (r.getCode() == CommonConstants.FAIL && CollUtil.isNotEmpty(all)){
+		if (r.getCode() == CommonConstants.FAIL && CollUtil.isNotEmpty(all)) {
 			// 保存图片
-			log.info("all size:{}",all.size());
-				all.forEach(hash -> {
-					String  key = String.format("%s:%s", id, hash);
-					log.info("key: {}", key);
-					redisTemplate.delete(key);
-				});
+			log.info("all size:{}", all.size());
+			all.forEach(hash -> {
+				String key = String.format("%s:%s", id, hash);
+				log.info("key: {}", key);
+				redisTemplate.delete(key);
+			});
 		}
 
 		return r;
 	}
 
-	private List<String> duplicateImage(String contentValue, Integer userId, Set<String> errorHash, List<String> duplicateImageUrl,List<String> all) {
+	private List<String> duplicateImage(String contentValue, Integer userId, Set<String> errorHash, List<String> duplicateImageUrl, List<String> all) {
 
 
 		if (contentValue.startsWith("/admin/sys-file/wmkj")) {
@@ -2460,7 +2463,9 @@ public class ApiController {
 									.eq(WmUserSignDetail::getSignId, userSign.getId()));
 							if (userSignDetail != null) {
 								if (ArrayUtil.isNotEmpty(userSignDetail.getPurpose())) {
-									String[] purposeNameArr = Stream.of(userSignDetail.getPurpose()).map(s -> UserSignPurposeEnum.resolve(s).getName()).toArray(String[]::new);
+									String[] purposeNameArr = Stream.of(userSignDetail.getPurpose())
+											.map(s -> UserSignPurposeEnum.resolve(s).getName())
+											.toArray(String[]::new);
 									userSignDetail.setPurposeName(purposeNameArr);
 								}
 								if (StrUtil.isNotBlank(userSignDetail.getResult())) {
@@ -2532,21 +2537,20 @@ public class ApiController {
 		// 获取更新操作的用户角色
 		List<Integer> roles = SecurityUtils.getRoles();
 
+		Integer ageByIdCard = null;
 		// 如果角色中包含全职和兼职就需要校验身份证年龄
 		if (roles.contains(5) || roles.contains(6)) {
 			// 校验身份证上的年龄
 			if (StringUtils.isNotEmpty(userUpdateInput.getIdCardNumber())) {
-				int ageByIdCard = IdcardUtil.getAgeByIdCard(userUpdateInput.getIdCardNumber());
+				ageByIdCard = IdcardUtil.getAgeByIdCard(userUpdateInput.getIdCardNumber());
 				if (ageByIdCard < 18) {
 					return R.failed("年龄未满十八");
-				} else if (ageByIdCard > 65) {
-					return R.failed("年龄已超过六十五");
 				}
 			}
 		}
 
 		/**
-		 * TODO 小程序的认证
+		 * 小程序的认证
 		 * @Modify: start
 		 * @Version: v2021.4.16
 		 * @Author: ryz
@@ -2583,6 +2587,35 @@ public class ApiController {
 
 				if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(subType)) {
 
+					// 校验身份证上的年龄 60周岁前15天
+					if (ageByIdCard != null && StringUtils.isNotEmpty(userUpdateInput.getIdCardNumber())) {
+
+						boolean over60 = false;
+						log.warn("ageByIdCard:{}", ageByIdCard);
+						if (ageByIdCard == 59) {
+							String birth = IdcardUtil.getBirth(userUpdateInput.getIdCardNumber());
+							log.warn("birth string:{}", birth);
+							LocalDate birthday = LocalDate.parse(birth, DatePattern.PURE_DATE_FORMATTER);
+
+							// 获取今年的生日
+							LocalDate thisBirthday = LocalDate.of(LocalDate.now().getYear(), birthday.getMonthValue(), birthday.getDayOfMonth());
+							LocalDate limit = thisBirthday.minus(15, ChronoUnit.DAYS);
+							log.warn("this year birthday:{}, before 15 days: {}", thisBirthday, limit);
+
+							if (LocalDate.now().isAfter(limit)) {
+								over60 = true;
+							}
+
+						} else if (ageByIdCard >= 60) {
+							over60 = true;
+						}
+
+						if (over60) {
+							errorMap.put(SubjectTypeEnum.TYPE_RENLIJIA, "年龄已超过六十");
+							continue;
+						}
+					}
+
 					SysDeptSub subCondition = new SysDeptSub();
 					subCondition.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
 					subCondition.setDeptId(sysDept.getDeptId());
@@ -2651,6 +2684,14 @@ public class ApiController {
 
 				} else if (SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode().equals(subType)) {
 
+					// 校验身份证上的年龄 60周岁前15天
+					if (ageByIdCard != null && StringUtils.isNotEmpty(userUpdateInput.getIdCardNumber())) {
+						if (ageByIdCard > 65) {
+							errorMap.put(SubjectTypeEnum.TYPE_SHUIBANGYUN, "年龄已超过六十五");
+							continue;
+						}
+					}
+
 					SysDeptSub subCondition = new SysDeptSub();
 					subCondition.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
 					subCondition.setDeptId(sysDept.getDeptId());
@@ -2674,7 +2715,7 @@ public class ApiController {
 					model.setName(sysUser.getRealname());
 					model.setNotifyUrl("http://localhost:8808");
 					boolean isPingAnBank = StrUtil.isNotEmpty(userUpdateInput.getBankCardNumber());
-					if (isPingAnBank){
+					if (isPingAnBank) {
 						model.setPayAccount(userUpdateInput.getBankCardNumber());
 					}
 					model.setEnterpriseCode(sysDept.getTaxCode());
@@ -2700,7 +2741,7 @@ public class ApiController {
 					sysCertResultRecordMapper.insert(record);
 
 					if (response.success()) {
-						sysUser.setCertStatus(isPingAnBank? TaxHelperCertStatus.UNCHECKED_BIND.getCode() : TaxHelperCertStatus.ADD_MEMBER.getCode());
+						sysUser.setCertStatus(isPingAnBank ? TaxHelperCertStatus.UNCHECKED_BIND.getCode() : TaxHelperCertStatus.ADD_MEMBER.getCode());
 					} else {
 						log.info("税邦云增员失败:{},{},原因是:{}", sysUser.getRealname(), sysUser.getUsername(), response.getMessage());
 						userUpdateInput.setIdCardNumber(null);
@@ -2711,9 +2752,19 @@ public class ApiController {
 			}
 		}
 
+		String msg = "";
+		for (Map.Entry<SubjectTypeEnum, String> entry : errorMap.entrySet()) {
+			if (SubjectTypeEnum.TYPE_RENLIJIA.equals(entry.getKey())) {
+				msg += SubjectTypeEnum.TYPE_RENLIJIA.getDesc() + "认证结果:" + entry.getValue() + ";";
+			}
+			if (SubjectTypeEnum.TYPE_SHUIBANGYUN.equals(entry.getKey())) {
+				msg += SubjectTypeEnum.TYPE_SHUIBANGYUN.getDesc() + "认证结果:" + entry.getValue() + ";";
+			}
+		}
+
 		// 两家都失败了,就中止
 		if (errorMap.size() == 2) {
-			return R.failed(errorMap);
+			return R.failed(errorMap,msg);
 		}
 
 
@@ -2732,7 +2783,9 @@ public class ApiController {
 		}
 		sysUserService.updateById(sysUser);
 
-		return R.ok(errorMap);
+
+
+		return R.ok(errorMap, msg);
 	}
 
 

+ 18 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -67,7 +67,10 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -2423,18 +2426,31 @@ public class WmScorePackageController {
 								 @RequestParam(value = "packageType2") Integer packageType2,
 								 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
 								 @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
-								 @RequestParam(value = "typeid", required = false) String typeId
+								 @RequestParam(value = "typeid", required = false) String typeId,
+								 @RequestParam(value = "monthStart", required = false) String monthStart,
+								 @RequestParam(value = "monthEnd", required = false) String monthEnd
 	) {
 
 		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
 		Integer userId = SecurityUtils.getUser().getId();
 
+		LocalDateTime start = null;
+		LocalDateTime end = null;
+
+		if (StrUtil.isNotEmpty(monthStart) && StrUtil.isNotEmpty(monthEnd)){
+			start = LocalDateTime.of( LocalDate.parse(monthStart + "-01", DatePattern.NORM_DATE_FORMATTER), LocalTime.MIN);
+			LocalDate e = LocalDate.parse(monthEnd + "-01", DatePattern.NORM_DATE_FORMATTER);
+			end = LocalDateTime.of(e.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
+
+		}
+
 		LambdaQueryWrapper<WmScorePackage> queryWrapper = Wrappers.<WmScorePackage>lambdaQuery()
 				.eq(WmScorePackage::getPackageType1, packageType1)
 				.eq(WmScorePackage::getPackageType2, packageType2)
 				.like(StrUtil.isNotEmpty(scorePackageName), WmScorePackage::getScorePackageName, scorePackageName)
 				.eq(scorePackageStatus != null, WmScorePackage::getScorePackageStatus, scorePackageStatus)
-				.eq(WmScorePackage::getSendPackageDeptId, sendDeptId);
+				.eq(WmScorePackage::getSendPackageDeptId, sendDeptId)
+				.between(start != null && end != null, WmScorePackage::getCreateTime, start, end );
 
 		if (StringUtil.isEmpty(typeId)) {
 			queryWrapper.in(WmScorePackage::getTypeid, "3", "4");

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleOutput.java

@@ -60,4 +60,6 @@ public class WmScorePackageSettleOutput {
 	 */
 	private String sourceType;
 
+	private String settleNoteNumber;
+
 }

+ 82 - 28
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java

@@ -20,6 +20,7 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.IdcardUtil;
@@ -77,7 +78,9 @@ import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -193,7 +196,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	 * 角色校验
 	 *
 	 * @param roleName 角色名称
-	 * @param userDTO 用户dto
+	 * @param userDTO  用户dto
 	 * @param dept     部门
 	 * @return 校验错误信息
 	 */
@@ -431,9 +434,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	 * 校验通用dto信息
 	 *
 	 * @param commonUserDTOList 通用用户dto信息
-	 * @param creator       创建人
-	 * @param errorMap      错误信息记录map
-	 * @param currentList   正确结果收集信息
+	 * @param creator           创建人
+	 * @param errorMap          错误信息记录map
+	 * @param currentList       正确结果收集信息
 	 */
 	private void checkoutCommonUserDTOInfo(List<CommonUserDTO> commonUserDTOList, HnqzUser
 			creator, Map<String, String> errorMap, List<UserDTO> currentList) {
@@ -441,7 +444,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		// 行编号
 		log.info("开始校验数据:{}", commonUserDTOList);
 
-		if (commonUserDTOList.size() != 1){
+		if (commonUserDTOList.size() != 1) {
 			log.error("表中手机号重复");
 			Set<String> idSet = commonUserDTOList.stream().map(dto -> dto.getId()).collect(Collectors.toSet());
 			errorMap(errorMap, "表中手机号重复", JSONUtil.toJsonStr(idSet));
@@ -475,7 +478,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
 			// 校验部门下是否有启用的用户
 			int count = count(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username)
-					.eq(SysUser::getDeptId,creator.getDeptId())
+					.eq(SysUser::getDeptId, creator.getDeptId())
 					.eq(SysUser::getLockFlag, LockEnum.UN_LOCK.val()).eq(SysUser::getDelFlag, DelEnum.NOT_DEL.val()));
 			if (count != 0) {
 				log.info("手机号被占用");
@@ -503,7 +506,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 				userDTO.setCityCode("");
 			} else {
 				String provinceCode = StrUtil.cleanBlank(commonUserDTO.getProvinceCode());
-				if (StringUtils.isEmpty(provinceCode)){
+				if (StringUtils.isEmpty(provinceCode)) {
 					log.error("省份编码为空");
 					errorMap(errorMap, "省份编码为空", commonUserDTO.getId());
 				}
@@ -518,7 +521,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 				userDTO.setCity(city);
 
 				String cityCode = StrUtil.cleanBlank(commonUserDTO.getCityCode());
-				if (StringUtils.isEmpty(cityCode)){
+				if (StringUtils.isEmpty(cityCode)) {
 					log.error("城市编码为空");
 					errorMap(errorMap, "城市编码为空", commonUserDTO.getId());
 				}
@@ -577,25 +580,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		String inputIdCardNumber = input.getIdCardNumber();
 		String bankCardNumber = input.getBankCardNumber();
 
-		// 校验身份证上的年龄
-		if (StringUtils.isNotEmpty(inputIdCardNumber)) {
-			// 获取更新操作的用户角色
-			List<Integer> roles = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
-					.eq(SysUserRole::getUserId, input.getUserId()))
-					.stream().mapToInt(SysUserRole::getRoleId).boxed().collect(Collectors.toList());
-			// 如果角色中包含全职和兼职就需要校验身份证年龄
-			if (roles.contains(5) || roles.contains(6)) {
-				int ageByIdCard = IdcardUtil.getAgeByIdCard(inputIdCardNumber);
-				if (ageByIdCard < 18) {
-					return R.failed("年龄未满十八");
-				} else if (ageByIdCard > 65) {
-					return R.failed("年龄已超过六十五");
-				}
-			}
-		}
-
 		sysUser.setIdCardNumber(inputIdCardNumber);
-		if (StrUtil.isNotEmpty(bankCardNumber)){
+		if (StrUtil.isNotEmpty(bankCardNumber)) {
 			sysUser.setBankCardNumber(input.getBankCardNumber());
 		}
 
@@ -635,6 +621,27 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			resultMap.put("msg", "人员所在机构未配置结算信息");
 			return resultMap;
 		}
+
+		// 校验身份证上的年龄
+		if (StringUtils.isNotEmpty(sysUser.getIdCardNumber())) {
+			// 获取更新操作的用户角色
+			List<Integer> roles = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
+					.eq(SysUserRole::getUserId, sysUser.getUserId()))
+					.stream().mapToInt(SysUserRole::getRoleId).boxed().collect(Collectors.toList());
+			// 如果角色中包含全职和兼职就需要校验身份证年龄
+			if (roles.contains(5) || roles.contains(6)) {
+				int ageByIdCard = IdcardUtil.getAgeByIdCard(sysUser.getIdCardNumber());
+				if (ageByIdCard < 18) {
+					resultMap.put("msg", "年龄未满十八");
+					return resultMap;
+				} else if (ageByIdCard > 65) {
+					resultMap.put("msg", "年龄已超过六十五");
+					return resultMap;
+				}
+			}
+		}
+
+
 		log.info("------开始认证------");
 		log.info("------认证渠道:税邦云------");
 		log.info("------认证人员姓名:------ {}", sysUser.getRealname());
@@ -653,7 +660,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		model.setName(sysUser.getRealname());
 		model.setNotifyUrl("http://localhost:8808");
 		boolean isPingAnBank = StrUtil.isNotEmpty(sysUser.getBankCardNumber());
-		if (isPingAnBank){
+		if (isPingAnBank) {
 			model.setPayAccount(sysUser.getBankCardNumber());
 		}
 		model.setEnterpriseCode(sysDept.getTaxCode());
@@ -679,7 +686,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		sysCertResultRecordMapper.insert(record);
 
 		if (response.success()) {
-			sysUser.setCertStatus(isPingAnBank? TaxHelperCertStatus.UNCHECKED_BIND.getCode() : TaxHelperCertStatus.ADD_MEMBER.getCode());
+			sysUser.setCertStatus(isPingAnBank ? TaxHelperCertStatus.UNCHECKED_BIND.getCode() : TaxHelperCertStatus.ADD_MEMBER.getCode());
 			resultMap.put("msg", "增员成功");
 		} else {
 			log.info("税邦云增员失败:{},{},原因是:{}", sysUser.getRealname(), sysUser.getUsername(),
@@ -701,6 +708,53 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			resultMap.put("msg", "人员所在机构未配置结算信息");
 			return resultMap;
 		}
+
+
+		// 校验身份证上的年龄
+		if (StringUtils.isNotEmpty(sysUser.getIdCardNumber())) {
+			// 获取更新操作的用户角色
+			List<Integer> roles = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
+					.eq(SysUserRole::getUserId, sysUser.getUserId()))
+					.stream().mapToInt(SysUserRole::getRoleId).boxed().collect(Collectors.toList());
+			// 如果角色中包含全职和兼职就需要校验身份证年龄
+			if (roles.contains(5) || roles.contains(6)) {
+				int ageByIdCard = IdcardUtil.getAgeByIdCard(sysUser.getIdCardNumber());
+				if (ageByIdCard < 18) {
+					resultMap.put("msg", "年龄未满十八");
+					return resultMap;
+				} else {
+					// 校验身份证上的年龄 60周岁前15天
+
+					boolean over60 = false;
+					log.warn("ageByIdCard:{}", ageByIdCard);
+					if (ageByIdCard == 59) {
+						String birth = IdcardUtil.getBirth(sysUser.getIdCardNumber());
+						log.warn("birth string:{}", birth);
+						LocalDate birthday = LocalDate.parse(birth, DatePattern.PURE_DATE_FORMATTER);
+
+						// 获取今年的生日
+						LocalDate thisBirthday = LocalDate.of(LocalDate.now().getYear(), birthday.getMonthValue(), birthday.getDayOfMonth());
+						LocalDate limit = thisBirthday.minus(15, ChronoUnit.DAYS);
+						log.warn("this year birthday:{}, before 15 days: {}", thisBirthday, limit);
+
+						if (LocalDate.now().isAfter(limit)) {
+							over60 = true;
+						}
+
+					} else if (ageByIdCard >= 60) {
+						over60 = true;
+					}
+
+					if (over60) {
+						resultMap.put("msg", "年龄已超过六十");
+						return resultMap;
+					}
+
+				}
+
+			}
+		}
+
 		log.info("------开始认证------");
 		log.info("------认证渠道:人力家------");
 		log.info("------认证人员姓名:------ {}", sysUser.getRealname());