Selaa lähdekoodia

Merge branch 'master' into feat-20230327-newuisupport

李学松 2 vuotta sitten
vanhempi
commit
d4b732961a
44 muutettua tiedostoa jossa 2138 lisäystä ja 288 poistoa
  1. 11 0
      db/v2.0/230330.sql
  2. 16 0
      db/v2.0/230410.sql
  3. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java
  4. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUser.java
  5. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/UserVO.java
  6. 83 63
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  7. 50 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/GigThirdApiController.java
  8. 9 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java
  9. 19 51
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java
  10. 175 18
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java
  11. 50 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageSettleNoteController.java
  12. 0 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageStatusController.java
  13. 58 7
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java
  14. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java
  15. 24 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmTask.java
  16. 70 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/ZhongzhiInputRecord.java
  17. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java
  18. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java
  19. 36 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/output/WmTaskSettleNoteOutput.java
  20. 15 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java
  21. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/PackageTypeEnum.java
  22. 45 12
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java
  23. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectTypeEnum.java
  24. 39 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/ZhongZhiCertStatus.java
  25. 11 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageSettleNoteMapper.java
  26. 18 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/ZhongzhiInputRecordMapper.java
  27. 52 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java
  28. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java
  29. 28 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageSettleNoteService.java
  30. 13 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/ZhongzhiInputRecordService.java
  31. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigThirdApiService.java
  32. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/SysUserSignCertService.java
  33. 68 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/GigThirdApiServiceImpl.java
  34. 54 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java
  35. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java
  36. 371 17
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java
  37. 33 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java
  38. 569 74
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java
  39. 52 28
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageStatusServiceImpl.java
  40. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScoreTaskTypeServiceImpl.java
  41. 9 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java
  42. 22 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/ZhongzhiInputRecordServiceImpl.java
  43. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml
  44. 69 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageSettleNoteMapper.xml

+ 11 - 0
db/v2.0/230330.sql

@@ -0,0 +1,11 @@
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp32', '关联积分包', 1, 'domain', 1, 200, null, '', 'package_list', '1', null, '0', '0', 1, '2023-03-16 15:59:15', null, null, null);
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp12', '药品', 2, 'domain', 1, 200, null, '', 'package_drug_list', '1', null, '0', '0', 1, '2023-03-16 15:59:15', null, null, null);
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp13', '数量', 4, 'number', 1, 20, null, '', '', '1', null, '0', '0', 1, '2023-03-16 15:59:15', null, null, null);
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp4', '时间', 5, 'datetime', 1, 200, null, '', '', '1', null, '0', '0', 1, '2023-03-16 15:59:15', null, null, null);
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp7', '现场照片', 6, 'img', 1, 5, null, '', '', '1', null, '0', '0', 1, '2023-03-16 15:59:15', null, null, null);
+INSERT INTO wm_task_content_config ( base_type_id, task_type_id, task_filed_key, task_filed_value, seq, task_filed_type, task_filed_minsize, task_filed_maxsize, task_filed_alert, dict_url, dict_group_name, is_mustfill, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user) VALUES ('47', '47', 'temp23', '推广类型', 3, 'select', 1, 2, '', '', 'drugstore_promotion_type', '1', null, '0', '0', 1, '2021-06-11 16:29:17', null, '2021-06-11 16:29:16', null);
+
+
+
+alter table wm_team
+    modify member varchar(2048) null comment '团队成员';

+ 16 - 0
db/v2.0/230410.sql

@@ -0,0 +1,16 @@
+create table zhongzhi_input_record
+(
+    id          int auto_increment comment '主键id'
+        primary key,
+    req_type    varchar(20)                        not null comment '请求业务类型',
+    order_no    varchar(64)                        null comment '三方订单号',
+    req_body    text                               null comment '请求body',
+    create_time datetime default CURRENT_TIMESTAMP null comment '创建时间'
+)
+    comment '中智回调异步通知记录';
+
+alter table sys_user
+    add bank_name varchar(32) null comment '开户行';
+
+alter table sys_user_sub
+    add bank_name varchar(64) null comment '开户行' after bank_phone;

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -143,6 +143,11 @@ public interface CacheConstants {
 	 */
 	String ZHONG_YI_YUN_SETTLE_NOTIFY_KEY = "ZHONG:YI:YUN:SETTLE:NOTIFY:KEY:";
 
+	/**
+	 * 中智结算异步结果回调key
+	 */
+	String ZHONG_ZHI_SETTLE_NOTIFY_KEY = "ZHONG:ZHI:SETTLE:NOTIFY:KEY:";
+
 	/**
 	 * 发起阿拉丁认证渠道记录key
 	 */

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUser.java

@@ -269,6 +269,11 @@ public class SysUser implements Serializable {
 	 */
 	private String bankPhone;
 
+	/**
+	 * 开户行
+	 */
+	private String bankName;
+
 	/**
 	 * 人力家认证状态
 	 */

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/UserVO.java

@@ -237,6 +237,11 @@ public class UserVO implements Serializable {
 	 */
 	private String bankPhone;
 
+	/**
+	 * 开户行
+	 */
+	private String bankName;
+
 	/**
 	 * 人力家认证状态
 	 */

+ 83 - 63
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -246,6 +246,13 @@ public class ApiController {
 		} else if ("42".equals(taskTypeId) || "43".equals(taskTypeId) || "44".equals(taskTypeId)) {
 			// 手术跟台-一级/手术跟台-二级/手术跟台-三级 都取42
 			connfigMap = getTaskContentConfigByTaskTypeId("42");
+		} else if ("47".equals(taskTypeId) || "48".equals(taskTypeId) || "49".equals(taskTypeId) || "50".equals(taskTypeId)) {
+			// 库存调研、竞品调研、培训、使用情况调查 都取47
+			connfigMap = getTaskContentConfigByTaskTypeId("47");
+			// 查询积分值
+			List<WmTaskType> taskTypes = wmTaskTypeService.listByIds(CollUtil.toList("47", "48", "49", "50"));
+			Map<String, Integer> taskTypeScoreMap = taskTypes.stream().collect(Collectors.toMap(WmTaskType::getId, WmTaskType::getScore));
+			connfigMap.put("taskTypeScore", taskTypeScoreMap);
 		} else {
 			connfigMap = getTaskContentConfigByTaskTypeId(taskTypeId);
 		}
@@ -354,62 +361,65 @@ public class ApiController {
 						query.setEnableFlag("0");
 
 						List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(Wrappers.lambdaQuery(query));
-						Set<String> scoreIds = statusList.stream()
-								.map(WmScorePackageStatus::getPackageId).collect(Collectors.toSet());
-						// 批量查询积分包
-						List<WmScorePackage> wmScorePackages = wmScorePackageService.listByIds(scoreIds);
-						Map<String, WmScorePackage> scorePackageMap = wmScorePackages.stream()
-								.collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
-						// 批量查询scoreTaskType
-						List<Map<String, Object>> scoreTaskTypeCountList = wmScoreTaskTypeMapper.countByScoreId(taskTypeId, scoreIds);
-						Map<String, Integer> scoreTaskTypeCountMap = scoreTaskTypeCountList.stream()
-								.collect(Collectors.toMap(o -> String.valueOf(o.get("score_id")), o -> Integer.parseInt(String.valueOf(o.get("count")))));
-
-						for (WmScorePackageStatus item : statusList) {
-							WmScorePackage wmScorePackage = scorePackageMap.get(item.getPackageId());
-							if (null != wmScorePackage) {
-								if ("0".equals(wmScorePackage.getTaskAddFlag())) {
-									continue;
-								}
-								if ("1".equals(wmScorePackage.getEnableFlag())) {
-									continue;
-								}
-								if ("2".equals(wmScorePackage.getPackageType2())) {
-									continue;
-								}
-
-								if ("28".equals(taskTypeId)) {
-									if ("3".equals(wmScorePackage.getPackageType1())) {
-										Map<String, Object> map = new HashMap<>();
-										map.put("label", wmScorePackage.getScorePackageName());
-										map.put("value", wmScorePackage.getId());
-										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
-												.getDrugProducerList());
-										map.put("drugProducer", drugProducer);
-										listMap.add(map);
+						if (CollUtil.isNotEmpty(statusList)) {
+							Set<String> scoreIds = statusList.stream()
+									.map(WmScorePackageStatus::getPackageId).collect(Collectors.toSet());
+							// 批量查询积分包
+							List<WmScorePackage> wmScorePackages = wmScorePackageService.listByIds(scoreIds);
+							Map<String, WmScorePackage> scorePackageMap = wmScorePackages.stream()
+									.collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
+							// 批量查询scoreTaskType
+							List<Map<String, Object>> scoreTaskTypeCountList = wmScoreTaskTypeMapper.countByScoreId(taskTypeId, scoreIds);
+							Map<String, Integer> scoreTaskTypeCountMap = scoreTaskTypeCountList.stream()
+									.collect(Collectors.toMap(o -> String.valueOf(o.get("score_id")), o -> Integer.parseInt(String.valueOf(o.get("count")))));
+
+							for (WmScorePackageStatus item : statusList) {
+								WmScorePackage wmScorePackage = scorePackageMap.get(item.getPackageId());
+								if (null != wmScorePackage) {
+									if ("0".equals(wmScorePackage.getTaskAddFlag())) {
+										continue;
 									}
-
-								} else {
-									if ("3".equals(wmScorePackage.getPackageType1())) {
+									if ("1".equals(wmScorePackage.getEnableFlag())) {
+										continue;
+									}
+									if (PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(wmScorePackage.getPackageType2())
+											&& !PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
 										continue;
 									}
-									/**
-									 * 过滤有效任务类型
-									 */
-									WmScoreTaskType taskType = new WmScoreTaskType();
-									taskType.setTaskTypeId(taskTypeId);
-									taskType.setScoreId(wmScorePackage.getId());
-
-									int total = scoreTaskTypeCountMap.getOrDefault(wmScorePackage.getId(), 0);
 
-									if (total != 0) {
-										Map<String, Object> map = new HashMap<>();
-										map.put("label", wmScorePackage.getScorePackageName());
-										map.put("value", wmScorePackage.getId());
-										String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
-												.getDrugProducerList());
-										map.put("drugProducer", drugProducer);
-										listMap.add(map);
+									if ("28".equals(taskTypeId)) {
+										if ("3".equals(wmScorePackage.getPackageType1())) {
+											Map<String, Object> map = new HashMap<>();
+											map.put("label", wmScorePackage.getScorePackageName());
+											map.put("value", wmScorePackage.getId());
+											String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
+													.getDrugProducerList());
+											map.put("drugProducer", drugProducer);
+											listMap.add(map);
+										}
+
+									} else {
+										if ("3".equals(wmScorePackage.getPackageType1())) {
+											continue;
+										}
+										/**
+										 * 过滤有效任务类型
+										 */
+										WmScoreTaskType taskType = new WmScoreTaskType();
+										taskType.setTaskTypeId(taskTypeId);
+										taskType.setScoreId(wmScorePackage.getId());
+
+										int total = scoreTaskTypeCountMap.getOrDefault(wmScorePackage.getId(), 0);
+
+										if (total != 0) {
+											Map<String, Object> map = new HashMap<>();
+											map.put("label", wmScorePackage.getScorePackageName());
+											map.put("value", wmScorePackage.getId());
+											String drugProducer = ArrayUtils.isEmpty(wmScorePackage.getDrugProducerList()) ? "" : String.join(StrUtil.COMMA, wmScorePackage
+													.getDrugProducerList());
+											map.put("drugProducer", drugProducer);
+											listMap.add(map);
+										}
 									}
 								}
 							}
@@ -461,10 +471,14 @@ public class ApiController {
 		if ("39".equals(taskTypeId) || "40".equals(taskTypeId) || "41".equals(taskTypeId)) {
 			taskTypeId = "39";
 		}
-		if ("42".equals(taskTypeId) || "43".equals(taskTypeId) || "44".equals(taskTypeId)) {
+		else if ("42".equals(taskTypeId) || "43".equals(taskTypeId) || "44".equals(taskTypeId)) {
 			// 手术跟台-一级/手术跟台-二级/手术跟台-三级 都取42
 			taskTypeId = "42";
 		}
+		else if ("47".equals(taskTypeId) || "48".equals(taskTypeId) || "49".equals(taskTypeId) || "50".equals(taskTypeId)) {
+			// 库存调研、竞品调研、培训、使用情况调查
+			taskTypeId = "47";
+		}
 
 		queryConn.setTaskTypeId(taskTypeId);
 		queryConn.setDelFlag("0");
@@ -554,7 +568,8 @@ public class ApiController {
 								if ("1".equals(wmScorePackage.getEnableFlag())) {
 									continue;
 								}
-								if ("2".equals(wmScorePackage.getPackageType2())) {
+								if (PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(wmScorePackage.getPackageType2())
+										&& !PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
 									continue;
 								}
 
@@ -683,6 +698,7 @@ public class ApiController {
 			mapOne.put("taxHelperAgreementSignature", sysU.getTaxHelperAgreementSignature());
 			mapOne.put("bankCardNumber", sysU.getBankCardNumber());
 			mapOne.put("bankPhone", sysU.getBankPhone());
+			mapOne.put("bankName", sysU.getBankName());
 
 			// 获取会员已结算信息和和待结算信息
 			List<WmScorePackageStatus> packageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
@@ -1663,9 +1679,9 @@ public class ApiController {
 	}
 
 	/**
-	 * 获取药企列表
+	 * 小程序领取任务包(积分包)列表
 	 *
-	 * @return 角色列表
+	 * @return 积分包列表
 	 */
 	@ApiOperation(value = "积分包-获取用户积分包", notes = "积分包-获取用户积分包,selType  众包用户传值,1 可领取  2 已领取")
 	@GetMapping("/getUserScorePackageList2")
@@ -1863,7 +1879,8 @@ public class ApiController {
 						continue;
 					}
 
-					if ("1".equals(item.getPackageType1())) {
+					if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), item.getPackageType1())
+							|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), item.getPackageType1())) {
 						Integer finishScore = 0;
 						Integer waitApprovalScore = 0;
 						for (WmTask task : wmTaskList) {
@@ -2417,9 +2434,9 @@ public class ApiController {
 
 
 	/**
-	 * 通过id查询积分包
+	 * 小程序领取积分包
 	 *
-	 * @param packageId
+	 * @param packageId 积分包id
 	 * @return R
 	 */
 	@ApiOperation(value = "积分包-领取", notes = "积分包-领取")
@@ -2467,7 +2484,8 @@ public class ApiController {
 
 		wmScorePackageStatus.setStatus("1");
 		wmScorePackageStatus.setTaskAddFlag("1");
-		if ("1".equals(wmScorePackage.getPackageType1())) {
+		if (PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(wmScorePackage.getPackageType1())
+				|| PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
 			wmScorePackageStatus.setUserScore(wmScorePackage.getScore() + "");
 		} else {
 			wmScorePackageStatus.setUserScore(wmScorePackage.getUserScore());
@@ -3642,7 +3660,8 @@ public class ApiController {
 					}
 				}
 
-				if ("1".equals(tWmScorePackage.getPackageType1())) {
+				if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), tWmScorePackage.getPackageType1())
+						|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), tWmScorePackage.getPackageType1())) {
 
 					String limitValue = "30000";
 					// 查询当前企业配置的积分限制
@@ -3905,8 +3924,9 @@ public class ApiController {
 								// 查询出 审核通过和审核中的任务
 								.ne(WmTask::getTaskStatus, "4")
 								.eq(WmTask::getRealFlag, "0"));
-						// 判断定量还是定额 1- 定额   2-定量
-						if ("1".equals(wmScorePackage1.getPackageType1())) {
+						// 判断定量还是定额 1- 定额   2-定量 6-定额+定量
+						if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())
+								|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
 
 							int totalCount = 0;
 							for (WmTask wmtask : wmTaskList) {

+ 50 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/GigThirdApiController.java

@@ -15,12 +15,14 @@ import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.XinbadaInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.ZhongyiyunInputRecord;
+import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.service.HuiqiyunInputRecordService;
 import com.qunzhixinxi.hnqz.admin.service.LingcaiaiInputRecordService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
 import com.qunzhixinxi.hnqz.admin.service.XinbadaInputRecordService;
 import com.qunzhixinxi.hnqz.admin.service.ZhongyiyunInputRecordService;
+import com.qunzhixinxi.hnqz.admin.service.ZhongzhiInputRecordService;
 import com.qunzhixinxi.hnqz.admin.service.gig.GigThirdApiService;
 import com.qunzhixinxi.hnqz.admin.service.gig.OladingInputRecordService;
 import com.qunzhixinxi.hnqz.admin.util.ZhongyiyunUtils;
@@ -69,10 +71,58 @@ public class GigThirdApiController {
 
 	private final ZhongyiyunInputRecordService zhongyiyunInputRecordService;
 
+	private final ZhongzhiInputRecordService zhongzhiInputRecordService;
+
 	private final SysDeptSubService sysDeptSubService;
 
 	private final RedisTemplate redisTemplate;
 
+	/**
+	 * 中智回调异步通知记录
+	 *
+	 * @param body
+	 * @param headers
+	 * @return
+	 */
+	@Inner(value = false)
+	@SysLog("中智结算异步通知回调")
+	@PostMapping("/zhongzhi/pay-notify")
+	public Map<String, Object> zhongZhiSettleNotify(@RequestBody String body, @RequestHeader HttpHeaders headers) {
+		log.info("中智结算请求方法参数:body={}, headers={}", body, headers);
+
+		// 请求body json
+		JSONObject bodyJson = JSONUtil.parseObj(body);
+
+		// 三方订单号
+		String thirdOrderNo = bodyJson.getStr("thirdOrderNo");
+
+		Map<String, Object> result = new HashMap<>();
+
+		String redisKey = String.format("%s_%s", CacheConstants.ZHONG_ZHI_SETTLE_NOTIFY_KEY, thirdOrderNo);
+		Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, thirdOrderNo, 30, TimeUnit.MINUTES);
+		if (Boolean.FALSE.equals(absent)) {
+			log.warn("存在在途操作orderNo={}", thirdOrderNo);
+			result.put("code", "00000400");
+			result.put("msg", "存在在途操作");
+			return result;
+		}
+
+		// 请求记录到数据库
+		ZhongzhiInputRecord inputRecord = new ZhongzhiInputRecord();
+		inputRecord.setThirdOrderNo(thirdOrderNo);
+		inputRecord.setReqType(ZhongzhiInputRecord.ReqType.SETTLE_NOTIFY.getType());
+		inputRecord.setReqBody(body);
+		zhongzhiInputRecordService.save(inputRecord);
+
+		// 业务处理
+		gigThirdApiService.zhongzhiSettleNotify(bodyJson);
+
+		result.put("code", "00000200");
+		result.put("msg", "成功");
+
+		return result;
+	}
+
 	/**
 	 * 众蚁云结算异步通知回调
 	 *

+ 9 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java

@@ -85,12 +85,13 @@ public class SysUserSignCertController {
 		if (StrUtil.length(userSignCertDTO.getBankCardNumber()) < 16 || StrUtil.length(userSignCertDTO.getBankCardNumber()) > 19) {
 			return R.failed("银行卡号不正确");
 		}
-		SysUser sysUser = new SysUser();
-		sysUser.setUserId(userSignCertDTO.getUserId());
-		sysUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
-		sysUser.setBankPhone(userSignCertDTO.getBankPhone());
+		if (StrUtil.isBlank(userSignCertDTO.getBankName())) {
+			return R.failed("开户行不能为空");
+		}
+
+		sysUserSignCertService.saveBankInfo(userSignCertDTO);
 
-		return R.ok(sysUserService.updateById(sysUser));
+		return R.ok();
 	}
 
 	/**
@@ -117,6 +118,9 @@ public class SysUserSignCertController {
 		if (StrUtil.isNotBlank(userSignCertDTO.getIdCardNumber()) && !Validator.isCitizenId(userSignCertDTO.getIdCardNumber())) {
 			return R.failed("身份证号不正确");
 		}
+		if (StrUtil.isBlank(userSignCertDTO.getBankName())) {
+			return R.failed("开户行不能为空");
+		}
 
 		// 校验是否配置了结算限制
 		Integer deptId = SecurityUtils.getUser().getDeptId();

+ 19 - 51
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -38,6 +38,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
@@ -202,6 +203,18 @@ public class WmPayOffController {
 		return wmPayOffService.settleById(input.getId());
 	}
 
+	/**
+	 * 多人承接-按积分值业务结算-查询
+	 *
+	 * @param taskIds 任务id
+	 * @return 待提交的信息
+	 */
+	@SysLog("多人承接-按积分值业务结算-查询")
+	@GetMapping("/settle-info-by-taskIds")
+	public R<?> settleInfoByTaskIds(@RequestParam("taskIds") String[] taskIds) {
+
+		return wmPayOffService.settleInfoByTaskIds(taskIds);
+	}
 
 	/**
 	 * 财务审核页面
@@ -243,24 +256,11 @@ public class WmPayOffController {
 			return Collections.emptyList();
 		}
 
-		// 获取发票类目信息
+		// 获取所有税源地的发票类目信息
 		List<SysDictItem> invoiceCategoryList =
 				dictItemService.list(Wrappers.<SysDictItem>lambdaQuery()
-						.in(SysDictItem::getType, "renlijia_invoice", "olading_invoice", "yee_invoice",
-								"tax_helper_invoice", "olading_henan_invoice", "olading_jinyuan_invoice", "zheng_qi_zhi_xing_invoice",
-								"langchao_invoice", "zheng_qi_zhi_xing_jiang_xi_invoice", "hui_qi_yun_invoice"));
+						.in(SysDictItem::getType, SubjectLocation.getAllInvoices()));
 		Map<String, Map<String, String>> collect = invoiceCategoryList.stream().collect(Collectors.groupingBy(SysDictItem::getType, Collectors.toMap(SysDictItem::getValue, SysDictItem::getLabel)));
-		Map<String, String> renlijiaInvoice = collect.get("renlijia_invoice");
-		Map<String, String> oladingInvoice = collect.get("olading_invoice");
-		Map<String, String> oladingJinyuanInvoice = collect.get("olading_jinyuan_invoice");
-		Map<String, String> oladingHenanInvoice = collect.get("olading_henan_invoice");
-		Map<String, String> yeeInvoice = collect.get("yee_invoice");
-		Map<String, String> taxHelperInvoice = collect.get("tax_helper_invoice");
-		Map<String, String> zhengQiZhiXingInvoice = collect.get("zheng_qi_zhi_xing_invoice");
-		Map<String, String> langchaoInvoice = collect.get("langchao_invoice");
-		Map<String, String> zhengQiZhiXingJiangXiInvoice = collect.get("zheng_qi_zhi_xing_jiang_xi_invoice");
-		Map<String, String> huiQiYunInvoice = collect.get("hui_qi_yun_invoice");
-
 
 		// 转换为导出实体
 		for (int i = 0; i < list.size(); i++) {
@@ -277,43 +277,11 @@ public class WmPayOffController {
 			SubjectLocation subjectLocation = settleOutput.getSubjectLocation();
 			if (subjectLocation != null) {
 				export.setSubType(subjectLocation.getDescription());
+				// 获取当前税源地的发票类目
+				Map<String, String> subInvoice = collect.get(subjectLocation.getInvoiceType());
+				// 根据发票类目value获取发票类目名称
 				String cate = String.valueOf(settleOutput.getInvoiceCategory());
-				String invoice;
-				switch (subjectLocation) {
-					case REN_LI_JIA:
-						invoice = renlijiaInvoice.get(cate);
-						break;
-					case LUO_SHU_YUN:
-						invoice = taxHelperInvoice.get(cate);
-						break;
-					case FEI_YI:
-						invoice = oladingInvoice.get(cate);
-						break;
-					case JIN_YUAN:
-						invoice = oladingJinyuanInvoice.get(cate);
-						break;
-					case XIN_TAI_ZI:
-						invoice = oladingHenanInvoice.get(cate);
-						break;
-					case YI_LIAN:
-						invoice = yeeInvoice.get(cate);
-						break;
-					case ZHENG_QI_ZHI_XING:
-						invoice = zhengQiZhiXingInvoice.get(cate);
-						break;
-					case LANG_CHAO:
-						invoice = langchaoInvoice.get(cate);
-						break;
-					case HUI_QI_YUN:
-						invoice = huiQiYunInvoice.get(cate);
-						break;
-					case JIANG_XI:
-						invoice = zhengQiZhiXingJiangXiInvoice.get(cate);
-						break;
-					default:
-						invoice = WmScorePackageSettleExcelModel.CategoryEnum.CATEGORY_NULL.getDesc();
-						break;
-				}
+				String invoice = subInvoice.getOrDefault(cate, "") ;
 				export.setInvoiceCategory(invoice);
 			}
 			export.setUserNames(settleOutput.getUserNames());

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

@@ -70,7 +70,6 @@ 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;
@@ -109,6 +108,7 @@ public class WmScorePackageController {
 	private final WmDaDrugEntMapper wmDaDrugEntMapper;
 	private final WmDaAgentMapper wmDaAgentMapper;
 	private final WmTeamService wmTeamService;
+	private final WmScorePackageSettleNoteMapper settleNoteMapper;
 	private final StringRedisTemplate redisTemplate;
 
 
@@ -1493,7 +1493,7 @@ public class WmScorePackageController {
 
 			pageAnswer.setRecords(finalRecords);
 		} catch (ExecutionException | InterruptedException e) {
-			log.error("获取分页信息失败");
+			log.error("获取分页信息失败", e);
 			return R.failed("获取分页信息失败");
 		}
 
@@ -2451,6 +2451,21 @@ public class WmScorePackageController {
 						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType43);
 						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType44);
 					}
+					// 如果存在taskTypeId=47 47,库存调研 48,竞品调研  49,培训 50,使用情况调查
+					if (wmScorePackage.getWmScoreTaskTypeList().stream().anyMatch(wmTaskTypeTree -> "47".equals(wmTaskTypeTree.getTaskTypeId()))) {
+						WmScoreTaskType addTaskTypeTree48 = new WmScoreTaskType();
+						addTaskTypeTree48.setTaskTypeId("48");
+						addTaskTypeTree48.setType("1");
+						WmScoreTaskType addTaskTypeTree49 = new WmScoreTaskType();
+						addTaskTypeTree49.setTaskTypeId("49");
+						addTaskTypeTree49.setType("1");
+						WmScoreTaskType addTaskTypeTree50 = new WmScoreTaskType();
+						addTaskTypeTree50.setTaskTypeId("50");
+						addTaskTypeTree50.setType("1");
+						wmScorePackage.getWmScoreTaskTypeList().add(addTaskTypeTree48);
+						wmScorePackage.getWmScoreTaskTypeList().add(addTaskTypeTree49);
+						wmScorePackage.getWmScoreTaskTypeList().add(addTaskTypeTree50);
+					}
 
 					List<WmScoreTaskType> wmScoreTaskTypess = new ArrayList<>();
 					for (WmScoreTaskType wmScoreTaskTypes : wmScorePackage.getWmScoreTaskTypeList()) {
@@ -2574,9 +2589,13 @@ public class WmScorePackageController {
 			List<String> split = StrUtil.split(typeId, StrUtil.COMMA);
 			queryWrapper.in(WmScorePackage::getTypeid, split);
 		}
-		if (PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
-				&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2))) {
-			// 如果是个人承接-按积分值,判断当前用户是否配置了团队负责人
+
+		boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
+				&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
+		boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
+				&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
+		if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
+			// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
 			List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
 					.eq(WmTeam::getDeptId, sendDeptId)
 					.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
@@ -2600,25 +2619,163 @@ public class WmScorePackageController {
 
 		List<WmScorePackage> pageRecords = wmScorePackagePage.getRecords();
 
-		List<Future<WmScorePackage>> futureList = new ArrayList<>(pageRecords.size());
+		if (CollUtil.isNotEmpty(pageRecords)) {
+			List<Future<WmScorePackage>> futureList = new ArrayList<>(pageRecords.size());
+
+			for (WmScorePackage scorePackage : pageRecords) {
+				Future<WmScorePackage> wmScorePackageFuture = wmScorePackageService.buildScorePackage(scorePackage, packageType1, packageType2);
+				futureList.add(wmScorePackageFuture);
+			}
+
+			List<WmScorePackage> finalRecords = new ArrayList<>(pageRecords.size());
+			try {
+				for (Future<WmScorePackage> future : futureList) {
+					WmScorePackage wmScorePackage = future.get();
+					finalRecords.add(wmScorePackage);
+
+				}
 
-		for (WmScorePackage scorePackage : pageRecords) {
-			Future<WmScorePackage> wmScorePackageFuture = wmScorePackageService.buildScorePackage(scorePackage, packageType1, packageType2);
-			futureList.add(wmScorePackageFuture);
+				wmScorePackagePage.setRecords(finalRecords);
+			} catch (ExecutionException | InterruptedException e) {
+				log.error("获取分页信息失败", e);
+				return R.failed("获取分页信息失败");
+			}
 		}
 
-		List<WmScorePackage> finalRecords = new ArrayList<>(pageRecords.size());
-		try {
-			for (Future<WmScorePackage> future : futureList) {
-				WmScorePackage wmScorePackage = future.get();
-				finalRecords.add(wmScorePackage);
+		return R.ok(wmScorePackagePage);
+	}
 
+	/**
+	 * 积分包列表(结算包管理列表、无团队限制)
+	 *
+	 * @param packageType1 多个逗号分隔
+	 * @param acceptUser 接单对象,模糊查询
+	 */
+	@ApiOperation(value = "分页查询", notes = "分页查询")
+	@GetMapping("/page-settle-package")
+	public R pageSettlePackage(@RequestParam(value = "current") Integer current,
+								 @RequestParam(value = "size") Integer size,
+								 @RequestParam(value = "packageType1") String packageType1,
+								 @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 = "monthStart", required = false) String monthStart,
+								 @RequestParam(value = "monthEnd", required = false) String monthEnd,
+								 @RequestParam(value = "acceptUser", required = false) String acceptUser
+	) {
+
+		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::getPackageType2, packageType2)
+				.like(StrUtil.isNotEmpty(scorePackageName), WmScorePackage::getScorePackageName, scorePackageName)
+				.eq(scorePackageStatus != null, WmScorePackage::getScorePackageStatus, scorePackageStatus)
+				.eq(WmScorePackage::getSendPackageDeptId, sendDeptId)
+				.between(start != null && end != null, WmScorePackage::getCreateTime, start, end);
+
+		List<String> packageType1List = StrUtil.split(packageType1, StrUtil.COMMA);
+		if (StrUtil.contains(packageType1, StrUtil.COMMA)) {
+			queryWrapper.in(WmScorePackage::getPackageType1, packageType1List);
+		} else {
+			queryWrapper.eq(WmScorePackage::getPackageType1, packageType1);
+		}
+
+
+		if (StringUtil.isEmpty(typeId)) {
+			queryWrapper.in(WmScorePackage::getTypeid, "3", "4");
+		} else {
+			List<String> split = StrUtil.split(typeId, StrUtil.COMMA);
+			queryWrapper.in(WmScorePackage::getTypeid, split);
+		}
+
+//		boolean onePersonScorePackageFlag = packageType1List.contains(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val())
+//				&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
+//		boolean multiPersonScorePackageFlag = packageType1List.contains(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val())
+//				&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
+//		if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
+//			// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
+//			List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
+//					.eq(WmTeam::getDeptId, sendDeptId)
+//					.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
+//					.eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
+//					.apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
+//			if (CollectionUtil.isNotEmpty(teamList)) {
+//				// 如果配置了,则只查询所在团队下发的积分包
+//				List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
+//				queryWrapper.in(WmScorePackage::getPackageUserScope, teamIdList);
+//			}
+//		}
+
+		Page<WmScorePackage> wmScorePackagePage = null;
+		if (StrUtil.isNotBlank(acceptUser)) {
+			// 带有接单对象acceptUser模糊查询的查询
+			wmScorePackagePage = wmScorePackageMapper.listScorePackage(new Page<>(current, size), queryWrapper.orderByDesc(WmScorePackage::getCreateTime), acceptUser);
+		} else {
+			wmScorePackagePage = wmScorePackageMapper.selectPage(new Page<>(current, size), queryWrapper
+					.orderByDesc(WmScorePackage::getCreateTime));
+		}
+
+		List<WmScorePackage> pageRecords = wmScorePackagePage.getRecords();
+
+		if (CollUtil.isNotEmpty(pageRecords)) {
+//			List<Future<WmScorePackage>> futureList = new ArrayList<>(pageRecords.size());
+
+			for (WmScorePackage scorePackage : pageRecords) {
+				if (packageType2 == 2) {
+
+					int wsNum = settleNoteMapper.selectCount(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+							.eq(WmScorePackageSettleNote::getPackageId, scorePackage.getId())
+							.in(WmScorePackageSettleNote::getSettleNoteStatus, 2, 9));
+					int asNum = settleNoteMapper.selectCount(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+							.eq(WmScorePackageSettleNote::getPackageId, scorePackage.getId())
+							.eq(WmScorePackageSettleNote::getSettleNoteStatus, 1));
+					scorePackage.setWsTaskNum(wsNum);
+					scorePackage.setAsTaskNum(asNum);
+
+				}
+
+				if (PackageTypeEnum.TYPE1_HCP_PACKAGE.getName().equals(scorePackage.getPackageType1())) {
+					// 如果是患者教育,则转换积分值 '分'-> '元'
+					Integer score = scorePackage.getScore();
+					String userScore = scorePackage.getUserScore();
+					if (org.apache.commons.lang3.StringUtils.isNumeric(userScore)) {
+						scorePackage.setUserScore(String.format("%.2f", Integer.parseInt(userScore) / 100.0));
+					}
+				}
+
+				List<WmScoreTaskType> taskTypeList = wmScoreTaskTypeMapper.getScoreTaskTypeByScoreId(scorePackage.getId());
+				if (CollUtil.isNotEmpty(taskTypeList)) {
+					String taskTypes = taskTypeList.stream().map(
+							WmScoreTaskType::getTaskTypeName).collect(Collectors.joining(","));
+					scorePackage.setTaskTypes(taskTypes);
+				}
 			}
 
-			wmScorePackagePage.setRecords(finalRecords);
-		} catch (ExecutionException | InterruptedException e) {
-			log.error("获取分页信息失败");
-			return R.failed("获取分页信息失败");
+//			List<WmScorePackage> finalRecords = new ArrayList<>(pageRecords.size());
+//			try {
+//				for (Future<WmScorePackage> future : futureList) {
+//					WmScorePackage wmScorePackage = future.get();
+//					finalRecords.add(wmScorePackage);
+//
+//				}
+//
+//				wmScorePackagePage.setRecords(finalRecords);
+//			} catch (ExecutionException | InterruptedException e) {
+//				log.error("获取分页信息失败", e);
+//				return R.failed("获取分页信息失败");
+//			}
 		}
 
 		return R.ok(wmScorePackagePage);

+ 50 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageSettleNoteController.java

@@ -1,6 +1,8 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,6 +11,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmSettlePackageSettleExcelModel;
 import com.qunzhixinxi.hnqz.admin.entity.output.WmTaskSettleNoteOutput;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
@@ -75,7 +78,7 @@ public class WmScorePackageSettleNoteController {
 	 */
 	@ApiOperation(value = "分页查询任务+结算信息", notes = "分页查询任务+结算信息")
 	@GetMapping("/settle/page")
-	public R getWmTaskForSettlePage(Page page, WmScorePackageSettleNote note) {
+	public R getWmTaskForSettlePage(Page page, WmScorePackageSettleNote note, String[] settleStatusArr) {
 		if (StringUtils.isEmpty(note.getPackageId())) {
 			return R.failed("参数异常");
 		}
@@ -87,7 +90,25 @@ public class WmScorePackageSettleNoteController {
 			note.setStartSubTime(startSubTime);
 			note.setEndSubTime(endSubTime);
 		}
-		return R.ok(wmScorePackageSettleNoteService.getWmTaskForSettlePage(page, note));
+
+		WmScorePackage scorePackage = wmScorePackageService.getById(note.getPackageId());
+		if (PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(scorePackage.getPackageType1())) {
+			IPage<WmTaskSettleNoteOutput> settlePage2 = wmScorePackageSettleNoteService.getWmTaskForSettlePage2(page, note, settleStatusArr);
+			settlePage2.getRecords().forEach(output -> {
+				if (output.getSubjectLocation() != null) {
+					output.setSubjectLocationName(output.getSubjectLocation().getDescription());
+				}
+			});
+			return R.ok(settlePage2);
+		}
+
+		IPage<WmTaskSettleNoteOutput> settlePage = wmScorePackageSettleNoteService.getWmTaskForSettlePage(page, note, settleStatusArr);
+		settlePage.getRecords().forEach(output -> {
+			if (output.getSubjectLocation() != null) {
+				output.setSubjectLocationName(output.getSubjectLocation().getDescription());
+			}
+		});
+		return R.ok(settlePage);
 	}
 
 	/**
@@ -159,6 +180,7 @@ public class WmScorePackageSettleNoteController {
 	 * @param note
 	 * @return R
 	 */
+	@SysLog("settleNote保存结算")
 	@ApiOperation(value = "保存", notes = "保存")
 	@PostMapping("/saveSettleInfo")
 	public R saveSettleInfo(@RequestBody WmScorePackageSettleNote note) {
@@ -168,12 +190,25 @@ public class WmScorePackageSettleNoteController {
 		return wmScorePackageSettleNoteService.saveSettleInfo(note);
 	}
 
+	/**
+	 * 批量保存业务结算
+	 *
+	 * @param notes note列表
+	 * @return 结果
+	 */
+	@SysLog("批量保存业务结算")
+	@PostMapping("/batch-save-settle")
+	public R<?> batchSaveSettleInfo(@RequestBody List<WmScorePackageSettleNote> notes) {
+		return wmScorePackageSettleNoteService.batchSaveSettleInfo(notes);
+	}
+
 	/**
 	 * 提交结算申请
 	 *
 	 * @param note
 	 * @return R
 	 */
+	@SysLog("提交结算申请")
 	@ApiOperation(value = "提交结算申请", notes = "提交结算申请")
 	@PostMapping("/subSettleInfo")
 	public R subSettleInfo(@RequestBody WmScorePackageSettleNote note) {
@@ -181,6 +216,19 @@ public class WmScorePackageSettleNoteController {
 		return wmScorePackageSettleNoteService.subSettleInfo(note);
 	}
 
+	/**
+	 * 批量提交业务结算申请
+	 *
+	 * @param notes note列表
+	 * @return R
+	 */
+	@SysLog("批量提交业务结算申请")
+	@PostMapping("/batch-sub-settle")
+	public R<?> batchSubSettleInfo(@RequestBody List<WmScorePackageSettleNote> notes) {
+
+		return wmScorePackageSettleNoteService.batchSubSettleInfo(notes);
+	}
+
 	/**
 	 * 撤销结算申请
 	 *

+ 0 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageStatusController.java

@@ -32,7 +32,6 @@ import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
-import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTeamService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
@@ -64,7 +63,6 @@ import java.util.stream.Collectors;
 public class WmScorePackageStatusController {
 
     private final  WmScorePackageStatusService wmScorePackageStatusService;
-	private final WmTaskService wmTaskService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmTeamService wmTeamService;
 

+ 58 - 7
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -45,6 +45,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskRule;
@@ -53,8 +54,10 @@ import com.qunzhixinxi.hnqz.admin.entity.XlsPackageInfo;
 import com.qunzhixinxi.hnqz.admin.entity.XlsTask;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CommonEvidenceDTO;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.CommonTaskExcelModel;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
+import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
-import com.qunzhixinxi.hnqz.admin.service.ReportExportService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
@@ -62,8 +65,8 @@ import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
-import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageSettleNoteService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
@@ -123,8 +126,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -147,6 +150,8 @@ public class WmTaskController {
 
 	private final WmScorePackageService wmScorePackageService;
 
+	private final WmScorePackageSettleNoteService wmScorePackageSettleNoteService;
+
 	private final SysDeptService sysDeptService;
 
 	private final SysUserService sysUserService;
@@ -165,10 +170,6 @@ public class WmTaskController {
 
 	private final WmTaskContentService wmTaskContentService;
 
-	private final ReportExportService reportExportService;
-
-	private final WmDaPharmacyService wmDaPharmacyService;
-
 	private final SysFileService sysFileService;
 
 	private final RabbitMqClient rabbitMqClient;
@@ -1150,6 +1151,56 @@ public class WmTaskController {
 		return wmTaskService.getWmTaskList(page, wmTask);
 	}
 
+	/**
+	 * 根据积分包id查询任务
+	 *
+	 * @param page       分页参数
+	 * @param packageId  积分包id
+	 * @param taskStatus 任务审核状态
+	 * @param realName   姓名
+	 * @return 分页结果
+	 */
+	@GetMapping("/list-score-package-task")
+	public R<?> listScorePackageTask(Page<WmTask> page, @RequestParam("packageId") String packageId,
+									 TaskStatusEnum taskStatus, @RequestParam(value = "taskUserId", required = false) String realName) {
+		QueryWrapper<WmTask> queryWrapper = Wrappers.query();
+		if (StrUtil.isNotBlank(realName)) {
+			queryWrapper.like("u.realname", realName);
+		}
+		if (taskStatus != null) {
+			queryWrapper.eq("t.task_status", taskStatus.val());
+		}
+		queryWrapper.eq("t.score_package_id", packageId);
+		queryWrapper.eq("t.del_flag", DelEnum.NOT_DEL.val());
+		queryWrapper.eq("t.real_flag", "0");
+		queryWrapper.orderByDesc("t.lookinto_date");
+		IPage<WmTask> taskIPage = wmTaskMapper.listWmTaskByWrapper(new Page<>(page.getCurrent(), page.getSize()), queryWrapper);
+
+		// 结算列表加个结算状态
+		if (TaskStatusEnum.APPROVED.equals(taskStatus)) {
+			if (CollUtil.isNotEmpty(taskIPage.getRecords())) {
+				List<WmScorePackageSettleNote> settleNoteList = wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+						.eq(WmScorePackageSettleNote::getPackageId, packageId));
+				Map<String, WmScorePackageSettleNote> settleNoteMap = settleNoteList.stream()
+						.filter(note -> StrUtil.isNotBlank(note.getTaskId()))
+						.collect(Collectors.toMap(WmScorePackageSettleNote::getTaskId, Function.identity()));
+				taskIPage.getRecords().forEach(wmTask -> {
+					WmScorePackageSettleNote settleNote = settleNoteMap.get(wmTask.getId());
+					if (settleNote != null) {
+						wmTask.setSettleStatus(settleNote.getSettleNoteStatus());
+						wmTask.setSubToGigTime(settleNote.getSubToGigTime());
+						wmTask.setNotifyDate(settleNote.getNotifyTime());
+						wmTask.setSubTime(settleNote.getSubTime());
+					} else {
+						wmTask.setSettleStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
+					}
+				});
+			}
+		}
+
+		return R.ok(taskIPage);
+	}
+
 	/**
 	 * 任务审核
 	 *

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java

@@ -91,6 +91,11 @@ public class SysUserSub extends Model<SysUserSub> {
 	 */
 	private String bankCardNumber;
 
+	/**
+	 * 开户行
+	 */
+	private String bankName;
+
 	/**
 	 * 身份证照片-正面
 	 */

+ 24 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmTask.java

@@ -261,4 +261,28 @@ public class WmTask extends Model<WmTask> {
 	 */
 	@TableField(exist = false)
 	private String username;
+
+	/**
+	 * 结算状态
+	 */
+	@TableField(exist = false)
+	private Integer settleStatus;
+
+	/**
+	 * 提交时间
+	 */
+	@TableField(exist = false)
+	private LocalDateTime subTime;
+
+	/**
+	 * 提交到零工时间
+	 */
+	@TableField(exist = false)
+	private LocalDateTime subToGigTime;
+
+	/**
+	 * 结算时间
+	 */
+	@TableField(exist = false)
+	private LocalDateTime notifyDate;
 }

+ 70 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/ZhongzhiInputRecord.java

@@ -0,0 +1,70 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 中智回调异步通知记录
+ * @TableName zhongzhi_input_record
+ */
+@TableName(value ="zhongzhi_input_record")
+@Data
+public class ZhongzhiInputRecord implements Serializable {
+
+	private static final long serialVersionUID = 2315253613947884869L;
+
+	/**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 请求业务类型
+     */
+    private String reqType;
+
+    /**
+     * 三方订单号
+     */
+	@TableField(value = "order_no")
+    private String thirdOrderNo;
+
+    /**
+     * 请求body
+     */
+    private String reqBody;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+	@Getter
+	@AllArgsConstructor
+	public enum ReqType {
+//		SIGN_NOTIFY("SIGN_NOTIFY", "签约回调"),
+		SETTLE_NOTIFY("SETTLE_NOTIFY", "结算回调");
+
+		/**
+		 * 请求类型
+		 */
+		@EnumValue
+		private final String type;
+
+		/**
+		 * 描述
+		 */
+		private final String desc;
+	}
+
+}

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java

@@ -38,6 +38,11 @@ public class UserSignCertDTO implements Serializable {
 	 */
 	private String bankPhone;
 
+	/**
+	 * 开户行
+	 */
+	private String bankName;
+
 	/**
 	 * 身份证照片-正面
 	 */

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java

@@ -78,6 +78,11 @@ public class GigUserInfoModel implements Serializable {
 	 */
 	private String newBankCard;
 
+	/**
+	 * 开户行
+	 */
+	private String bankName;
+
 	/**
 	 * 身份证照片-正面
 	 */

+ 36 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/output/WmTaskSettleNoteOutput.java

@@ -17,6 +17,7 @@
 
 package com.qunzhixinxi.hnqz.admin.entity.output;
 
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -49,6 +50,11 @@ public class WmTaskSettleNoteOutput {
 	 */
 	private String scorePackageId;
 
+	/**
+	 * 积分包名称
+	 */
+	private String scorePackageName;
+
 	/**
 	 * 创建时间
 	 */
@@ -109,6 +115,16 @@ public class WmTaskSettleNoteOutput {
 	 */
 	private String subType;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
+	/**
+	 * 税源地名称
+	 */
+	private String subjectLocationName;
+
 	/**
 	 * 发票类目名称
 	 */
@@ -119,6 +135,11 @@ public class WmTaskSettleNoteOutput {
 	 */
 	private LocalDateTime subTime;
 
+	/**
+	 * 提交到零工平台的时间
+	 */
+	private LocalDateTime subToGigTime;
+
 	/**
 	 * 回调时间
 	 */
@@ -133,4 +154,19 @@ public class WmTaskSettleNoteOutput {
 	 * 用户手机号
 	 */
 	private String username;
+
+	/**
+	 * 任务的完成时间
+	 */
+	private LocalDateTime lookintoDate;
+
+	/**
+	 * 实际结算金额
+	 */
+	private BigDecimal actualAmount;
+
+	/**
+	 * 任务积分
+	 */
+	private Integer score;
 }

+ 15 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java

@@ -23,7 +23,9 @@ public enum GigTypeEnum {
 	ZHENG_QI_ZHI_XING(4, "正启之星", "正启之星", ZhengQiZhiXingCertStatus.class),
 	LANG_CHAO(5, "浪潮", "浪潮", LangChaoCertStatus.class),
 	HUI_QI_YUN(6, "汇企云", "汇企云", HuiQiYunCertStatus.class),
-	ZHONG_YI_YUN(7, "众蚁云", "众蚁云", ZhongYiYunCertStatus.class);
+	ZHONG_YI_YUN(7, "众蚁云", "众蚁云", ZhongYiYunCertStatus.class),
+	ZHONG_ZHI(8, "中智", "中智", ZhongZhiCertStatus.class);
+//	HAN_TANG(9, "汉唐", "汉唐", HanTangCertStatus.class);
 
 	@EnumValue
 	private int code;
@@ -77,6 +79,12 @@ public enum GigTypeEnum {
 			case ZHONG_YI_YUN:
 				certStatusStr = ZhongYiYunCertStatus.resolve(certStatus).name();
 				break;
+//			case HAN_TANG:
+//				certStatusStr = HanTangCertStatus.resolve(certStatus).name();
+//				break;
+			case ZHONG_ZHI:
+				certStatusStr = ZhongZhiCertStatus.resolve(certStatus).name();
+				break;
 			default:
 		}
 
@@ -117,6 +125,12 @@ public enum GigTypeEnum {
 			case ZHONG_YI_YUN:
 				certStatusStr = ZhongYiYunCertStatus.resolve(certStatus).getMessage();
 				break;
+//			case HAN_TANG:
+//				 certStatusStr = HanTangCertStatus.resolve(certStatus).getMessage();
+//				break;
+			case ZHONG_ZHI:
+				certStatusStr = ZhongZhiCertStatus.resolve(certStatus).getMessage();
+				break;
 			default:
 		}
 

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/PackageTypeEnum.java

@@ -27,6 +27,11 @@ public enum PackageTypeEnum {
 	 * type1问诊包(患者教育)
 	 */
 	TYPE1_HCP_PACKAGE("5", "患者教育", "问诊包"),
+	/**
+	 * type1积分包+任务包
+	 */
+	TYPE1_SCORE_AND_TASK_PACKAGE("6", "定额定量", "积分任务包"),
+
 	/**
 	 * type2任务包(定额、定量、通用)
 	 */

+ 45 - 12
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java

@@ -5,7 +5,9 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 税源地
@@ -15,44 +17,66 @@ import java.util.List;
 public enum SubjectLocation {
 
 	// 仁励家通道
-	REN_LI_JIA("REN_LI_JIA", GigTypeEnum.REN_LI_JIA, "人力家", 0),
+	REN_LI_JIA("REN_LI_JIA", GigTypeEnum.REN_LI_JIA, "人力家", 0, "renlijia_invoice"),
 
 	// 税邦云通道
-	ZHONG_YING("ZHONG_YING", GigTypeEnum.TAX_HELPOR, "税邦云", 1),
-	LUO_SHU_YUN("LUO_SHU_YUN", GigTypeEnum.TAX_HELPOR, "税邦云", 2),
+	ZHONG_YING("ZHONG_YING", GigTypeEnum.TAX_HELPOR, "税邦云", 1, "tax_helper_invoice"),
+	LUO_SHU_YUN("LUO_SHU_YUN", GigTypeEnum.TAX_HELPOR, "税邦云", 2, "tax_helper_invoice"),
 
 	// 钉零工通道
-	FEI_YI("FEI_YI", GigTypeEnum.OLADING, "钉灵工-海南飞亿", 3),
-	JIN_YUAN("JIN_YUAN", GigTypeEnum.OLADING, "金园数科", 4),
-	XIN_TAI_ZI("XIN_TAI_ZI", GigTypeEnum.OLADING, "钉灵工-河南薪泰梓", 5),
+	FEI_YI("FEI_YI", GigTypeEnum.OLADING, "钉灵工-海南飞亿", 3, "olading_invoice"),
+	JIN_YUAN("JIN_YUAN", GigTypeEnum.OLADING, "金园数科", 4, "olading_jinyuan_invoice"),
+	XIN_TAI_ZI("XIN_TAI_ZI", GigTypeEnum.OLADING, "钉灵工-河南薪泰梓", 5, "olading_henan_invoice"),
 
 	// 易联
-	YI_LIAN("YI_LIAN", GigTypeEnum.YEE, "易联数科", 6),
+	YI_LIAN("YI_LIAN", GigTypeEnum.YEE, "易联数科", 6, "yee_invoice"),
 
 	// 正启之星
-	ZHENG_QI_ZHI_XING("ZHENG_QI_ZHI_XING",  GigTypeEnum.ZHENG_QI_ZHI_XING, "正启之星", 7),
+	ZHENG_QI_ZHI_XING("ZHENG_QI_ZHI_XING",  GigTypeEnum.ZHENG_QI_ZHI_XING, "正启之星", 7, "zheng_qi_zhi_xing_invoice"),
 
 	// 浪潮
-	LANG_CHAO("LANG_CHAO", GigTypeEnum.LANG_CHAO, "浪潮", 8),
+	LANG_CHAO("LANG_CHAO", GigTypeEnum.LANG_CHAO, "浪潮", 8, "langchao_invoice"),
 
 	// 正启之星-江西
-	JIANG_XI("JIANG_XI",  GigTypeEnum.ZHENG_QI_ZHI_XING, "正启之星-江西", 9),
+	JIANG_XI("JIANG_XI",  GigTypeEnum.ZHENG_QI_ZHI_XING, "正启之星-江西", 9, "zheng_qi_zhi_xing_jiang_xi_invoice"),
 
 	// 汇企云
-	HUI_QI_YUN("HUI_QI_YUN", GigTypeEnum.HUI_QI_YUN, "汇企云", 10),
+	HUI_QI_YUN("HUI_QI_YUN", GigTypeEnum.HUI_QI_YUN, "汇企云", 10, "hui_qi_yun_invoice"),
 
 	// 众蚁云
-	ZHONG_YI_YUN("ZHONG_YI_YUN", GigTypeEnum.ZHONG_YI_YUN, "众蚁云", 11);
+	ZHONG_YI_YUN("ZHONG_YI_YUN", GigTypeEnum.ZHONG_YI_YUN, "众蚁云", 11, "zhong_yi_yun_invoice"),
+	// 汉唐
+//	HAN_TANG("HAN_TANG", GigTypeEnum.HAN_TANG, "汉唐", 12),
+	// 中智
+	ZHONG_ZHI("ZHONG_ZHI", GigTypeEnum.ZHONG_ZHI, "中智", 12, "zhongzhi_invoice"),
+	ZHAO_YU("ZHAO_YU", GigTypeEnum.OLADING, "钉灵工-河南兆宇", 13, "olading_zhaoyu_invoice");
 
+	/**
+	 * 税源地类型
+	 */
 	@EnumValue
 	private final String type;
 
+	/**
+	 * 渠道类型
+	 */
 	private final GigTypeEnum gigType;
 
+	/**
+	 * 描述
+	 */
 	private final String description;
 
+	/**
+	 * 排序
+	 */
 	private final Integer sort;
 
+	/**
+	 * 发票类目
+	 */
+	private final String invoiceType;
+
 	/**
 	 * 根据gigType获取枚举
 	 *
@@ -83,4 +107,13 @@ public enum SubjectLocation {
 		}
 		return null;
 	}
+
+	/**
+	 * 获取所有渠道对应的发票类目type
+	 *
+	 * @return 发票类目type列表
+	 */
+	public static List<String> getAllInvoices() {
+		return Arrays.stream(SubjectLocation.values()).map(SubjectLocation::getInvoiceType).collect(Collectors.toList());
+	}
 }

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectTypeEnum.java

@@ -18,6 +18,7 @@ public enum SubjectTypeEnum {
 	TYPE_LANG_CHAO("5", "浪潮"),
 	TYPE_HUI_QI_YUN("6", "汇企云"),
 	TYPE_ZHONG_YI_YUN("7", "众蚁云"),
+	TYPE_ZHONG_ZHI("8", "中智"),
 
 	ENABLE_FLAG_FALSE("0", "无效"),
 	ENABLE_FLAG_TRUE("1", "有效"),

+ 39 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/ZhongZhiCertStatus.java

@@ -0,0 +1,39 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author: lixuesong
+ * @createTime: 2023/03/29 11:33
+ * @description: 中智认证状态
+ */
+@Getter
+@AllArgsConstructor
+public enum ZhongZhiCertStatus {
+
+	// 签约状态
+	UN_SIGN(0, "未签约"),
+	CERT(1, "已认证"),
+	SIGN(2, "已签约");
+
+	private final int code;
+
+	private final String message;
+
+	/**
+	 * 根据枚举编码获取枚举对象
+	 *
+	 * @param code 枚举编码
+	 * @return 如果存在返回枚举,否则返回 {@code null}
+	 */
+	public static ZhongZhiCertStatus resolve(final int code) {
+		for (ZhongZhiCertStatus certStatus : ZhongZhiCertStatus.values()) {
+			if (certStatus.getCode() == code) {
+				return certStatus;
+			}
+		}
+		return UN_SIGN;
+
+	}
+}

+ 11 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageSettleNoteMapper.java

@@ -48,7 +48,17 @@ public interface WmScorePackageSettleNoteMapper extends BaseMapper<WmScorePackag
 	 * @param note
 	 * @return
 	 */
-	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage(Page page, @Param("query") WmScorePackageSettleNote note);
+	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage(Page page, @Param("query") WmScorePackageSettleNote note, @Param("settleStatusArr") String[] settleStatusArr);
+
+	/**
+	 * 结算包结算列表(分页)
+	 *
+	 * @param page
+	 * @param note
+	 * @param settleStatusArr
+	 * @return
+	 */
+	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage2(Page page, @Param("query") WmScorePackageSettleNote note, @Param("settleStatusArr") String[] settleStatusArr);
 
 	/**
 	 * 结算包结算列表

+ 18 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/ZhongzhiInputRecordMapper.java

@@ -0,0 +1,18 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author snows
+* @description 针对表【zhongzhi_input_record(中智回调异步通知记录)】的数据库操作Mapper
+* @createDate 2023-04-10 15:09:13
+* @Entity com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord
+*/
+public interface ZhongzhiInputRecordMapper extends BaseMapper<ZhongzhiInputRecord> {
+
+}
+
+
+
+

+ 52 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -144,6 +144,9 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 							case ZHONG_YI_YUN:
 								this.zhongYiYunHandler(user, dept, subjectResult);
 								break;
+							case ZHONG_ZHI:
+								this.zhongZhiHandler(user, dept, subjectResult);
+								break;
 							default:
 						}
 					});
@@ -160,6 +163,54 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
         });
     }
 
+	/**
+	 * 众蚁云结果处理
+	 *
+	 * @param user          用户
+	 * @param dept          部门
+	 * @param subjectResult 结果
+	 */
+	private void zhongZhiHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
+		String code = subjectResult.getStr("code");
+		String certStatus = subjectResult.getStr("certStatus");
+		LocalDateTime now = LocalDateTime.now();
+		ZhongZhiCertStatus zhongZhiCertStatus = Enum.valueOf(ZhongZhiCertStatus.class, certStatus);
+
+		// 拼接更新条件
+		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
+				.eq(SysUserSub::getUserId, user.getUserId())
+				.eq(SysUserSub::getDeptId, dept.getDeptId())
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.ZHONG_ZHI)
+				.eq(SysUserSub::getGigType, GigTypeEnum.ZHONG_ZHI)
+				.set(SysUserSub::getUpdateTime, now)
+				.set(SysUserSub::getUpdateUser, 0)
+				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
+
+		// 999100-已签约过
+		if (ZhongZhiCertStatus.SIGN.equals(zhongZhiCertStatus) || StrUtil.endWith(code, "999100")) {
+			// 中智已签约 即对应这里的已认证
+			updateWrapper.set(SysUserSub::getCertStatus, ZhongZhiCertStatus.CERT.getCode());
+			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+		} else if (ZhongZhiCertStatus.UN_SIGN.equals(zhongZhiCertStatus)) {
+			// UN_SIGN不改认证状态
+			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+		} else {
+			updateWrapper.set(SysUserSub::getCertStatus, zhongZhiCertStatus.getCode());
+			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+		}
+
+		sysUserSubService.update(updateWrapper);
+
+		// 结果放到redis
+		Map<String, Map<String, String>> resultMap = new HashMap<>(1);
+		Map<String, String> subMap = new HashMap<>(1);
+		subMap.put("certStatus", certStatus);
+		resultMap.put(SubjectLocation.ZHONG_ZHI.getType(), subMap);
+		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
+		log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(resultMap));
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
+	}
+
 	/**
 	 * 众蚁云结果处理
 	 *
@@ -184,7 +235,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
 
 		if (ZhongYiYunCertStatus.SIGN.equals(zhongYiYunCertStatus)) {
-			// 汇企云已签约 即对应这里的已认证
+			// 众蚁云已签约 即对应这里的已认证
 			updateWrapper.set(SysUserSub::getCertStatus, ZhongYiYunCertStatus.CERT.getCode());
 			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
 		} else {

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java

@@ -32,6 +32,14 @@ public interface WmPayOffService extends IService<WmPayOff> {
 	 */
 	R<?> settleById(String pkgId);
 
+	/**
+	 * 多人承接-按积分值业务结算-查询
+	 *
+	 * @param taskIds 任务id
+	 * @return 结算信息
+	 */
+	R<?> settleInfoByTaskIds(String[] taskIds);
+
 	/**
 	 * 业务保存操作
 	 *

+ 28 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageSettleNoteService.java

@@ -40,9 +40,20 @@ public interface WmScorePackageSettleNoteService extends IService<WmScorePackage
 	 *
 	 * @param page
 	 * @param note
+	 * @param settleStatusArr
 	 * @return
 	 */
-	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage(Page page, WmScorePackageSettleNote note);
+	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage(Page page, WmScorePackageSettleNote note, String[] settleStatusArr);
+
+	/**
+	 * 结算包结算列表(分页)
+	 *
+	 * @param page
+	 * @param note
+	 * @param settleStatusArr
+	 * @return
+	 */
+	IPage<WmTaskSettleNoteOutput> getWmTaskForSettlePage2(Page page, WmScorePackageSettleNote note, String[] settleStatusArr);
 
 	/**
 	 * 结算包结算列表
@@ -58,8 +69,24 @@ public interface WmScorePackageSettleNoteService extends IService<WmScorePackage
 
 	R saveSettleInfo(WmScorePackageSettleNote note);
 
+	/**
+	 * 批量业务结算保存
+	 *
+	 * @param noteList note列表
+	 * @return 结果
+	 */
+	R<?> batchSaveSettleInfo(List<WmScorePackageSettleNote> noteList);
+
 	R subSettleInfo(WmScorePackageSettleNote note);
 
+	/**
+	 * 批量业务结算提交
+	 *
+	 * @param noteList note列表
+	 * @return 结果
+	 */
+	R<?> batchSubSettleInfo(List<WmScorePackageSettleNote> noteList);
+
 	R revokeSettle(WmScorePackageSettleNote note);
 
 	/**

+ 13 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/ZhongzhiInputRecordService.java

@@ -0,0 +1,13 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author snows
+* @description 针对表【zhongzhi_input_record(中智回调异步通知记录)】的数据库操作Service
+* @createDate 2023-04-10 15:09:13
+*/
+public interface ZhongzhiInputRecordService extends IService<ZhongzhiInputRecord> {
+
+}

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigThirdApiService.java

@@ -14,6 +14,14 @@ import java.util.List;
  */
 public interface GigThirdApiService {
 
+	/**
+	 * 中智结算回调业务处理
+	 *
+	 * @param bodyJson 请求数据
+	 * @return 是否成功
+	 */
+	boolean zhongzhiSettleNotify(JSONObject bodyJson);
+
 	/**
 	 * 众蚁云结算回调业务处理
 	 *

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/SysUserSignCertService.java

@@ -54,6 +54,13 @@ public interface SysUserSignCertService {
 	 */
 	Map<String, Object> listCertInfo(String idCard, String enterprisCode, List<SubjectLocation> subjectChannel);
 
+	/**
+	 * 保存银行卡信息
+	 *
+	 * @param userSignCertDTO
+	 */
+	void saveBankInfo(UserSignCertDTO userSignCertDTO);
+
 	/**
 	 * 保存用户基础信息
 	 *

+ 68 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/GigThirdApiServiceImpl.java

@@ -87,6 +87,74 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 	private final HuiqiyunInputRecordService huiqiyunInputRecordService;
 
+	/**
+	 * 中智结算回调业务处理
+	 *
+	 * @param bodyJson 请求数据
+	 * @return 是否成功
+	 */
+	@Override
+	public boolean zhongzhiSettleNotify(JSONObject bodyJson) {
+		// 三方订单号
+		String thirdOrderNo = bodyJson.getStr("thirdOrderNo");
+		// 支付结果,SUCCESS成功,FAIL失败
+		String payResult = bodyJson.getStr("payResult");
+
+		// 根据orderNo查询结算单
+		List<WmScorePackageSettleNote> settleNoteList = scorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+				.eq(WmScorePackageSettleNote::getStreamId, thirdOrderNo));
+		if (CollUtil.isEmpty(settleNoteList)) {
+			log.warn("订单thirdOrderNo={}对应结算单不存在", thirdOrderNo);
+			return false;
+		}
+
+		WmScorePackageSettleNote tmp = settleNoteList.get(0);
+
+		int yaoyiStatus = 0;
+		if ("SUCCESS".equals(payResult)) {
+			// 对应要易结算成功状态
+			yaoyiStatus = 1;
+		} else if ("FAIL".equals(payResult)) {
+			yaoyiStatus = 2;
+		} else {
+			log.warn("当前结算payResult不处理");
+			redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + tmp.getId());
+			return false;
+		}
+
+		// 修改结算状态
+		final int finalYaoyiStatus = yaoyiStatus;
+		List<WmScorePackageSettleNote> updateList = settleNoteList.stream().map(note -> {
+			WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
+			updateEntity.setId(note.getId());
+			updateEntity.setSettleNoteStatus(finalYaoyiStatus);
+			if (finalYaoyiStatus == 1){
+				updateEntity.setNotifyTime(LocalDateTime.now());
+			}
+			updateEntity.setUpdateTime(LocalDateTime.now());
+			return updateEntity;
+		}).collect(Collectors.toList());
+
+		scorePackageSettleNoteService.updateBatchById(updateList);
+
+		WmScorePackage scorePackage = scorePackageService.getById(tmp.getPackageId());
+
+		// 遥领不修改
+		if (!"1611890566".equals(scorePackage.getSendPackageDeptId())) {
+			// 更新积分包状态
+			log.info("更新积分包状态:{}", tmp);
+			WmScorePackage wmScorePackage = new WmScorePackage();
+			wmScorePackage.setId(tmp.getPackageId());
+			wmScorePackage.setSettleStatus(yaoyiStatus);
+			wmScorePackage.setUpdateTime(LocalDateTime.now());
+			scorePackageService.updateById(wmScorePackage);
+		}
+
+		redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + tmp.getId());
+
+		return true;
+	}
+
 	/**
 	 * 众蚁云结算回调业务处理
 	 *

+ 54 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java

@@ -180,6 +180,35 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		return null;
 	}
 
+	/**
+	 * 保存银行卡信息
+	 *
+	 * @param userSignCertDTO
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveBankInfo(UserSignCertDTO userSignCertDTO) {
+		SysUser sysUser = new SysUser();
+		sysUser.setUserId(userSignCertDTO.getUserId());
+		sysUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+		sysUser.setBankPhone(userSignCertDTO.getBankPhone());
+		sysUser.setBankName(userSignCertDTO.getBankName());
+		sysUserService.updateById(sysUser);
+
+		List<SysUserSub> queryUserSubs = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getUserId, userSignCertDTO.getUserId()));
+		queryUserSubs.forEach(queryUserSub -> {
+			SysUserSub updateUserSub = new SysUserSub();
+			updateUserSub.setId(queryUserSub.getId());
+			updateUserSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			updateUserSub.setBankPhone(userSignCertDTO.getBankPhone());
+			updateUserSub.setBankName(userSignCertDTO.getBankName());
+			updateUserSub.setUpdateTime(LocalDateTime.now());
+			updateUserSub.setUpdateUser(SecurityUtils.getUser().getId());
+			sysUserSubService.updateById(updateUserSub);
+		});
+	}
+
 	/**
 	 * 保存用户基础信息
 	 *
@@ -201,6 +230,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			updateUser.setIdCardNumber(userSignCertDTO.getIdCardNumber());
 			updateUser.setBankPhone(userSignCertDTO.getBankPhone());
 			updateUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			updateUser.setBankName(userSignCertDTO.getBankName());
 			updateUser.setUpdateTime(LocalDateTime.now());
 			sysUserService.updateById(updateUser);
 		}
@@ -234,6 +264,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			updateUserSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
 			updateUserSub.setGigChannel(gigChannel);
 			updateUserSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			updateUserSub.setBankPhone(userSignCertDTO.getBankPhone());
+			updateUserSub.setBankName(userSignCertDTO.getBankName());
 			updateUserSub.setUpdateTime(LocalDateTime.now());
 			updateUserSub.setUpdateUser(operateUserId);
 			sysUserSubService.updateById(updateUserSub);
@@ -247,6 +279,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			userSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
 			userSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
 			userSub.setBankPhone(userSignCertDTO.getBankPhone());
+			userSub.setBankName(userSignCertDTO.getBankName());
 			userSub.setCreateUser(operateUserId);
 			userSub.setCreateTime(LocalDateTime.now());
 			sysUserSubService.save(userSub);
@@ -399,6 +432,21 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				}
 				this.updateUserCertStatus(userSub.getId(), "内部状态对其", ZhongYiYunCertStatus.SIGN.getCode(), null);
 				return R.ok();
+			case ZHONG_ZHI:
+				// 中智
+				if (userSub.getCertStatus() > ZhongZhiCertStatus.UN_SIGN.getCode()) {
+					return R.ok();
+				}
+
+				this.updateUserCertStatus(userSub.getId(), "内部状态对其", ZhongZhiCertStatus.SIGN.getCode(), null);
+				return R.ok();
+//			case HAN_TANG:
+//				// 汉唐
+//				if (userSub.getCertStatus() > HanTangCertStatus.UN_SIGN.getCode()) {
+//					return R.ok();
+//				}
+//				this.updateUserCertStatus(userSub.getId(), "内部状态对其", HanTangCertStatus.SIGN.getCode(), null);
+//				return R.ok();
 			default:
 				message = "不支持该税源地操作";
 		}
@@ -585,7 +633,12 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return true;
 				} else if (GigTypeEnum.ZHONG_YI_YUN.equals(sysUserSub.getGigType())) {
 					return true;
+				} else if (GigTypeEnum.ZHONG_ZHI.equals(sysUserSub.getGigType())) {
+					return true;
 				}
+//				else if (GigTypeEnum.HAN_TANG.equals(sysUserSub.getGigType())) {
+//					return true;
+//				}
 				return false;
 			}).forEach(userSub -> {
 
@@ -777,6 +830,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		userInfoModel.setPayChannel(PayChannel.BANK_CARD);
 		userInfoModel.setBankPhone(userSub.getBankPhone());
 		userInfoModel.setBankCard(userSub.getBankCardNumber());
+		userInfoModel.setBankName(userSub.getBankName());
 		userInfoModel.setUploadFaceID(uploadFaceID);
 		userInfoModel.setIdCardFront(StrUtil.isBlank(userSub.getIdCardFrontUrl())
 				? userExtRecord.getIdCardFrontUrl() : userSub.getIdCardFrontUrl().startsWith("https")

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

@@ -216,6 +216,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 				case LANG_CHAO:
 				case HUI_QI_YUN:
 				case ZHONG_YI_YUN:
+				case ZHONG_ZHI:
 					if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 						throw new RuntimeException(user.getRealname() + "未认证,不能发起结算");
 					}

+ 371 - 17
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java

@@ -8,15 +8,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.config.TaxNotifyConfig;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.entity.input.SettleNoteStatusOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
+import com.qunzhixinxi.hnqz.admin.enums.PackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDictItemMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
@@ -56,6 +60,7 @@ import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -80,11 +85,11 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 	private final WmScorePackageSettleNoteService noteService;
 	private final SysDeptService sysDeptService;
 	private final SysDeptSubService sysDeptSubService;
+	private final SysDictItemMapper sysDictItemMapper;
 	private final RedisTemplate<String, Object> redisTemplate;
 	private final MonitoringIndicatorService monitoringIndicatorService;
 	private final TaxHelperService taxHelperService;
 	private final TaxNotifyConfig taxNotifyConfig;
-	private final RestTemplate restTemplate;
 
 	private final MathContext mc = new MathContext(2, RoundingMode.HALF_EVEN);
 	private final String GIG_TOKEN_URL = "%s/gig/operation/token?tenantId={tenantId}&action={action}&userId={userId}";
@@ -157,7 +162,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 				note.setPackageStatusId(String.valueOf(status.getId()));
 				note.setPackageId(status.getPackageId());
 
-				if ("1".equals(wmScorePackage.getPackageType1())) {
+				if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage.getPackageType1())) {
 
 					note.setSettleAmount(StringUtils.isEmpty(status.getUserScore()) ? BigDecimal.ZERO : new BigDecimal(status.getUserScore(), mc));
 
@@ -235,6 +240,119 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		return R.ok(resultMap);
 	}
 
+	/**
+	 * 多人承接-按积分值业务结算-查询
+	 *
+	 * @param taskIds 任务id
+	 * @return 结算信息
+	 */
+	@Override
+	public R<?> settleInfoByTaskIds(String[] taskIds) {
+		// 查询任务
+		List<WmTask> taskList = wmTaskService.listByIds(Arrays.asList(taskIds));
+		Set<String> taskIdSet = taskList.stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
+		if (taskIdSet.size() > 1) {
+			return R.failed("所选任务不属于同一个积分包");
+		}
+
+		String scorePackageId = taskList.get(0).getScorePackageId();
+		WmScorePackage wmScorePackage = wmScorePackageService.getById(scorePackageId);
+
+		// user-taskList map
+		Map<String, List<WmTask>> userTaskMap = taskList.stream().collect(Collectors.groupingBy(WmTask::getTaskUserId));
+		// taskId-task Map
+		Map<String, WmTask> taskMap = taskList.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
+
+		// 查询settleNote
+		List<WmScorePackageSettleNote> notes = noteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+				.in(WmScorePackageSettleNote::getTaskId, Arrays.asList(taskIds))
+				.eq(WmScorePackageSettleNote::getPackageId, scorePackageId));
+		Map<String, WmScorePackageSettleNote> taskSettleNoteMap = notes.stream()
+				.filter(note -> StrUtil.isNotBlank(note.getTaskId()))
+				.collect(Collectors.toMap(WmScorePackageSettleNote::getTaskId, Function.identity()));
+
+		// 查询user
+		Set<String> allUserIdSet = new HashSet<>();
+		allUserIdSet.addAll(userTaskMap.keySet());
+		allUserIdSet.addAll(notes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toSet()));
+		List<SysUser> sysUsers = sysUserMapper.selectBatchIds(allUserIdSet);
+		Map<Integer, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+
+		// 页面回显的结算对象列表
+		List<WmScorePackageSettleNote> userNotes = new ArrayList<>();
+		// 用于结算的note参数
+		List<WmScorePackageSettleNote> toSettleNotes = new ArrayList<>();
+
+		if (wmScorePackage.getLocation() != null) {
+			wmScorePackage.setSubjectLocation(wmScorePackage.getLocation().name());
+		}
+//		if (StrUtil.isBlank(wmScorePackage.getSubjectLocation())){
+//			return R.failed("结算积分包未勾选税源地");
+//		}
+
+		// 按结算对象分组,统计分别对应的结算信息
+		for (String userId : userTaskMap.keySet()) {
+			WmScorePackageSettleNote oneUserNote = new WmScorePackageSettleNote();
+			List<WmTask> userTasks = userTaskMap.get(userId);
+
+			// 计算每个人的总任务积分
+			BigDecimal userTotalSettleAmount = BigDecimal.ZERO;
+			for (WmTask task : userTasks) {
+				WmScorePackageSettleNote settleNote = taskSettleNoteMap.get(task.getId());
+				// 存在note,则取note金额,否则取task的积分
+				if (settleNote != null) {
+					userTotalSettleAmount = userTotalSettleAmount.add(settleNote.getSettleAmount());
+				} else {
+					userTotalSettleAmount = userTotalSettleAmount.add(BigDecimal.valueOf(task.getScore()));
+				}
+			}
+
+			oneUserNote.setPackageId(scorePackageId);
+			oneUserNote.setSettleAmount(userTotalSettleAmount);
+			oneUserNote.setDiscount(BigDecimal.ONE);
+			oneUserNote.setUserId(userId);
+			oneUserNote.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
+
+			SysUser noteUser = userMap.get(Integer.parseInt(userId));
+			oneUserNote.setRealName(noteUser.getRealname());
+			oneUserNote.setIdCardNumber(noteUser.getIdCardNumber());
+			userNotes.add(oneUserNote);
+		}
+
+		// 添加用于结算的note参数
+		for (String taskId : taskIds) {
+			WmScorePackageSettleNote note = new WmScorePackageSettleNote();
+			// note存在则直接获取
+			WmScorePackageSettleNote settleNote = taskSettleNoteMap.get(taskId);
+			if (settleNote != null) {
+				toSettleNotes.add(settleNote);
+				continue;
+			}
+
+			// note不存在,取task中的信息作为结算信息
+			WmTask task = taskMap.get(taskId);
+			note.setSettleAmount(BigDecimal.valueOf(task.getScore()));
+			note.setSettleNo(IdUtil.fastSimpleUUID());
+			note.setPackageId(scorePackageId);
+			note.setTaskId(taskId);
+			note.setDiscount(BigDecimal.ONE);
+			note.setUserId(task.getTaskUserId());
+			note.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
+			// user信息
+			SysUser noteUser = userMap.get(Integer.parseInt(task.getTaskUserId()));
+			note.setRealName(noteUser.getRealname());
+			note.setIdCardNumber(noteUser.getIdCardNumber());
+			toSettleNotes.add(note);
+		}
+
+		Map<String, Object> resultMap = new HashMap<>(3);
+		resultMap.put("wsp", wmScorePackage);
+		resultMap.put("notes", toSettleNotes);
+		resultMap.put("userNotes", userNotes);
+
+		return R.ok(resultMap);
+	}
+
 	/**
 	 * 业务提交结算信息到财务
 	 *
@@ -289,17 +407,24 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		updateEntity.setId(input.getId());
 		updateEntity.setSettleStatus(DingEnum.SETTLE_STATUS_WAIT.getType());
 		updateEntity.setScorePackageStatus("5");
-		updateEntity.setSettleFlag("1");
 		updateEntity.setDescription(input.getDescription());
 		updateEntity.setSubType(String.valueOf(location.getGigType().getCode()));
 		updateEntity.setLocation(input.getSubjectLocation());
 		updateEntity.setSettlementDate(LocalDateTime.now());
 
-		if ("2".equals(wmScorePackage.getPackageType2())) {
+		if (PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(wmScorePackage.getPackageType2())
+				&& !StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage.getPackageType1())) {
 			updateEntity.setPackageFinishStatus("1");
 			updateEntity.setTaskAddFlag("0");
 		}
 
+		if (StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage.getPackageType1())) {
+			// 多人承接积分包可以一直结算
+			updateEntity.setSettleFlag("0");
+		} else {
+			updateEntity.setSettleFlag("1");
+		}
+
 		wmScorePackageService.updateById(updateEntity);
 		noteService.saveOrUpdateBatch(notes);
 
@@ -458,6 +583,10 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		else if (SubjectTypeEnum.TYPE_ZHONG_YI_YUN.getCode().equals(subType)) {
 			return this.settleByZhongYiYun(input, wmScorePackage, taxCode, operator);
 		}
+		// 中智
+		else if (SubjectTypeEnum.TYPE_ZHONG_ZHI.getCode().equals(subType)) {
+			return this.settleByZhongZhi(input, wmScorePackage, taxCode, operator);
+		}
 		// 税邦云
 		else {
 			log.info("税邦云结算开始-获取会员所属企业的统一社会信用代码:{} ", taxCode);
@@ -466,6 +595,201 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 	}
 
+	/**
+	 * 中智结算操作
+	 *
+	 * @param input          结算数据
+	 * @param wmScorePackage 积分包
+	 * @param taxCode        税号
+	 * @param operator       操作员
+	 * @return 结果
+	 */
+	private R<?> settleByZhongZhi(WmScorePackageSettleInput input,
+									WmScorePackage wmScorePackage,
+									String taxCode,
+									HnqzUser operator) {
+
+		List<WmScorePackageSettleNote> notes = input.getNotes();
+		StringBuilder noticeInfo = new StringBuilder();
+
+		// WmScorePackageSettleNote
+		for (WmScorePackageSettleNote note : notes) {
+			note.setInvoiceType(input.getInvoiceCategory());
+			note.setCategoryName(StrUtil.isNotBlank(input.getCategoryName()) ? input.getCategoryName() : note.getCategoryName());
+			note.setSubToGigTime(LocalDateTime.now());
+		}
+		noteService.updateBatchById(notes);
+
+
+		for (WmScorePackageSettleNote note : notes) {
+			SysUser sysUser = sysUserMapper.selectById(note.getUserId());
+
+			SysUserSub userSub = sysUserSubMapper.selectOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, sysUser.getUserId())
+					.eq(SysUserSub::getSubjectLocation, input.getSubjectLocation())
+					.eq(SysUserSub::getDeptId, operator.getDeptId())
+			);
+
+			if (userSub == null) {
+				log.info("结算对象-" + sysUser.getRealname() + ":认证信息不存在,不能结算");
+				return R.failed("结算对象-" + sysUser.getRealname() + ":认证信息不存在,不能结算");
+			}
+
+			if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
+				return R.failed(sysUser.getRealname() + "人员未认证或未绑卡,不能结算");
+			}
+
+			if (Boolean.TRUE.equals(redisTemplate.hasKey(CacheConstants.SETTLE_PACKAGE_KEY + note.getId()))) {
+				return R.failed("结算对象-" + sysUser.getRealname() + ":正在结算,请勿重复结算");
+			}
+
+			if (DingEnum.NOTE_STATUS_SUCCESS.getType().equals(note.getSettleNoteStatus())) {
+				log.info("结算对象-" + sysUser.getRealname() + ":已结算,请勿重复结算");
+				return R.failed("结算对象-" + sysUser.getRealname() + ":已结算,请勿重复结算");
+			}
+			if (DingEnum.NOTE_STATUS_SUBMIT.getType().equals(note.getSettleNoteStatus())) {
+				log.info("结算对象-" + sysUser.getRealname() + ":已提交,请等待耐心结算结果");
+				return R.failed("结算对象-" + sysUser.getRealname() + ":已提交,请等待耐心结算结果");
+			}
+		}
+
+		for (WmScorePackageSettleNote note : notes) {
+			// 加锁
+			redisTemplate.opsForValue().set(CacheConstants.SETTLE_PACKAGE_KEY + note.getId(),
+					note.getId(), CacheConstants.SETTLE_TIME, TimeUnit.DAYS);
+
+			SysUser sysUser = sysUserMapper.selectById(note.getUserId());
+
+			try {
+
+				// 获取请求token
+				String url = String.format(GIG_TOKEN_URL, upmsConfig.getGigServiceUrl());
+				log.info("远端请求gig-token:{}", url);
+				ResponseEntity<String> tokenResult = new RestTemplate().getForEntity(url, String.class,
+						String.valueOf(operator.getDeptId()), "settle", String.valueOf(operator.getId()));
+				log.warn("获取结算token:{}", tokenResult.getBody());
+				if (!JSONUtil.isJson(tokenResult.getBody())) {
+					return R.failed("获取结算token失败");
+				}
+
+				JSONObject jsonObject = JSONUtil.parseObj(tokenResult.getBody());
+
+				if (jsonObject.getInt("code") != 0 || StrUtil.isBlank(jsonObject.getStr("data"))) {
+					return R.failed("获取结算token失败");
+				}
+
+				String token = jsonObject.getStr("data");
+
+				// 间隔100毫秒
+				Thread.sleep(100);
+
+				// 查询发票类目对应的字典
+				SysDictItem zhongzhiInvoice = sysDictItemMapper.selectOne(Wrappers.<SysDictItem>lambdaQuery()
+						.eq(SysDictItem::getType, "zhongzhi_invoice")
+						.eq(SysDictItem::getValue, String.valueOf(note.getInvoiceType())));
+
+				// 封装结算参数
+				Map<String, Object> params = new HashMap<>();
+				params.put("token", token);
+				params.put("tenantId", operator.getDeptId());
+				params.put("operatorId", operator.getId());
+				params.put("requestId", RandomStringUtils.randomAlphabetic(12));
+				params.put("taskName", wmScorePackage.getScorePackageName() + "_" + System.currentTimeMillis());
+				params.put("amount", String.valueOf(note.getSettleAmount().doubleValue()));
+				params.put("taskStartTime", wmScorePackage.getCreateTime().toLocalDate());
+				params.put("taskEndTime", wmScorePackage.getUpdateTime().toLocalDate());
+				params.put("taskLocation", "要易云");
+				params.put("username", sysUser.getBankPhone());
+				params.put("idCard", sysUser.getIdCardNumber());
+				params.put("idCardType","ID_CARD");
+				params.put("realName", sysUser.getRealname());
+				params.put("bankCard", sysUser.getBankCardNumber());
+				params.put("bankPhone", sysUser.getBankPhone());
+				// 行业类别id
+				params.put("tagId", zhongzhiInvoice.getDescription());
+				// 税收项目编号
+				params.put("taskInvoiceContent", zhongzhiInvoice.getRemarks());
+				params.put("endType", "CSO");
+				params.put("enterpriseCode", taxCode);
+				params.put("subjectType", "ZHONG_ZHI");
+				params.put("channel", "DEFAULT");
+				params.put("subjectLocation", input.getSubjectLocation().getType());
+				params.put("taxMode", "SPECIAL");
+				params.put("transactionModel", "CHANNEL");
+				params.put("taskDescription", "根据要求,执行、并完成学术推广活动,并以在线平台工具采集、记录活动内容");
+
+				// 发起结算
+				String url1 = String.format(GIG_SETTLE_URL, upmsConfig.getGigServiceUrl());
+				log.info("远端请求gig-settle:{}", url);
+				HttpHeaders headers = new HttpHeaders();
+				headers.setContentType(MediaType.APPLICATION_JSON);
+				log.info("中智结算req: {}", params);
+				HttpEntity<String> result = new RestTemplate().exchange(url1, HttpMethod.POST, new HttpEntity<>(params, headers), String.class);
+				log.info("中智结算resp:{}", result.getBody());
+				if (!JSONUtil.isJson(result.getBody())) {
+					return R.failed("结算失败");
+				}
+
+				JSONObject settleObj = JSONUtil.parseObj(result.getBody());
+
+
+				if (Objects.equals(settleObj.getInt("code"), CommonConstants.SUCCESS)) {
+					JSONObject dataJsonObj = settleObj.getJSONObject("data");
+					log.info("中智结算提交成功: {}", settleObj.getStr("data"));
+					note.setUpdateTime(LocalDateTime.now());
+					//streamId 获取不到
+					if (dataJsonObj != null) {
+						String requestId = dataJsonObj.getStr("requestId");
+						if (StrUtil.isNotBlank(requestId)) {
+							note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
+							// 新增字段streamId
+							note.setStreamId(requestId);
+							noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
+						} else {
+							note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+							noticeInfo.append(sysUser.getRealname()).append(":" + dataJsonObj.getStr("message"));
+							redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+						}
+					} else {
+						note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+						log.warn("中智结算提交成功 data 获取不到: {}", note.getSettleNo());
+						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+					}
+				} else {
+					log.warn("中智结算失败: {}", note.getSettleNo());
+					note.setUpdateTime(LocalDateTime.now());
+					note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+					noticeInfo.append(sysUser.getRealname()).append(":结算提交失败-").append(settleObj.getStr("msg")).append(";");
+
+					log.info("认证状态异常,结算解锁settleNoteId:{}", note.getId());
+					redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+
+				}
+			} catch (Exception e) {
+				log.error("", e);
+				log.warn("中智结算提交失败: {}", note.getSettleNo());
+				note.setUpdateTime(LocalDateTime.now());
+				note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+				noticeInfo.append(sysUser.getRealname()).append(":结算提交失败;");
+
+				log.info("认证状态异常,结算解锁settleNoteId:{}", note.getId());
+				redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+			}
+		}
+
+		noteService.updateBatchById(notes);
+
+		// 更新结算结果
+		SettleNoteStatusOutput output = noteService.selectSettleNoteStatus(input.getId());
+		WmScorePackage updateEntity = new WmScorePackage();
+		updateEntity.setId(input.getId());
+		updateEntity.setSettleStatus(output.toSettleStatus());
+		wmScorePackageService.updateById(updateEntity);
+
+		return R.ok(null, noticeInfo.toString());
+	}
+
 	/**
 	 * 众蚁云结算操作
 	 *
@@ -611,11 +935,15 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 							note.setStreamId(requestId);
 							noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
 						} else {
+							note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 							noticeInfo.append(sysUser.getRealname()).append(":" + dataJsonObj.getStr("message"));
+							redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 						}
 					} else {
+						note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 						log.warn("众蚁云结算提交成功 data 获取不到: {}", note.getSettleNo());
 						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 					}
 				} else {
 					log.warn("众蚁云结算失败: {}", note.getSettleNo());
@@ -806,11 +1134,14 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 							note.setStreamId(requestId);
 							noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
 						} else {
+							note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 							noticeInfo.append(sysUser.getRealname()).append(":" + dataJsonObj.getStr("message"));
+							redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 						}
 					} else {
 						log.warn("汇企云结算提交成功 data 获取不到: {}", note.getSettleNo());
 						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 					}
 				} else {
 					log.warn("汇企云结算失败: {}", note.getSettleNo());
@@ -994,10 +1325,18 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
 					}
 					note.setUpdateTime(LocalDateTime.now());
-					note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
-					// 新增字段streamId
-					note.setStreamId(dataJsonObj.getStr("requestId"));
-					noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
+
+					String requestId = dataJsonObj.getStr("requestId");
+					if (StrUtil.isNotBlank(requestId)) {
+						note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
+						// 新增字段streamId
+						note.setStreamId(requestId);
+						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
+					} else {
+						note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+					}
 				} else {
 					log.warn("浪潮结算失败: {}", note.getSettleNo());
 					note.setUpdateTime(LocalDateTime.now());
@@ -1174,11 +1513,14 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 							note.setStreamId(requestId);
 							noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
 						} else {
+							note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 							noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+							redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 						}
 					} else {
 						log.warn("政企之星结算提交成功 data 获取不到: {}", note.getSettleNo());
 						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 					}
 				} else {
 					log.warn("政企之星结算失败: {}", note.getSettleNo());
@@ -1362,14 +1704,23 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 					if (dataJsonObj == null) {
 						log.warn("自由职家结算提交成功 data 获取不到: {}", note.getSettleNo());
 						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
 					}
 					note.setUpdateTime(LocalDateTime.now());
 					note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
-					// 新增字段streamId
-					note.setStreamId(dataJsonObj.getStr("requestId"));
-					// 第三方任务id
-					note.setThirdTaskId(dataJsonObj.getStr("taskId"));
-					noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
+
+					String requestId = dataJsonObj.getStr("requestId");
+					if (StrUtil.isNotBlank(requestId)) {
+						// 新增字段streamId
+						note.setStreamId(requestId);
+						// 第三方任务id
+						note.setThirdTaskId(dataJsonObj.getStr("taskId"));
+						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
+					} else {
+						note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+						noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+						redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+					}
 				} else {
 					log.warn("自由职家结算提交失败: {}", note.getSettleNo());
 					note.setUpdateTime(LocalDateTime.now());
@@ -1510,14 +1861,17 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 				log.info("税邦云结算提交成功: {}", note.getSettleNo());
 				//streamId 获取不到
 				if (StringUtils.isEmpty(response.getMessage())) {
+					note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 					log.info("税邦云结算提交成功 streamId 获取不到: {}", note.getSettleNo());
 					noticeInfo.append(sysUser.getRealname()).append(":提交结算成功,业务流水号获取不到,请联系管理员;");
+					redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+				} else {
+					// 新增字段streamId
+					note.setStreamId(response.getMessage());
+					note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
+					noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
 				}
 				note.setUpdateTime(LocalDateTime.now());
-				note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
-				// 新增字段streamId
-				note.setStreamId(response.getMessage());
-				noticeInfo.append(sysUser.getRealname()).append(":提交结算成功;");
 			} else {
 				log.info("税邦云结算提交失败: {}", note.getSettleNo());
 				note.setUpdateTime(LocalDateTime.now());

+ 33 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java

@@ -713,6 +713,9 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		if (PackageTypeEnum.TYPE1_HCP_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
 			// 患者教育,固定只能一人领取
 			wmScorePackage.setUserNum(1);
+		} else if (PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
+			// 多人承接-按积分值
+			wmScorePackage.setUserNum(9999);
 		}
 		wmScorePackage.setCreateUser(currentUser.getId());
 		wmScorePackage.setCreateTime(LocalDateTime.now());
@@ -770,6 +773,18 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 					tasktypeList.add(addTaskTypeTree43);
 					tasktypeList.add(addTaskTypeTree44);
 				}
+				// 如果存在taskTypeId=47 47,库存调研 48,竞品调研  49,培训 50,使用情况调查
+				if (tasktypeList.stream().anyMatch(wmTaskTypeTree -> "47".equals(wmTaskTypeTree.getTaskTypeId()))) {
+					WmTaskTypeTree addTaskTypeTree48 = new WmTaskTypeTree();
+					addTaskTypeTree48.setTaskTypeId("48");
+					WmTaskTypeTree addTaskTypeTree49 = new WmTaskTypeTree();
+					addTaskTypeTree49.setTaskTypeId("49");
+					WmTaskTypeTree addTaskTypeTree50 = new WmTaskTypeTree();
+					addTaskTypeTree50.setTaskTypeId("50");
+					tasktypeList.add(addTaskTypeTree48);
+					tasktypeList.add(addTaskTypeTree49);
+					tasktypeList.add(addTaskTypeTree50);
+				}
 
 				for (WmTaskTypeTree type : tasktypeList) {
 					WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
@@ -792,8 +807,10 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 					}
 				}
 			} else {
-				if (wmScorePackage.getPackageType1().equals("5") || wmScorePackage.getPackageType1().equals("4")
-						|| wmScorePackage.getPackageType2().equals("2")) {
+				if (wmScorePackage.getPackageType1().equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val())
+						|| wmScorePackage.getPackageType1().equals(PackageTypeEnum.TYPE1_HCP_PACKAGE.val())
+						|| wmScorePackage.getPackageType1().equals(PackageTypeEnum.TYPE1_SETTLE_PACKAGE.val())
+						|| wmScorePackage.getPackageType2().equals(PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val())) {
 					//结算包
 					WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
 					wmScoreTaskType.setScoreId(wmScorePackage.getId());
@@ -1385,6 +1402,18 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 					wmScorePackage.getTaskTypeList().add(addTaskTypeTree43);
 					wmScorePackage.getTaskTypeList().add(addTaskTypeTree44);
 				}
+				// 如果存在taskTypeId=47 47,库存调研 48,竞品调研  49,培训 50,使用情况调查
+				if (tasktypeList.stream().anyMatch(wmTaskTypeTree -> "47".equals(wmTaskTypeTree.getTaskTypeId()))) {
+					WmTaskTypeTree addTaskTypeTree48 = new WmTaskTypeTree();
+					addTaskTypeTree48.setTaskTypeId("48");
+					WmTaskTypeTree addTaskTypeTree49 = new WmTaskTypeTree();
+					addTaskTypeTree49.setTaskTypeId("49");
+					WmTaskTypeTree addTaskTypeTree50 = new WmTaskTypeTree();
+					addTaskTypeTree50.setTaskTypeId("50");
+					tasktypeList.add(addTaskTypeTree48);
+					tasktypeList.add(addTaskTypeTree49);
+					tasktypeList.add(addTaskTypeTree50);
+				}
 
 				for (WmTaskTypeTree type : tasktypeList) {
 					WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
@@ -1985,7 +2014,8 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		long shtgtt = 0;
 		// 审核不通过百分比
 		long shbtgtt = 0;
-		if (StrUtil.equals(scorePackage.getPackageType1(), "1")) {
+		if (StrUtil.equals(scorePackage.getPackageType1(), PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val())
+				|| StrUtil.equals(scorePackage.getPackageType1(), PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val())) {
 			int score = scorePackage.getScore();
 			if (score != 0) {
 				yshtt = ysh * 100L / score;

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 569 - 74
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java


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

@@ -32,6 +32,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageStatusMapper;
@@ -80,11 +81,15 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 		wmScorePackageStatus.setPackageId(packageStatus1.getPackageId());
 		//审批
 		WmScorePackage wmScorePackage=wmScorePackageMapper.selectById(wmScorePackageStatus.getPackageId());
-		if(wmScorePackage.getPackageType1().equals("1")){//定额
+		if(wmScorePackage.getPackageType1().equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val())) {
 			//定额包一人一包,所以score=userscore
 			wmScorePackageStatus.setUserScore(String.valueOf(wmScorePackage.getScore()));
 			wmScorePackageStatus.setTaskNum(0);
-		}else {
+		} else if(wmScorePackage.getPackageType1().equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val())) {
+			//定额+定量(多人承接-按积分值)
+			wmScorePackageStatus.setUserScore(String.valueOf(wmScorePackage.getScore()));
+			wmScorePackageStatus.setTaskNum(wmScorePackage.getTaskNum());
+		}  else {
 			wmScorePackageStatus.setTaskNum(wmScorePackage.getTaskNum());
 			wmScorePackageStatus.setUserScore(String.valueOf(wmScorePackage.getUserScore()));
 		}
@@ -93,24 +98,29 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 		wmScorePackageStatus.setUserId(null);
 		this.updateById(wmScorePackageStatus);
 
-		if("2".equals(wmScorePackageStatus.getStatus())) {//同意
-			wmScorePackage.setScorePackageStatus("3");//进行中
+		// 同意
+		if ("2".equals(wmScorePackageStatus.getStatus())) {
+			// 进行中
+			wmScorePackage.setScorePackageStatus("3");
 			//判断该积分包是否审核满员,如果是,其他接单对象自动改为审核不通过
-			WmScorePackageStatus wmScorePackageStatus1=new WmScorePackageStatus();
+			WmScorePackageStatus wmScorePackageStatus1 = new WmScorePackageStatus();
 			wmScorePackageStatus1.setPackageId(wmScorePackageStatus.getPackageId());
 			wmScorePackageStatus1.setStatus("2");//审核通过
 			wmScorePackageStatus1.setDelFlag("0");
 			wmScorePackageStatus1.setEnableFlag("0");
-			List<WmScorePackageStatus> sList=this.list(Wrappers.query(wmScorePackageStatus1));
-			Integer usernum=wmScorePackage.getUserNum()==null?1:wmScorePackage.getUserNum();
-			if(sList.size()>=usernum){//接单审核通过人数等于积分包需求人数
-				LambdaUpdateWrapper<WmScorePackageStatus> updateWrapper=new LambdaUpdateWrapper();
-				updateWrapper.set(WmScorePackageStatus::getStatus,"3");//审核不通过
-				updateWrapper.set(WmScorePackageStatus::getTaskAddFlag,"0");//不允许新增任务
-				updateWrapper.eq(WmScorePackageStatus::getPackageId,wmScorePackageStatus.getPackageId());
-				updateWrapper.eq(WmScorePackageStatus::getStatus,"1");
-				updateWrapper.eq(WmScorePackageStatus::getDelFlag,"0");
-				updateWrapper.eq(WmScorePackageStatus::getEnableFlag,"0");
+			List<WmScorePackageStatus> sList = this.list(Wrappers.query(wmScorePackageStatus1));
+			int usernum = wmScorePackage.getUserNum() == null ? 1 : wmScorePackage.getUserNum();
+			// 接单审核通过人数等于积分包需求人数
+			if (sList.size() >= usernum) {
+				LambdaUpdateWrapper<WmScorePackageStatus> updateWrapper = new LambdaUpdateWrapper<>();
+				// 审核不通过
+				updateWrapper.set(WmScorePackageStatus::getStatus, "3");
+				// 不允许新增任务
+				updateWrapper.set(WmScorePackageStatus::getTaskAddFlag, "0");
+				updateWrapper.eq(WmScorePackageStatus::getPackageId, wmScorePackageStatus.getPackageId());
+				updateWrapper.eq(WmScorePackageStatus::getStatus, "1");
+				updateWrapper.eq(WmScorePackageStatus::getDelFlag, "0");
+				updateWrapper.eq(WmScorePackageStatus::getEnableFlag, "0");
 				this.update(updateWrapper);
 				//wmScorePackage.setPackageStatus("2");
 				wmScorePackage.setUpdateTime(LocalDateTime.now());
@@ -119,8 +129,10 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 				wmScorePackageMapper.updateById(wmScorePackage);
 			}
 
-		}else {//不同意
-			wmScorePackageStatus.setTaskAddFlag("0");//不可以新增任务
+		} else {
+			// 不同意
+			// 不可以新增任务
+			wmScorePackageStatus.setTaskAddFlag("0");
 			wmScorePackageStatus.setUserId(null);
 			this.updateById(wmScorePackageStatus);
 		}
@@ -131,20 +143,27 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 		query.setDelFlag("0");
 		query.setEnableFlag("0");
 		int total = this.count(Wrappers.query(query));
-		if(total>=1){//有人接单成功
-			wmScorePackage.setScorePackageStatus("3");//进行中
-			if(total>=wmScorePackage.getUserNum()){//人数已满
-				wmScorePackage.setIsReceive("1");//不允许接单
+		// 有人接单成功
+		if (total >= 1) {
+			// 进行中
+			wmScorePackage.setScorePackageStatus("3");
+			// 人数已满
+			if (total >= wmScorePackage.getUserNum()) {
+				// 不允许接单
+				wmScorePackage.setIsReceive("1");
 			}
-		}else {//没有人接单成功
+		} else {
+			// 没有人接单成功
 			WmScorePackageStatus query1 = new WmScorePackageStatus();
 			query1.setPackageId(wmScorePackageStatus.getPackageId());
 			query1.setStatus("1");
 			int total1 = this.count(Wrappers.query(query1));
-			if(total1==0){
-				wmScorePackage.setScorePackageStatus("1");//已分派待申领
-			}else {
-				wmScorePackage.setScorePackageStatus("2");//已申领待审批
+			if (total1 == 0) {
+				// 已分派待申领
+				wmScorePackage.setScorePackageStatus("1");
+			} else {
+				// 已申领待审批
+				wmScorePackage.setScorePackageStatus("2");
 			}
 
 		}
@@ -357,7 +376,8 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 		/**
 		 * 判断定量还是定额 1- 定额   2-定量
 		 */
-		if ("1".equals(wmScorePackage.getPackageType1())) {
+		if (PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(wmScorePackage.getPackageType1())
+				|| PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(wmScorePackage.getPackageType1())) {
 
 			int totalCount = 0;
 			for (WmTask wmtask : wmTaskList) {
@@ -491,10 +511,14 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 
 		log.warn("开始审批,id:[{}], packageId:[{}]", status, wmScorePackage.getId());
 		//定额
-		if (StrUtil.equals("1", wmScorePackage.getPackageType1())) {
+		if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage.getPackageType1())) {
 			//定额包一人一包,所以score=userscore
 			status.setUserScore(String.valueOf(wmScorePackage.getScore()));
 			status.setTaskNum(0);
+		} else if(StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage.getPackageType1())) {
+			//定额+定量(多人承接-按积分值)
+			status.setUserScore(String.valueOf(wmScorePackage.getScore()));
+			status.setTaskNum(wmScorePackage.getTaskNum());
 		} else {
 			status.setTaskNum(wmScorePackage.getTaskNum());
 			status.setUserScore(String.valueOf(wmScorePackage.getUserScore()));

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScoreTaskTypeServiceImpl.java

@@ -100,6 +100,14 @@ public class WmScoreTaskTypeServiceImpl extends ServiceImpl<WmScoreTaskTypeMappe
 				continue;
 			}
 
+			if (StrUtil.equals("47", type.getId())) {
+				type.setTaskTypeName("药店推广");
+			}
+			if (StrUtil.equals("48", type.getId()) || StrUtil.equals("49", type.getId()) || StrUtil.equals("50", type.getId())) {
+				// 47,库存调研 48,竞品调研  49,培训 50,使用情况调查 统一回显为一个‘药店推广’
+				continue;
+			}
+
 			if(resultMap.containsKey(type.getParentId())){
 				String typeName = resultMap.get(type.getParentId());
 				typeName = typeName +";"+ type.getTaskTypeName();

+ 9 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java

@@ -38,6 +38,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.admin.entity.WmUserSign;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaHospitalMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskContentMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
@@ -653,15 +654,20 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 
 				// 药店推广-47 积分值设置
 				if ("47".equals(wmTaskContent.getTemp30())) {
+					// 根据选择的推广类型 查任务类型模板
+					WmTaskType baseTaskType = wmTaskTypeService.getById(wmTaskContent.getTemp23());
 					// 查询当前企业的任务类型积分
 					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
 					WmTaskType queryTaskType = new WmTaskType();
 					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
-					queryTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
+					queryTaskType.setTaskTypeName(baseTaskType.getTaskTypeName());
 					queryTaskType.setRuleId(wmScorePackage1.getRuleId());
 					score = wmTaskTypeService.getWmTaskTypeByEnt(queryTaskType);
 					// 计算实际任务积分(数量*企业这个任务类型的积分值)
 					score = score * Integer.parseInt(wmTaskContent.getTemp13());
+					// 设置实际的任务类型
+					wmTaskContent.setTemp30(wmTaskContent.getTemp23());
+					wmTask.setTaskTypeId(wmTaskContent.getTemp23());
 				}
 
 				// 校验任务类型是否启用
@@ -756,7 +762,8 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 						List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
 
 						// 判断定量还是定额 1- 定额   2-定量
-						if ("1".equals(wmScorePackage1.getPackageType1())) {
+						if (StrUtil.equals(PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val(), wmScorePackage1.getPackageType1())
+								|| StrUtil.equals(PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val(), wmScorePackage1.getPackageType1())) {
 
 							int totalCount = 0;
 							for (WmTask wmtask : wmTaskList) {

+ 22 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/ZhongzhiInputRecordServiceImpl.java

@@ -0,0 +1,22 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.ZhongzhiInputRecord;
+import com.qunzhixinxi.hnqz.admin.service.ZhongzhiInputRecordService;
+import com.qunzhixinxi.hnqz.admin.mapper.ZhongzhiInputRecordMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author snows
+* @description 针对表【zhongzhi_input_record(中智回调异步通知记录)】的数据库操作Service实现
+* @createDate 2023-04-10 15:09:13
+*/
+@Service
+public class ZhongzhiInputRecordServiceImpl extends ServiceImpl<ZhongzhiInputRecordMapper, ZhongzhiInputRecord>
+    implements ZhongzhiInputRecordService{
+
+}
+
+
+
+

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml

@@ -641,6 +641,7 @@
 		u.cert_remark,
 		u.bank_card_number,
 	  	u.bank_phone,
+	  	u.bank_name,
 		u.tax_helper_agreement_signature
 		FROM
 		sys_user  u

+ 69 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageSettleNoteMapper.xml

@@ -94,19 +94,23 @@
 		t.create_time,
 		t.score_package_id,
 		t.task_user_id,
+		t.lookinto_date,
 		u.realname real_name,
 		u.username,
 		c.temp3 xmbm,
 		e.id noteId,
 		e.invoice_type,
 		e.sub_type,
+		e.subject_location,
 		e.category_name,
 		e.discount,
 		e.stream_id,
 		e.settle_no,
 		e.settle_amount,
+		e.actual_amount,
 		e.settle_note_status,
 		e.sub_time,
+		e.sub_to_gig_time,
 		e.notify_time
 		FROM wm_task t
 		LEFT JOIN wm_task_content c on t.task_content_id = c.id
@@ -125,6 +129,71 @@
 		<if test="query.settleNoteStatus != null">
 			AND e.settle_note_status = #{query.settleNoteStatus}
 		</if>
+		<if test="query.realName != null">
+			AND u.realname like concat('%',#{query.realName},'%')
+		</if>
+		<if test="settleStatusArr != null">
+			AND e.settle_note_status in
+			<foreach collection="settleStatusArr" item="settleStatus" index="index" open="(" close=")" separator=",">
+				#{settleStatus}
+			</foreach>
+		</if>
+		ORDER BY e.sub_time DESC, t.id
+	</select>
+
+	<!-- 结算包结算列表(分页) -->
+	<select id="getWmTaskForSettlePage2" resultType="com.qunzhixinxi.hnqz.admin.entity.output.WmTaskSettleNoteOutput">
+		SELECT
+		t.id,
+		t.task_type_id,
+		t.create_time,
+		t.score_package_id,
+		p.score_package_name,
+		t.task_user_id,
+		t.lookinto_date,
+		t.score,
+		u.realname real_name,
+		u.username,
+		e.id noteId,
+		e.invoice_type,
+		e.sub_type,
+		e.subject_location,
+		e.category_name,
+		e.discount,
+		e.stream_id,
+		e.settle_no,
+		e.settle_amount,
+		e.actual_amount,
+		e.settle_note_status,
+		e.sub_time,
+		e.sub_to_gig_time,
+		e.notify_time
+		FROM wm_task t
+		LEFT JOIN wm_score_package p on p.id = t.score_package_id
+		LEFT JOIN wm_score_package_settle_note e on t.id = e.task_id
+		LEFT JOIN sys_user u on t.task_user_id = u.user_id
+		WHERE 1= 1
+		<if test="query.userId!=null and query.userId!=''">
+			AND t.task_user_id =#{query.userId}
+		</if>
+		<if test="query.packageId!=null and query.packageId!=''">
+			AND t.score_package_id =#{query.packageId}
+		</if>
+		<if test="query.startSubTime != null and query.endSubTime != null">
+			AND e.sub_time BETWEEN #{query.startSubTime} AND #{query.endSubTime}
+		</if>
+		<if test="query.settleNoteStatus != null">
+			AND e.settle_note_status = #{query.settleNoteStatus}
+		</if>
+		<if test="query.realName != null">
+			AND u.realname like concat('%',#{query.realName},'%')
+		</if>
+		<if test="settleStatusArr != null">
+			AND e.settle_note_status in
+			<foreach collection="settleStatusArr" item="settleStatus" index="index" open="(" close=")" separator=",">
+				#{settleStatus}
+			</foreach>
+		</if>
 		ORDER BY e.sub_time DESC, t.id
 	</select>
 

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä