Browse Source

Merge branch 'feat-tasksubrule1'

# Conflicts:
#	hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
#	hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java
shc 1 year ago
parent
commit
531d5aaf6c
49 changed files with 3350 additions and 368 deletions
  1. 14 14
      db/v2.0/221109.sql
  2. 38 0
      hnqz-common/hnqz-common-core/src/main/java/com/qunzhixinxi/hnqz/common/core/entity/CommonColour.java
  3. 106 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysPortalConf.java
  4. 0 1
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmTaskSubmissionRule.java
  5. 8 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  6. 41 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysPortalConfController.java
  7. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeConfigController.java
  8. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java
  9. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaxHelperController.java
  10. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java
  11. 39 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/HanTangCertStatus.java
  12. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysDeptSubMapper.java
  13. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysPortalConfMapper.java
  14. 73 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeDictController.java
  15. 46 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeFileController.java
  16. 111 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeMedicineController.java
  17. 108 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTeamController.java
  18. 326 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTenantController.java
  19. 110 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeUserController.java
  20. 126 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeMedicineRequest.java
  21. 73 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTeamRequest.java
  22. 321 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTenantRequest.java
  23. 167 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeUserRequest.java
  24. 37 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeDictItemVO.java
  25. 88 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeMedicineVO.java
  26. 47 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTeamVO.java
  27. 80 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTenantVO.java
  28. 72 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTerminalVO.java
  29. 113 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeUserVO.java
  30. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeDictService.java
  31. 4 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeTenantService.java
  32. 25 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeUserService.java
  33. 28 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeDictServiceImpl.java
  34. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeTenantServiceImpl.java
  35. 40 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeUserServiceImpl.java
  36. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysPortalConfService.java
  37. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaDistributionService.java
  38. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaHospitalService.java
  39. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaPharmacyService.java
  40. 9 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskService.java
  41. 1 18
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmUserSignService.java
  42. 24 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysPortalConfServiceImpl.java
  43. 115 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaDistributionServiceImpl.java
  44. 117 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaHospitalServiceImpl.java
  45. 144 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaPharmacyServiceImpl.java
  46. 46 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java
  47. 514 330
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java
  48. 0 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptSubMapper.xml
  49. 61 0
      hnqz-upms/hnqz-upms-biz/src/test/java/com/qunzhixinxi/hnqz/admin/WmReportApprovalTest.java

+ 14 - 14
db/v2.0/221109.sql

@@ -20,19 +20,19 @@ create table if not exists medical_equipment
     comment '医疗器械';
 
 -- 新增任务类型手术跟台
-INSERT INTO hnqzx.wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (42, '手术跟台-一级', '1', 0, 500, 500, null, null, null, null, 0, '0', 1, '2022-11-07 16:52:06', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
-INSERT INTO hnqzx.wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (43, '手术跟台-二级', '1', 0, 1000, 1000, null, null, null, null, 0, '0', 1, '2022-11-07 16:52:06', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
-INSERT INTO hnqzx.wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (44, '手术跟台-三级', '1', 0, 2000, 2000, null, null, null, null, 0, '0', 1, '2022-11-07 17:15:55', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
+INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (42, '手术跟台-一级', '1', 0, 500, 500, null, null, null, null, 0, '0', 1, '2022-11-07 16:52:06', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
+INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (43, '手术跟台-二级', '1', 0, 1000, 1000, null, null, null, null, 0, '0', 1, '2022-11-07 16:52:06', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
+INSERT INTO wm_task_type (id, task_type_name, task_type_level, task_score_start, task_score_end, score, task_ent_id, durgent_id, level1_id, dept_id, del_flag, enable_flag, tenant_id, create_time, create_user, update_time, update_user, status, base_id, real_flag, rule_id, parent_id) VALUES (44, '手术跟台-三级', '1', 0, 2000, 2000, null, null, null, null, 0, '0', 1, '2022-11-07 17:15:55', null, '2022-11-07 16:44:22', null, 0, '专项服务', null, '1', 'p-17');
 
 -- 新增任务类型手术跟台-小程序页面字段配置
-INSERT INTO hnqzx.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 ('42', '42', 'temp32', '关联积分包', 1, 'domain', 1, 200, '', '', 'package_list', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp2', '手术名称', 2, 'text', 4, 50, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp4', '跟台时间', 5, 'datetime', 1, 200, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp31', '位置打卡', 6, 'map', 1, 200, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp6', '手术单/术前讨论会(1张)', 7, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp10', '跟台总结', 11, 'longtext', 5, 100, '', '', '', '0', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp7', '产品出库单(1张)', 8, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp12', '应用产品', 3, 'domain', 1, 200, null, '', 'medical_equipment_list', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp23', '跟台级别', 4, 'select', 1, 2, '', '', 'operating_heel_table_level', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp8', '现场照片(最少3张,需包含现场照片、医生照片)', 9, 'img', 3, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);
-INSERT INTO hnqzx.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 ('42', '42', 'temp9', '术后小结(1张,需包含对应产品列示)', 10, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp32', '关联积分包', 1, 'domain', 1, 200, '', '', 'package_list', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp2', '手术名称', 2, 'text', 4, 50, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp4', '跟台时间', 5, 'datetime', 1, 200, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp31', '位置打卡', 6, 'map', 1, 200, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp6', '手术单/术前讨论会(1张)', 7, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp10', '跟台总结', 11, 'longtext', 5, 100, '', '', '', '0', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp7', '产品出库单(1张)', 8, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp12', '应用产品', 3, 'domain', 1, 200, null, '', 'medical_equipment_list', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp23', '跟台级别', 4, 'select', 1, 2, '', '', 'operating_heel_table_level', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp8', '现场照片(最少3张,需包含现场照片、医生照片)', 9, 'img', 3, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', 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 ('42', '42', 'temp9', '术后小结(1张,需包含对应产品列示)', 10, 'img', 1, 5, '', '', '', '1', null, '0', '0', 1, '2022-11-07 17:28:54', null, '2022-11-07 17:28:54', null);

+ 38 - 0
hnqz-common/hnqz-common-core/src/main/java/com/qunzhixinxi/hnqz/common/core/entity/CommonColour.java

@@ -0,0 +1,38 @@
+package com.qunzhixinxi.hnqz.common.core.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 通用颜色
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:40
+ */
+@Data
+public class CommonColour implements Serializable {
+
+	private static final long serialVersionUID = 2309656570997581153L;
+
+	/**
+	 * r
+	 */
+	private Integer r;
+
+	/**
+	 * g
+	 */
+	private Integer g;
+
+	/**
+	 * b
+	 */
+	private Integer b;
+
+	/**
+	 * 十六进制
+	 */
+	private String hex;
+}

+ 106 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysPortalConf.java

@@ -0,0 +1,106 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.qunzhixinxi.hnqz.common.core.entity.CommonColour;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 门户配置信息
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:24
+ */
+@Data
+@TableName(value = "sys_portal_conf", autoResultMap = true)
+public class SysPortalConf implements Serializable {
+
+	private static final long serialVersionUID = 4526768420806607933L;
+	/**
+	 * 主键
+	 */
+	@TableId(type = IdType.AUTO)
+	private Long confId;
+
+	/**
+	 * 专属路径
+	 */
+	@TableField(value = "spec_path")
+	private String specialPath;
+
+	/**
+	 * logo
+	 */
+	private String portalLogo;
+
+	/**
+	 * icon
+	 */
+	private String portalIcon;
+
+	/**
+	 * title
+	 */
+	private String portalTitle;
+
+	/**
+	 * 名称
+	 */
+	private String portalName;
+
+	/**
+	 * 背景图
+	 */
+	@TableField(value = "bg_img")
+	private String backgroundImage;
+
+	/**
+	 * 主题色
+	 */
+	@TableField(typeHandler = JacksonTypeHandler.class)
+	private CommonColour themeColor;
+
+	/**
+	 * icp备案号
+	 */
+	@TableField(value = "icp_no")
+	private String icpNo;
+
+	/**
+	 * 公安备案号
+	 */
+	@TableField(value = "pc_no")
+	private String policeNo;
+
+	/**
+	 * 创建人
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	private String createdBy;
+
+	/**
+	 * 修改人
+	 */
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private String modifiedBy;
+
+	/**
+	 * 创建时间
+	 */
+	@TableField(fill = FieldFill.INSERT)
+	private LocalDateTime createdTime;
+
+	/**
+	 * 修改时间
+	 */
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private LocalDateTime modifiedTime;
+}

+ 0 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmTaskSubmissionRule.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.CommonFlag;
 import lombok.Data;

+ 8 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -1641,7 +1641,7 @@ public class ApiController {
 	 */
 	@SysLog("新增用户签到表")
 	@PostMapping("/saveSignInfo")
-	public R save(@RequestBody WmUserSign wmUserSign) {
+	public R<?> save(@RequestBody WmUserSign wmUserSign) {
 
 		// 重置打卡时间,以系统为准,规避端设备时间不准的问题
 		LocalDateTime now = LocalDateTime.now().plusMinutes(5L);
@@ -2705,8 +2705,10 @@ public class ApiController {
 	 * @return
 	 */
 	@GetMapping("/getH5To")
+	@SysLog("更新任务截图")
 	public R getH5To(String taskId) {
 		WmTask wmTask = wmTaskService.getById(taskId);
+		log.info("更新任务截图任务原数据:{}", wmTask);
 		if (null != wmTask) {
 			BufferedImage bufferedImage = null;
 			try {
@@ -2730,8 +2732,11 @@ public class ApiController {
 			}
 			InputStream inputStream = new ByteArrayInputStream(bs.toByteArray());
 			String path = sysFileService.uploadImgByByte(inputStream);
-			wmTask.setTaskInfoImg(path);
-			wmTaskService.updateById(wmTask);
+//			wmTask.setTaskInfoImg(path);
+			WmTask updateTask = new WmTask();
+			updateTask.setId(wmTask.getId());
+			updateTask.setTaskInfoImg(path);
+			wmTaskService.updateById(updateTask);
 		}
 		return R.ok();
 	}

+ 41 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysPortalConfController.java

@@ -0,0 +1,41 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysPortalConf;
+import com.qunzhixinxi.hnqz.admin.service.SysPortalConfService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 门户专属配置前端控制器
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:28
+ */
+@RestController
+@AllArgsConstructor
+public class SysPortalConfController {
+
+	private final SysPortalConfService portalConfService;
+
+	/**
+	 * 获取门户专属配置
+	 *
+	 * @param specialPath 专属路径
+	 * @return 专属配置
+	 */
+	@Inner(value = false)
+	@GetMapping(value = "/portal/conf")
+	public R<SysPortalConf> getPortalConf(@RequestParam(value = "specialPath") String specialPath) {
+
+		return R.ok(portalConfService.getOne(Wrappers.<SysPortalConf>lambdaQuery().eq(SysPortalConf::getSpecialPath, specialPath)));
+
+	}
+
+
+}

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeConfigController.java

@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.RestController;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -704,6 +704,7 @@ public class WmScorePackageController {
 			}
 
 		});
+
 		return R.ok(page1);
 	}
 

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaxHelperController.java

@@ -109,8 +109,8 @@ public class WmTaxHelperController {
 	private final WmScorePackageSettleNoteService settleNoteService;
 	private final SysDeptSubService sysDeptSubService;
 	private final PartyARetryService partyARetryService;
-	private final UserAgreementSignatureRecordMapper userAgreementSignatureRecordMapper;
 	private final UpmsConfig upmsConfig;
+	private final UserAgreementSignatureRecordMapper userAgreementSignatureRecordMapper;
 
 
 	/**

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPkgQuizRelation;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmPkgQuizRelation;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import io.swagger.annotations.ApiModel;

+ 39 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/HanTangCertStatus.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 HanTangCertStatus {
+
+	// 签约状态
+	UN_SIGN(0, "未签约"),
+	CERT(1, "已认证"),
+	SIGN(2, "已签约");
+
+	private final int code;
+
+	private final String message;
+
+	/**
+	 * 根据枚举编码获取枚举对象
+	 *
+	 * @param code 枚举编码
+	 * @return 如果存在返回枚举,否则返回 {@code null}
+	 */
+	public static HanTangCertStatus resolve(final int code) {
+		for (HanTangCertStatus certStatus : HanTangCertStatus.values()) {
+			if (certStatus.getCode() == code) {
+				return certStatus;
+			}
+		}
+		return UN_SIGN;
+
+	}
+}

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysDeptSubMapper.java

@@ -42,5 +42,6 @@ public interface SysDeptSubMapper extends BaseMapper<SysDeptSub> {
 
 	List<SettleAmountMonitorOutput> getYaoyiAmountMonitor(@Param("query") SettleAmountMonitorInput yaoyiMonitorInput);
 
+
 	List<SysEnterpriseServiceChargeVO> listSysEnterpriseServiceCharge(@Param("deptId") Integer deptId);
 }

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysPortalConfMapper.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysPortalConf;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 门户配置信息
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:29
+ */
+@Mapper
+public interface SysPortalConfMapper extends BaseMapper<SysPortalConf> {
+
+}
+
+
+
+

+ 73 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeDictController.java

@@ -0,0 +1,73 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeDictItemVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 字典管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/dict")
+public class OeDictController {
+
+    /**
+     * 通过字典标记查找字典
+     *
+     * @param symbol 字典标记
+     * @return 字典项
+     */
+    @GetMapping("/symbol/{symbol}")
+    public R<List<OeDictItemVO>> getDictBySymbol(@PathVariable("symbol") String symbol) {
+        List<OeDictItemVO> list = new ArrayList<>();
+        switch (symbol) {
+            case "tenant_level":
+                OeDictItemVO itemVO = OeDictItemVO.builder().build();
+                itemVO.setDictSymbol("tenant_level");
+                itemVO.setLabel("药企");
+                itemVO.setItemValue("ENT");
+                list.add(itemVO);
+                OeDictItemVO itemVO2 = OeDictItemVO.builder().build();
+                itemVO2.setDictSymbol("tenant_level");
+                itemVO2.setLabel("CSO");
+                itemVO2.setItemValue("CSO");
+                list.add(itemVO2);
+                OeDictItemVO itemVO3 = OeDictItemVO.builder().build();
+                itemVO3.setDictSymbol("tenant_level");
+                itemVO3.setLabel("终端");
+                itemVO3.setItemValue("TERMINAL");
+                list.add(itemVO3);
+                break;
+            case "loc_flag":
+                list.add(OeDictItemVO.builder().dictSymbol("loc_flag").label("启用").itemValue("OK").build());
+                list.add(OeDictItemVO.builder().dictSymbol("loc_flag").label("停用").itemValue("LOC").build());
+                break;
+            case "del_flag":
+                list.add(OeDictItemVO.builder().dictSymbol("del_flag").label("正常").itemValue("OK").build());
+                list.add(OeDictItemVO.builder().dictSymbol("del_flag").label("删除").itemValue("DEL").build());
+                break;
+            case "permissions":
+                list.add(OeDictItemVO.builder().dictSymbol("permissions").label("导出").itemValue("EXPORT").build());
+                break;
+            case "cso_type":
+                list.add(OeDictItemVO.builder().dictSymbol("cso_type").label("团队").itemValue("CSO_TEAM").build());
+                list.add(OeDictItemVO.builder().dictSymbol("cso_type").label("公司").itemValue("CSO_ENT").build());
+                break;
+            case "drug_type":
+                list.add(OeDictItemVO.builder().dictSymbol("drug_type").label("原研").itemValue("RLD").build());
+                list.add(OeDictItemVO.builder().dictSymbol("drug_type").label("仿制").itemValue("ANDA").build());
+                break;
+            default:
+        }
+
+        return R.ok(list);
+    }
+}

+ 46 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeFileController.java

@@ -0,0 +1,46 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * oe文件控制器
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/file")
+public class OeFileController {
+
+    /**
+     * 文件上传
+     *
+     * @param file 文件
+     * @return {@link R}<{@link Map}<{@link String}, {@link String}>>
+     */
+    @SysLog("OE文件上传")
+    @PostMapping("/upload")
+    public R<Map<String, String>> upload(@RequestParam("file") MultipartFile file) {
+        log.info("OE文件上传参数:name={},size={},content-type={}", file.getOriginalFilename(), file.getSize(), file.getContentType());
+
+        // TODO
+
+        Map<String, String> resultMap = new HashMap<>(3);
+        resultMap.put("bucketName", "wmkj");
+        resultMap.put("fileName", "1f537bfcb30647889d5746403b2ce661.png");
+        resultMap.put("url", "/admin/sys-file/wmkj/1f537bfcb30647889d5746403b2ce661.png");
+
+        return R.ok(resultMap);
+    }
+}

+ 111 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeMedicineController.java

@@ -0,0 +1,111 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.beust.jcommander.internal.Maps;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeMedicineRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeMedicineVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.extern.slf4j.Slf4j;
+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.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * oe药品管理控制器
+ *
+ * @author lixuesong
+ * @date 2023/08/07
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/medicine")
+public class OeMedicineController {
+
+    /**
+     * oe药品保存
+     *
+     * @param toSaveMedicine 保存参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("oe药品保存")
+    @PostMapping("/save")
+    public R<?> saveMedicine(@RequestBody OeMedicineRequest.ToSaveMedicine toSaveMedicine) {
+        log.info("oe药品保存参数:{}", toSaveMedicine);
+        // TODO
+        return R.ok();
+    }
+
+    /**
+     * oe药品更新
+     *
+     * @param toUpdateMedicine 保存参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("oe药品更新")
+    @PostMapping("/update")
+    public R<?> updateMedicine(@RequestBody OeMedicineRequest.ToUpdateMedicine toUpdateMedicine) {
+        log.info("oe药品更新参数:{}", toUpdateMedicine);
+        // TODO
+        return R.ok();
+    }
+
+    /**
+     * 推广药品列表
+     *
+     * @return {@link R}<{@link List}<{@link Map}<{@link String}, {@link String}>>>
+     */
+    @GetMapping("/list-tenant-medicine")
+    public R<List<Map<String, String>>> listTenantMedicine() {
+        List<Map<String, String>> list = new ArrayList<Map<String, String>>() {{
+            add(Maps.newHashMap("id", "1", "name", "药品1"));
+            add(Maps.newHashMap("id", "2", "name", "药品2"));
+            add(Maps.newHashMap("id", "3", "name", "药品3"));
+        }};
+
+        return R.ok(list);
+    }
+
+    /**
+     * 分页查询药品
+     *
+     * @param page                 分页参数
+     * @param name                 名称
+     * @param commonName           通用名称
+     * @param productionEnterprise 生产企业
+     * @return {@link R}<{@link IPage}<{@link String}>>
+     */
+    @GetMapping("/page-medicine")
+    public R<IPage<OeMedicineVO>> pageMedicine(Page<OeMedicineVO> page, String name, String commonName, String productionEnterprise) {
+        int total = 20;
+        List<OeMedicineVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeMedicineVO vo = new OeMedicineVO();
+            vo.setId((long) i);
+            vo.setName("商品名"+i);
+            vo.setCommonName("通用名"+i);
+            vo.setMah("上市许可持有人");
+            vo.setProductionEnterprise("生产企业"+i);
+            vo.setPromotedBusinessStatistics(10);
+            vo.setMedicalInsurance(i%2==0 ? Boolean.TRUE : Boolean.FALSE);
+            vo.setDosageForm(i%2==0 ?"片剂" : "注射液");
+            vo.setSpecification("0.1g");
+            vo.setDrugType(i%2==0 ? "ANDA" : "RLD");
+            vo.setDrugTypeName(i%2==0 ? "仿制" : "原研");
+            list.add(vo);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+}

+ 108 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTeamController.java

@@ -0,0 +1,108 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.beust.jcommander.internal.Maps;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeTeamRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeTenantRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeTeamVO;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeTenantVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import lombok.extern.slf4j.Slf4j;
+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.RestController;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * oe团队管理控制器
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/team")
+public class OeTeamController {
+
+    /**
+     * 分页查询团队
+     *
+     * @param page 分页参数
+     * @return {@link R}<{@link IPage}<{@link OeTeamVO}>>
+     */
+    @GetMapping("/page")
+    public R<IPage<OeTeamVO>> pageTeam(Page<OeTeamVO> page) {
+        int total = 20;
+        List<OeTeamVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTeamVO vo = new OeTeamVO();
+            vo.setId((long) i);
+            vo.setName("测试团队"+i);
+            vo.setLeaderName(new String[]{"负责人1", "负责人2"});
+            vo.setLeader(new Long[]{1L, 2L});
+            vo.setMemberName(new String[]{"成员1", "成员2"});
+            vo.setMember(new Long[]{1L, 2L});
+            list.add(vo);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+    /**
+     * 查询团队列表
+     *
+     * @return {@link R}<{@link List}<{@link OeTeamVO}>>
+     */
+    @GetMapping("/list")
+    public R<List<Map<String, Object>>> listTeam() {
+        int total = 5;
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (int i = 0; i < total; i++) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", "测试团队"+i);
+            map.put("id", (long) i);
+            list.add(map);
+        }
+
+        return R.ok(list);
+    }
+
+    /**
+     * 保存团队
+     *
+     * @param toSave 保存参数
+     * @return {@link R}<{@link Boolean}>
+     */
+    @PostMapping("/save")
+    public R<Boolean> saveTeam(@RequestBody OeTeamRequest.ToSave toSave) {
+        log.info("oe保存团队参数:{}", toSave);
+
+        return R.ok(Boolean.TRUE);
+    }
+
+    /**
+     * 更新团队
+     *
+     * @param toUpdate 更新
+     * @return {@link R}<{@link Boolean}>
+     */
+    @PostMapping("/update")
+    public R<Boolean> updateTeam(@RequestBody OeTeamRequest.ToUpdate toUpdate) {
+        log.info("更新团队参数:{}", toUpdate);
+
+        return R.ok(Boolean.TRUE);
+    }
+}

+ 326 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTenantController.java

@@ -0,0 +1,326 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeTenantVO;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeTenantRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeTerminalVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.extern.slf4j.Slf4j;
+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.RestController;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 租户管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/tenant")
+public class OeTenantController {
+
+    /**
+     * 保存药企信息
+     *
+     * @param toSaveDrugCompany 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE保存药企信息")
+    @PostMapping("/drug-company/save")
+    public R<?> saveDrugCompany(@RequestBody OeTenantRequest.ToSaveDrugCompany toSaveDrugCompany) {
+        log.info("OE保存药企信息参数:{}", toSaveDrugCompany);
+        return R.ok();
+    }
+
+    /**
+     * 更新药企信息
+     *
+     * @param toUpdateDrugCompany 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE更新药企信息")
+    @PostMapping("/drug-company/update")
+    public R<?> updateDrugCompany(@RequestBody OeTenantRequest.ToUpdateDrugCompany toUpdateDrugCompany) {
+        log.info("OE更新药企信息参数:{}", toUpdateDrugCompany);
+        return R.ok();
+    }
+
+    /**
+     * 启用/停用药企/代理商/终端
+     *
+     * @param toLockUnlock 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE启用/停用药企/代理商/终端")
+    @PostMapping("/lock-unlock")
+    public R<?> updateLockUnlock(@RequestBody OeTenantRequest.ToLockUnlock toLockUnlock) {
+        log.info("OE启用/停用tenant参数:{}", toLockUnlock);
+        return R.ok();
+    }
+
+    /**
+     * 保存代理商信息
+     *
+     * @param toSaveCso 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE保存代理商信息")
+    @PostMapping("/cso/save")
+    public R<?> saveCso(@RequestBody OeTenantRequest.ToSaveCso toSaveCso) {
+        log.info("OE保存代理商信息参数:{}", toSaveCso);
+        return R.ok();
+    }
+
+    /**
+     * 更新代理商信息
+     *
+     * @param toUpdateCso 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE更新代理商信息")
+    @PostMapping("/cso/update")
+    public R<?> saveCso(@RequestBody OeTenantRequest.ToUpdateCso toUpdateCso) {
+        log.info("OE更新代理商信息参数:{}", toUpdateCso);
+        return R.ok();
+    }
+
+
+    /**
+     * 保存终端
+     *
+     * @param toSaveTerminal 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE保存终端信息")
+    @PostMapping("/terminal/save")
+    public R<?> saveTerminal(@RequestBody OeTenantRequest.ToSaveTerminal toSaveTerminal) {
+        log.info("OE保存终端信息参数:{}", toSaveTerminal);
+        return R.ok();
+    }
+
+    /**
+     * 更新终端
+     *
+     * @param toUpdateTerminal 参数
+     * @return {@link R}<{@link ?}>
+     */
+    @SysLog("OE更新终端信息")
+    @PostMapping("/terminal/update")
+    public R<?> saveTerminal(@RequestBody OeTenantRequest.ToUpdateTerminal toUpdateTerminal) {
+        log.info("OE更新终端信息参数:{}", toUpdateTerminal);
+        return R.ok();
+    }
+
+    /**
+     * 药企分页查询
+     *
+     * @param page 分页参数
+     * @param name 药企名称
+     * @param code 统一社会信用代码
+     * @return 分页结果
+     */
+    @GetMapping("/page-drug-company")
+    public R<IPage<OeTenantVO>> pageDrugCompany(Page<OeTenantVO> page, String name, String code) {
+        int total = 20;
+        List<OeTenantVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTenantVO oeTenantVO = new OeTenantVO();
+            oeTenantVO.setTenantId((long) i);
+            oeTenantVO.setCode("123456789123456");
+            oeTenantVO.setName("测试药企" + (i));
+            oeTenantVO.setLevelName("药企");
+            oeTenantVO.setPermissions(new String[]{"导出"});
+            oeTenantVO.setSettleChannels(new String[]{"中智","正启之星"});
+            oeTenantVO.setDelFlagName("启用");
+            oeTenantVO.setCreatedTime(LocalDateTime.now());
+            oeTenantVO.setModifiedTime(LocalDateTime.now());
+            oeTenantVO.setDelFlag("OK");
+            oeTenantVO.setDelFlagName("正常");
+            oeTenantVO.setLocFlag("OK");
+            oeTenantVO.setLocFlagName("正常");
+            list.add(oeTenantVO);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+    /**
+     * 药企查询
+     *
+     * @return {@link R}<{@link List}<{@link Map}<{@link String}, {@link String}>>>
+     */
+    @GetMapping("/list-drug-company")
+    public R<List<Map<String, Object>>> listDrugCompany() {
+        int total = 20;
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (int i = 0; i < total; i++) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", "测试药企" + (i));
+            map.put("tenantId", (long) i);
+            list.add(map);
+        }
+
+        return R.ok(list);
+    }
+
+    /**
+     * CSO分页查询
+     *
+     * @param page 分页参数
+     * @param name 药企名称
+     * @param code 统一社会信用代码
+     * @return 分页结果
+     */
+    @GetMapping("/page-cso")
+    public R<IPage<OeTenantVO>> pageCso(Page<OeTenantVO> page, String name, String code) {
+        int total = 20;
+        List<OeTenantVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTenantVO oeTenantVO = new OeTenantVO();
+            oeTenantVO.setTenantId((long) i);
+            oeTenantVO.setCode("123456789123456");
+            oeTenantVO.setName("测试代理商" + (i));
+            oeTenantVO.setLevelName("CSO");
+            oeTenantVO.setPermissions(new String[]{"导出"});
+            oeTenantVO.setSettleChannels(new String[]{"中智","正启之星"});
+            oeTenantVO.setDelFlagName("启用");
+            oeTenantVO.setCreatedTime(LocalDateTime.now());
+            oeTenantVO.setModifiedTime(LocalDateTime.now());
+            oeTenantVO.setDelFlag("OK");
+            oeTenantVO.setDelFlagName("正常");
+            oeTenantVO.setLocFlag("OK");
+            oeTenantVO.setLocFlagName("正常");
+            list.add(oeTenantVO);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+    /**
+     * CSO分页查询-用于药企
+     *
+     * @param page 分页参数
+     * @param name 药企名称
+     * @param code 统一社会信用代码
+     * @return 分页结果
+     */
+    @GetMapping("/page-cso-for-dept")
+    public R<IPage<OeTenantVO>> pageCsoForDept(Page<OeTenantVO> page, String name, String code, String drugCompanyName) {
+        // 企业的权限 TODO
+
+        int total = 10;
+        List<OeTenantVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTenantVO oeTenantVO = new OeTenantVO();
+            oeTenantVO.setTenantId((long) i);
+            oeTenantVO.setCode("123456789123456");
+            oeTenantVO.setName("测试代理商" + (i));
+            oeTenantVO.setLevelName("CSO");
+            oeTenantVO.setPermissions(new String[]{"导出"});
+            oeTenantVO.setSettleChannels(new String[]{"中智","正启之星"});
+            oeTenantVO.setDelFlagName("启用");
+            oeTenantVO.setCreatedTime(LocalDateTime.now());
+            oeTenantVO.setModifiedTime(LocalDateTime.now());
+            oeTenantVO.setDelFlag("OK");
+            oeTenantVO.setDelFlagName("正常");
+            oeTenantVO.setLocFlag("OK");
+            oeTenantVO.setLocFlagName("正常");
+            list.add(oeTenantVO);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+    /**
+     * 终端分页查询(平台)
+     *
+     * @param page 分页参数
+     * @param name 药企名称
+     * @param code 统一社会信用代码
+     * @return 分页结果
+     */
+    @GetMapping("/page-terminal")
+    public R<IPage<OeTenantVO>> pageTerminal(Page<OeTenantVO> page, String name, String code) {
+        int total = 20;
+        List<OeTenantVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTenantVO oeTenantVO = new OeTenantVO();
+            oeTenantVO.setTenantId((long) i);
+            oeTenantVO.setCode("123456789123456");
+            oeTenantVO.setName("测试终端" + (i));
+            oeTenantVO.setLevelName("CSO");
+            oeTenantVO.setPermissions(new String[]{"导出"});
+            oeTenantVO.setSettleChannels(new String[]{"中智","正启之星"});
+            oeTenantVO.setDelFlagName("启用");
+            oeTenantVO.setCreatedTime(LocalDateTime.now());
+            oeTenantVO.setModifiedTime(LocalDateTime.now());
+            oeTenantVO.setDelFlag("OK");
+            oeTenantVO.setDelFlagName("正常");
+            oeTenantVO.setLocFlag("OK");
+            oeTenantVO.setLocFlagName("正常");
+            list.add(oeTenantVO);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+    /**
+     * 终端分页查询(药企)
+     *
+     * @param page 分页参数
+     * @param name 药企名称
+     * @param code 统一社会信用代码
+     * @return 分页结果
+     */
+    @GetMapping("/page-terminal-for-dept")
+    public R<IPage<OeTerminalVO>> pageTerminalForDept(Page<OeTerminalVO> page, String name, String code) {
+        int total = 10;
+        List<OeTerminalVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeTerminalVO vo = new OeTerminalVO();
+            vo.setName(name);
+            vo.setCode("123456789123456");
+            vo.setTenantId((long) i);
+            vo.setServedCsoTenantId(12312L);
+            vo.setServedCsoName("代理商123");
+            vo.setServedDrugCompanyTenantId(23423L);
+            vo.setServedDrugCompanyName("药企234");
+            vo.setDrugCompanyApprovalStatus(i/2==0 ? "REJECT" : "PASS");
+            vo.setDrugCompanyApprovalStatusName(i/2==0 ? "审核不通过" : "通过");
+            vo.setCsoApprovalStatus("PASS");
+            vo.setCsoApprovalStatusName("审核通过");
+            list.add(vo);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+}

+ 110 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeUserController.java

@@ -0,0 +1,110 @@
+package com.qunzhixinxi.hnqz.admin.oe.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeUserRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeUserVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+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.RestController;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * oe用户管理控制器
+ *
+ * @author lixuesong
+ * @date 2023/08/07
+ */
+@Slf4j
+@RestController
+@RequestMapping("/oe/user")
+public class OeUserController {
+
+    /**
+     * 保存用户
+     *
+     * @param toSave 保存参数
+     * @return {@link R}<{@link Boolean}>
+     */
+    @SysLog("OE保存用户")
+    @PostMapping("/save")
+    public R<Boolean> saveUser(@RequestBody @Validated OeUserRequest.ToSave toSave) {
+        log.info("OE保存用户参数:{}", toSave);
+        return R.ok(Boolean.TRUE);
+    }
+
+    /**
+     * 更新用户
+     *
+     * @param toUpdate 保存参数
+     * @return {@link R}<{@link Boolean}>
+     */
+    @SysLog("OE更新用户")
+    @PostMapping("/update")
+    public R<Boolean> updateUser(@RequestBody @Validated OeUserRequest.ToUpdate toUpdate) {
+        log.info("OE更新用户参数:{}", toUpdate);
+        return R.ok(Boolean.TRUE);
+    }
+
+    /**
+     * 删除用户
+     *
+     * @param userId 用户id
+     * @return {@link R}<{@link Boolean}>
+     */
+    @SysLog("OE删除用户")
+    @PostMapping("/delete/{userId}")
+    public R<Boolean> deleteUser(@PathVariable("userId") Long userId) {
+        return R.ok(Boolean.TRUE);
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param page   分页参数
+     * @param toPage 查询参数
+     * @return {@link R}<{@link IPage}<{@link OeUserVO}>>
+     */
+    @GetMapping("/page")
+    public R<IPage<OeUserVO>> pageUser(Page<OeUserVO> page, OeUserRequest.ToPage toPage) {
+        int total = 20;
+        List<OeUserVO> list = new ArrayList<>();
+        for (int i = Math.toIntExact(page.getCurrent()); i <= page.getSize() && i <= total; i++) {
+            OeUserVO vo = new OeUserVO();
+            vo.setUserId((long) i);
+            vo.setUsername("user"+i);
+            vo.setNickname("昵称"+i);
+            vo.setRealName("姓名"+i);
+            vo.setPhone("13800138000");
+            vo.setAvatar("https://pre.yaoyi.net/images/logo.jpg");
+            vo.setDeptId(1L);
+            vo.setTenantId(1L);
+            vo.setEmail("123456@qq.com");
+            vo.setDelFlag("OK");
+            vo.setLockFlag("OK");
+            vo.setCreatedBy("admin");
+            vo.setModifiedBy("admin");
+            vo.setCreatedTime(LocalDateTime.now());
+            vo.setModifiedTime(LocalDateTime.now());
+
+            list.add(vo);
+        }
+
+        page.setRecords(list);
+        page.setTotal(total);
+        page.setPages((total + page.getSize() - 1) / page.getSize());
+
+        return R.ok(page);
+    }
+
+}

+ 126 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeMedicineRequest.java

@@ -0,0 +1,126 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+public class OeMedicineRequest {
+
+    /**
+     * oe药品保存参数
+     */
+    @Data
+    public static class ToSaveMedicine implements Serializable {
+        private static final long serialVersionUID = 498425117146760393L;
+
+        /**
+         * 药品名称
+         */
+        private String name;
+
+        /**
+         * 通用名称
+         */
+        private String commonName;
+
+        /**
+         * 上市许可持有人
+         */
+        private String mah;
+
+        /**
+         * 生产企业
+         */
+        private String productionEnterprise;
+
+        /**
+         * 推广企业统计
+         */
+        private Integer promotedBusinessStatistics;
+
+        /**
+         * 是否全国医保
+         */
+        private Boolean medicalInsurance;
+
+        /**
+         * 剂型
+         */
+        private String dosageForm;
+
+        /**
+         * 规格
+         */
+        private String specification;
+
+        /**
+         * 原研/仿制药
+         */
+        private String drugType;
+
+        /**
+         * 备注
+         */
+        private String remark;
+
+    }
+
+    /**
+     * oe药品更新参数
+     */
+    @Data
+    public static class ToUpdateMedicine implements Serializable {
+        private static final long serialVersionUID = -3961892156546807439L;
+
+        /**
+         * 药品名称
+         */
+        private String name;
+
+        /**
+         * 通用名称
+         */
+        private String commonName;
+
+        /**
+         * 上市许可持有人
+         */
+        private String mah;
+
+        /**
+         * 生产企业
+         */
+        private String productionEnterprise;
+
+        /**
+         * 推广企业统计
+         */
+        private Integer promotedBusinessStatistics;
+
+        /**
+         * 是否全国医保
+         */
+        private Boolean medicalInsurance;
+
+        /**
+         * 剂型
+         */
+        private String dosageForm;
+
+        /**
+         * 规格
+         */
+        private String specification;
+
+        /**
+         * 原研/仿制药
+         */
+        private String drugType;
+
+        /**
+         * 备注
+         */
+        private String remark;
+
+    }
+}

+ 73 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTeamRequest.java

@@ -0,0 +1,73 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * oe团队请求
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+public class OeTeamRequest {
+
+    /**
+     * 保存团队参数
+     *
+     * @author lixuesong
+     * @date 2023/08/08
+     */
+    @Data
+    public static class ToSave implements Serializable {
+
+        private static final long serialVersionUID = 8449495175671168735L;
+
+        /**
+         * 团队名称
+         */
+        private String name;
+
+        /**
+         * 团队负责人
+         */
+        private Long[] leader;
+
+        /**
+         * 团队成员
+         */
+        private Long[] member;
+    }
+
+    /**
+     * 更新团队参数
+     *
+     * @author lixuesong
+     * @date 2023/08/08
+     */
+    @Data
+    public static class ToUpdate implements Serializable {
+
+        private static final long serialVersionUID = 6010813670149051628L;
+
+        /**
+         * 主键id
+         */
+        private Long id;
+
+        /**
+         * 团队名称
+         */
+        private String name;
+
+        /**
+         * 团队负责人
+         */
+        private Long[] leader;
+
+        /**
+         * 团队成员
+         */
+        private Long[] member;
+    }
+}

+ 321 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTenantRequest.java

@@ -0,0 +1,321 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+
+/**
+ * oe租户请求
+ *
+ * @author lixuesong
+ * @date 2023/08/04
+ */
+public class OeTenantRequest {
+
+    /**
+     * 保存药企信息
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToSaveDrugCompany implements Serializable {
+        private static final long serialVersionUID = -2731914147485157197L;
+
+        /**
+         * 企业名称
+         */
+        private String name;
+
+        /**
+         * 统一社会信用代码
+         */
+        private String code;
+
+        /**
+         * 权限限制
+         */
+        private String[] permissions;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        private String locFlag;
+    }
+
+    /**
+     * 更新药企信息
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToUpdateDrugCompany implements Serializable {
+        private static final long serialVersionUID = -8743428178584985176L;
+
+        /**
+         * 租户id
+         */
+        private Long tenantId;
+
+        /**
+         * 企业名称
+         */
+        private String name;
+
+        /**
+         * 统一社会信用代码
+         */
+        private String code;
+
+        /**
+         * 权限限制
+         */
+        private String[] permissions;
+
+        /**
+         * 锁定标记
+         */
+        private String locFlag;
+    }
+
+    /**
+     * 启用/停用药企
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToLockUnlock implements Serializable {
+
+        private static final long serialVersionUID = -5033454666284018069L;
+
+        /**
+         * 租户id
+         */
+        @NotNull(message = "主键ID必填")
+        private Long tenantId;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        @NotBlank(message = "锁定标记必填")
+        private String locFlag;
+    }
+
+    /**
+     * 保存代理商
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToSaveCso implements Serializable {
+        private static final long serialVersionUID = -3930419806595107388L;
+        
+        /**
+         * 企业名称
+         */
+        private String name;
+
+        /**
+         * 统一社会信用代码/身份证号
+         */
+        private String code;
+
+        /**
+         * 代理商类型
+         */
+        private String csoType;
+
+        /**
+         * 推广药品
+         */
+        private Long medicineId;
+
+        /**
+         * 营业执照
+         */
+        private String[] licenseUrl;
+
+        /**
+         * 社保缴纳证明
+         */
+        private String[] socialSecurityUrl;
+
+        /**
+         * 身份证正面url
+         */
+        private String idCardFrontUrl;
+
+        /**
+         * 身份证反面url
+         */
+        private String idCardBackUrl;
+
+        /**
+         * 身份证手持url
+         */
+        private String idCardHoldingUrl;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        private String locFlag;
+    }
+
+    /**
+     * 更新代理商
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToUpdateCso implements Serializable {
+        private static final long serialVersionUID = 6561938432965789032L;
+
+        /**
+         * 租户id
+         */
+        private Long tenantId;
+
+        /**
+         * 企业名称
+         */
+        private String name;
+
+        /**
+         * 统一社会信用代码/身份证号
+         */
+        private String code;
+
+        /**
+         * 代理商类型
+         */
+        private String csoType;
+
+        /**
+         * 推广药品
+         */
+        private Long medicineId;
+
+        /**
+         * 营业执照
+         */
+        private String[] licenseUrl;
+
+        /**
+         * 社保缴纳证明
+         */
+        private String[] socialSecurityUrl;
+
+        /**
+         * 身份证正面url
+         */
+        private String idCardFrontUrl;
+
+        /**
+         * 身份证反面url
+         */
+        private String idCardBackUrl;
+
+        /**
+         * 身份证手持url
+         */
+        private String idCardHoldingUrl;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        private String locFlag;
+    }
+
+    /**
+     * 保存终端参数
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToSaveTerminal implements Serializable {
+        private static final long serialVersionUID = 3015462481533357880L;
+
+        /**
+         * 企业名称
+         */
+        @NotBlank(message = "企业名称必填")
+        private String name;
+
+        /**
+         * 统一社会信用代码
+         */
+        @NotBlank(message = "统一社会信用代码必填")
+        private String code;
+
+        /**
+         * 推广药品
+         */
+        private Long medicineId;
+
+        /**
+         * 营业执照
+         */
+        private String[] licenseUrl;
+
+        /**
+         * 社保缴纳证明
+         */
+        private String[] socialSecurityUrl;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        private String locFlag;
+    }
+
+    /**
+     * 保存终端参数
+     *
+     * @author lixuesong
+     * @date 2023/08/04
+     */
+    @Data
+    public static class ToUpdateTerminal implements Serializable {
+        private static final long serialVersionUID = -1539062519797105804L;
+
+        /**
+         * 企业名称
+         */
+        @NotBlank(message = "企业名称必填")
+        private String name;
+
+        /**
+         * 统一社会信用代码
+         */
+        @NotBlank(message = "统一社会信用代码必填")
+        private String code;
+
+        /**
+         * 推广药品
+         */
+        private Long medicineId;
+
+        /**
+         * 营业执照
+         */
+        private String[] licenseUrl;
+
+        /**
+         * 社保缴纳证明
+         */
+        private String[] socialSecurityUrl;
+
+        /**
+         * 锁定标记(OK-正常,LOC-已锁定)
+         */
+        private String locFlag;
+    }
+}

+ 167 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeUserRequest.java

@@ -0,0 +1,167 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * oe用户请求
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+
+public class OeUserRequest {
+
+    /**
+     * 保存参数
+     *
+     * @author lixuesong
+     * @date 2023/08/08
+     */
+
+    @Data
+    public static class ToSave implements Serializable {
+
+        private static final long serialVersionUID = 8049239105004782547L;
+
+        /**
+         * 用户名
+         */
+        @NotBlank(message = "手机号必填")
+        private String username;
+
+        /**
+         * 姓名
+         */
+        @NotBlank(message = "承接方必填")
+        private String realName;
+
+        /**
+         * 身份证号
+         */
+        private String idCardNumber;
+
+        /**
+         * 角色id
+         */
+        @NotNull(message = "角色必填")
+        private Long roleId;
+
+        /**
+         * 省
+         */
+        private String province;
+
+        /**
+         * 省编码
+         */
+        private String provinceCode;
+
+        /**
+         * 市
+         */
+        private String city;
+
+        /**
+         * 市编码
+         */
+        private String cityCode;
+
+    }
+
+    /**
+     * 更新参数
+     *
+     * @author lixuesong
+     * @date 2023/08/08
+     */
+
+    @Data
+    public static class ToUpdate implements Serializable {
+
+        private static final long serialVersionUID = 1588035989045460863L;
+
+        /**
+         * 主键id
+         */
+        @NotNull(message = "用户id必填")
+        private Long userId;
+
+        /**
+         * 姓名
+         */
+        private String realName;
+
+        /**
+         * 身份证号
+         */
+        private String idCardNumber;
+
+        /**
+         * 角色id
+         */
+        @NotNull(message = "角色必填")
+        private Long roleId;
+
+        /**
+         * 省
+         */
+        private String province;
+
+        /**
+         * 省编码
+         */
+        private String provinceCode;
+
+        /**
+         * 市
+         */
+        private String city;
+
+        /**
+         * 市编码
+         */
+        private String cityCode;
+
+    }
+
+    /**
+     * 分页参数
+     *
+     * @author lixuesong
+     * @date 2023/08/08
+     */
+    @Data
+    public static class ToPage implements Serializable {
+
+        private static final long serialVersionUID = -3670005114779918409L;
+
+        /**
+         * 承接方
+         */
+        private String realName;
+
+        /**
+         * 派工方
+         */
+        private String tenantName;
+
+        /**
+         * 手机号
+         */
+        private String phone;
+
+        /**
+         * 角色id
+         */
+        private Long roleId;
+
+        /**
+         * 启用状态
+         */
+        private String lockFlag;
+    }
+}

+ 37 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeDictItemVO.java

@@ -0,0 +1,37 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Builder
+@Data
+public class OeDictItemVO implements Serializable {
+    private static final long serialVersionUID = 1779251692675598313L;
+
+    /**
+     * 所属字典类id
+     */
+    private Long dictId;
+
+    /**
+     * 数据值
+     */
+    private String itemValue;
+
+    /**
+     * 标签名
+     */
+    private String label;
+
+    /**
+     * 类型
+     */
+    private String dictSymbol;
+
+    /**
+     * 描述
+     */
+    private String description;
+}

+ 88 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeMedicineVO.java

@@ -0,0 +1,88 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * oe药品
+ *
+ * @author lixuesong
+ * @date 2023/08/07
+ */
+@Data
+public class OeMedicineVO implements Serializable {
+
+    private static final long serialVersionUID = -6120119934476311908L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 药品名称
+     */
+    private String name;
+
+    /**
+     * 通用名称
+     */
+    private String commonName;
+
+    /**
+     * 上市许可持有人
+     */
+    private String mah;
+
+    /**
+     * 生产企业
+     */
+    private String productionEnterprise;
+
+    /**
+     * 推广企业统计
+     */
+    private Integer promotedBusinessStatistics;
+
+    /**
+     * 是否全国医保
+     */
+    private Boolean medicalInsurance;
+
+    /**
+     * 剂型
+     */
+    private String dosageForm;
+
+    /**
+     * 规格
+     */
+    private String specification;
+
+    /**
+     * 原研/仿制药类型
+     */
+    private String drugType;
+
+    /**
+     * 原研/仿制药类型名称
+     */
+    private String drugTypeName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime modifiedTime;
+}

+ 47 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTeamVO.java

@@ -0,0 +1,47 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * oe团队管理VO
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Data
+public class OeTeamVO implements Serializable {
+
+    private static final long serialVersionUID = -8166723468956394406L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 团队名称
+     */
+    private String name;
+
+    /**
+     * 团队负责人
+     */
+    private Long[] leader;
+
+    /**
+     * 团队负责人名称
+     */
+    private String[] leaderName;
+
+    /**
+     * 团队成员
+     */
+    private Long[] member;
+
+    /**
+     * 团队成员名称
+     */
+    private String[] memberName;
+}

+ 80 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTenantVO.java

@@ -0,0 +1,80 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 租户VO
+ */
+@Data
+public class OeTenantVO implements Serializable {
+
+    private static final long serialVersionUID = -8127002006960529514L;
+
+    /**
+     * 租户id
+     */
+    private Long tenantId;
+
+    /**
+     * 租户名称
+     */
+    private String name;
+
+    /**
+     * 租户编号
+     */
+    private String code;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 等级名称
+     */
+    private String levelName;
+
+    /**
+     * 权限限制
+     */
+    private String[] permissions;
+
+    /**
+     * 结算渠道
+     */
+    private String[] settleChannels;
+
+    /**
+     * 删除标记(OK-正常,DEL-已删除)
+     */
+    private String delFlag;
+
+    /**
+     * 删除标记名称
+     */
+    private String delFlagName;
+
+    /**
+     * 锁定标记(OK-正常,LOC-已锁定)
+     */
+    private String locFlag;
+
+    /**
+     * 锁定标记名称
+     */
+    private String locFlagName;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime modifiedTime;
+}

+ 72 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTerminalVO.java

@@ -0,0 +1,72 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * oe终端VO
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Data
+public class OeTerminalVO implements Serializable {
+
+    private static final long serialVersionUID = 7128806313743294064L;
+
+    /**
+     * 租户id
+     */
+    private Long tenantId;
+
+    /**
+     * 企业名称
+     */
+    private String name;
+
+    /**
+     * 统一社会信用代码
+     */
+    private String code;
+
+    /**
+     * 服务药企tenantId
+     */
+    private Long servedDrugCompanyTenantId;
+
+    /**
+     * 服务药企名称
+     */
+    private String servedDrugCompanyName;
+
+    /**
+     * 服务代理商tenantId
+     */
+    private Long servedCsoTenantId;
+
+    /**
+     * 服务代理商名称
+     */
+    private String servedCsoName;
+
+    /**
+     * 药企审核状态(PASS-通过,REJECT-拒绝,PENDING-未审核)
+     */
+    private String drugCompanyApprovalStatus;
+
+    /**
+     * 药企审核状态名称
+     */
+    private String drugCompanyApprovalStatusName;
+
+    /**
+     * 代理商审核状态(PASS-通过,REJECT-拒绝,PENDING-未审核)
+     */
+    private String csoApprovalStatus;
+
+    /**
+     * 代理商审核状态名称
+     */
+    private String csoApprovalStatusName;
+}

+ 113 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeUserVO.java

@@ -0,0 +1,113 @@
+package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * oe用户VO
+ *
+ * @author lixuesong
+ * @date 2023/08/07
+ */
+@Data
+public class OeUserVO implements Serializable {
+    private static final long serialVersionUID = 1389173392702921120L;
+
+    /**
+     * 主键ID
+     */
+    private Long userId;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 昵称
+     */
+    private String nickname;
+
+    /**
+     * 姓名
+     */
+    private String realName;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Long tenantId;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 省
+     */
+    private String province;
+
+    /**
+     * 省编码
+     */
+    private String provinceCode;
+
+    /**
+     * 市
+     */
+    private String city;
+
+    /**
+     * 市编码
+     */
+    private String cityCode;
+
+    /**
+     * 删除标记(OK-正常,DEL-已删除)
+     */
+    private String delFlag;
+
+    /**
+     * 锁定标记(OK-正常,LOC-已锁定)
+     */
+    private String lockFlag;
+
+    /**
+     * 创建人
+     */
+    private String createdBy;
+
+    /**
+     * 修改人
+     */
+    private String modifiedBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime modifiedTime;
+}

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeDictService.java

@@ -0,0 +1,10 @@
+package com.qunzhixinxi.hnqz.admin.oe.service;
+
+/**
+ * oe字典服务
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+public interface OeDictService {
+}

+ 4 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeTenantService.java

@@ -0,0 +1,4 @@
+package com.qunzhixinxi.hnqz.admin.oe.service;
+
+public interface OeTenantService {
+}

+ 25 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeUserService.java

@@ -0,0 +1,25 @@
+package com.qunzhixinxi.hnqz.admin.oe.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeUserRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeUserVO;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+
+/**
+ * oe用户服务
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+public interface OeUserService {
+
+    /**
+     * 分页查询
+     *
+     * @param page   分页参数
+     * @param toPage 查询参数
+     * @return {@link IPage}<{@link OeUserVO}>
+     */
+    IPage<OeUserVO> pageUser(Page<OeUserVO> page, OeUserRequest.ToPage toPage);
+}

+ 28 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeDictServiceImpl.java

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.admin.oe.service.impl;
+
+import com.qunzhixinxi.hnqz.admin.oe.service.OeDictService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * oe字典服务
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Slf4j
+@Service
+public class OeDictServiceImpl implements OeDictService {
+
+//    private DictService dictService;
+//
+//    @PostConstruct
+//    public void init() {
+//        YaoyicloudConfig config = new YaoyicloudConfig.Builder().secretId("admin").secretKey("123456").terminalType(TerminalType.YYC_CSO).build();
+//        dictService = new DictService.Builder().hostName(HostName.PROD).config(config).build();
+//    }
+//
+//    public List<OeDictItemVO> getDictBySymbol() {
+//        dictService.getDictItemById()
+//    }
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeTenantServiceImpl.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.oe.service.impl;
+
+import com.qunzhixinxi.hnqz.admin.oe.service.OeTenantService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 租户服务层
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class OeTenantServiceImpl implements OeTenantService {
+}

+ 40 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeUserServiceImpl.java

@@ -0,0 +1,40 @@
+package com.qunzhixinxi.hnqz.admin.oe.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.oe.entity.dto.OeUserRequest;
+import com.qunzhixinxi.hnqz.admin.oe.entity.vo.OeUserVO;
+import com.qunzhixinxi.hnqz.admin.oe.service.OeUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * oe用户服务
+ *
+ * @author lixuesong
+ * @date 2023/08/08
+ */
+@Slf4j
+@Service
+public class OeUserServiceImpl implements OeUserService {
+
+//    private UserService userService;
+//
+//    @PostConstruct
+//    public void init() {
+//        YaoyicloudConfig config = new YaoyicloudConfig.Builder().secretId("admin").secretKey("123456").terminalType(TerminalType.YYC_CSO).build();
+//        userService = new UserService.Builder().hostName(HostName.PROD).config(config).build();
+//    }
+
+    /**
+     * 分页查询
+     *
+     * @param page   分页参数
+     * @param toPage 查询参数
+     * @return {@link IPage}<{@link OeUserVO}>
+     */
+    @Override
+    public IPage<OeUserVO> pageUser(Page<OeUserVO> page, OeUserRequest.ToPage toPage) {
+        return null;
+    }
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysPortalConfService.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysPortalConf;
+
+/**
+ * 门户配置信息服务
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:30
+ */
+public interface SysPortalConfService extends IService<SysPortalConf> {
+
+}

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaDistributionService.java

@@ -41,6 +41,8 @@ public interface WmDaDistributionService extends IService<WmDaDistribution> {
 
 	public R updateByApproval(Map<String,String> map);
 
+	R updateByapprovalForManualOperation(Map<String,String> map);
+
 	/**
 	 * 解析商业公司地址
 	 */

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

@@ -43,6 +43,14 @@ public interface WmDaHospitalService extends IService<WmDaHospital> {
 
 	public R updateByApproval(Map<String,String> map);
 
+	/**
+	 * 手动处理调查信息入库
+	 *
+	 * @param map
+	 * @return
+	 */
+	R updateByApprovalForManualOperation(Map<String,String> map);
+
 	public Map<String,String> compareDictItem(String name, String str1, String str2, String param);
 
 	/**

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaPharmacyService.java

@@ -36,6 +36,8 @@ public interface WmDaPharmacyService extends IService<WmDaPharmacy> {
 
 	R updateByapproval(Map<String, String> map);
 
+	R updateByapprovalForManualOperation(Map<String, String> map);
+
 	/**
 	 * 根据经纬度查询
 	 *

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTaskService.java

@@ -228,4 +228,13 @@ public interface WmTaskService extends IService<WmTask> {
 	 * @param taskStatusInfo 审批说明
 	 */
 	void task15_30_16_18(WmTask task, String taskStatus, String taskStatusInfo);
+
+	/**
+	 * 更新调查信息数据(只入库调查信息数据,不更新任务和积分包数据,用于手动处理)
+	 *
+	 * @param task 任务信息
+	 * @param taskStatus 审核状态
+	 * @param taskStatusInfo 审批说明
+	 */
+	void task15_30_16_18ForManualOperation(WmTask task, String taskStatus, String taskStatusInfo);
 }

+ 1 - 18
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmUserSignService.java

@@ -1,20 +1,3 @@
-/*
- *    Copyright (c) 2018-2025, hnqz All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the pig4cloud.com developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: hnqz
- */
-
 package com.qunzhixinxi.hnqz.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -29,5 +12,5 @@ import com.qunzhixinxi.hnqz.common.core.util.R;
  */
 public interface WmUserSignService extends IService<WmUserSign> {
 
-	R saveWmUserSign(WmUserSign wmUserSign);
+	R<?> saveWmUserSign(WmUserSign wmUserSign);
 }

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

@@ -0,0 +1,24 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysPortalConf;
+import com.qunzhixinxi.hnqz.admin.mapper.SysPortalConfMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysPortalConfService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 门户配置信息服务实现
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2023-06-05 19:30
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysPortalConfServiceImpl extends ServiceImpl<SysPortalConfMapper, SysPortalConf> implements SysPortalConfService {
+
+}
+

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

@@ -494,6 +494,121 @@ public class WmDaDistributionServiceImpl extends ServiceImpl<WmDaDistributionMap
 		return R.ok();
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R updateByapprovalForManualOperation(Map<String, String> map) {
+		//先更新任务表
+		String taskId=map.get("taskId");
+		WmTask wmTask=wmTaskService.getById(taskId);
+		if(wmTask==null){
+			return R.failed("未查询到调查信息");
+		}
+		String approvalInfo=map.get("approvalInfo");
+		String approvalOpinion=map.get("approvalOpinion");
+		String compareResult=map.get("compareResult");
+
+//		LambdaUpdateWrapper<WmTask> updateWrapper=new LambdaUpdateWrapper<WmTask>();
+//		updateWrapper.set(WmTask::getPlatAuditStatus,"1");
+//		updateWrapper.set(WmTask::getApprovalOpinion,approvalOpinion);
+//		updateWrapper.set(WmTask::getCompareResult,compareResult);
+//		updateWrapper.set(WmTask::getApprovalInfo,approvalInfo);
+//		updateWrapper.eq(WmTask::getTaskContentId,wmTask.getTaskContentId());
+//		updateWrapper.eq(WmTask::getCreateTime,wmTask.getCreateTime());
+
+//		WmTask updateTask = new WmTask();
+//		updateTask.setId(taskId);
+//		updateTask.setPlatAuditStatus("1");
+//		updateTask.setApprovalOpinion(approvalOpinion);
+//		updateTask.setCompareResult(compareResult);
+//		updateTask.setApprovalInfo(approvalInfo);
+
+//		wmTask.setApprovalInfo(approvalInfo);
+//		wmTask.setApprovalOpinion(approvalOpinion);
+//		wmTask.setCompareResult(compareResult);
+//		wmTask.setPlatAuditStatus("1");
+//		wmTaskService.updateById(wmTask);
+		WmDaDistribution wmDaDistribution=generateDistribution(map);
+
+		if("1".equals(approvalOpinion)){//采纳
+			// TODO 根据任务积分修改积分包状态
+//			updateWrapper.set(WmTask::getRealFlag,"0");//0通过
+//			updateTask.setRealFlag("0");
+			//更新审核信息
+			LocalDateTime now = LocalDateTime.now();
+//			Integer userId = SecurityUtils.getUser().getId();
+			if("1".equals(compareResult)){//新增
+				//新增
+				wmDaDistribution.setCreateTime(now);
+//				wmDaDistribution.setCreateUser(userId);
+				this.save(wmDaDistribution);
+			}else if("2".equals(compareResult)){//信息不一致
+				wmDaDistribution.setUpdateTime(now);
+//				wmDaDistribution.setUpdateUser(userId);
+				this.updateById(wmDaDistribution);
+			}else if("3".equals(compareResult)){//信息一致
+				//信息一致的情况下,只改地址
+				if(!StringUtil.isEmpty(map.get("address"))){
+					WmDaDistribution wmDaDistribution1=new WmDaDistribution();
+					wmDaDistribution1.setId(wmDaDistribution.getId());
+					wmDaDistribution1.setAddress(map.get("address"));
+					wmDaDistribution1.setLongitude(map.get("longitude"));
+					wmDaDistribution1.setLatitude(map.get("latitude"));
+					wmDaDistribution1.setUpdateTime(now);
+//					wmDaDistribution1.setUpdateUser(userId);
+					this.updateById(wmDaDistribution1);
+				}
+			}
+			//更新任务内容表
+			WmTaskContent wmTaskContent=wmTaskContentMapper.selectById(wmTask.getTaskContentId());
+			String infoId=map.get("infoId");
+			wmTaskContent.setTemp29(infoId);
+			wmTaskContentMapper.updateById(wmTaskContent);
+		}else{
+			//updateWrapper.set(WmTask::getTaskStatus,"2");//审核不通过
+//			updateWrapper.set(WmTask::getRealFlag,"1");//1不通过
+//			updateTask.setRealFlag("1");
+		}
+
+		//提交
+//		updateTask.setTaskStatus("2");
+		WmScorePackage wmScorePackage = packageService.getById(wmTask.getScorePackageId());
+// 		if("1".equals(approvalOpinion)){
+// 			if("1".equals(wmScorePackage.getPackageType1())){
+// 				Boolean fullFlag = wmTaskService.checkUserTaskSubScore(wmTask.getTaskUserId());
+// 				if(fullFlag){
+// //					return R.failed(1, "每日最多提交5万积分");
+// 					updateTask.setScore(0);
+// 				}
+//
+// 			}
+// 		}
+
+//		wmTaskService.updateById(updateTask);
+
+		//审核之后的操作//采纳
+//		if("1".equals(approvalOpinion)){
+//		}else {
+
+		//更新积分包状态
+
+		WmScorePackageStatus query = new WmScorePackageStatus();
+		query.setUserId(wmTask.getTaskUserId());
+		query.setPackageId(wmTask.getScorePackageId());
+		query.setStatus("2");
+		WmScorePackageStatus scorePackageStatus = packageStatusService.getOne(Wrappers.query(query));
+
+		/**
+		 * 不需要释放 直接返回
+		 */
+//			if("1".equals(wmScorePackage.getTaskAddFlag()) && "1".equals(scorePackageStatus.getTaskAddFlag())){
+//				return R.ok();
+//			}
+
+		packageStatusService.updatePackageAndStatus(wmTask, wmScorePackage, scorePackageStatus);
+//		}
+		return R.ok();
+	}
+
 	/**
 	 * 解析商业公司地址
 	 */

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

@@ -601,6 +601,123 @@ public class WmDaHospitalServiceImpl extends ServiceImpl<WmDaHospitalMapper, WmD
 //				return R.ok();
 //			}
 
+//		packageStatusService.updatePackageAndStatus(wmTask, wmScorePackage, scorePackageStatus);
+//		}
+		return R.ok();
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R updateByApprovalForManualOperation(Map<String, String> map) {
+		//先更新任务表
+		String taskId = map.get("taskId");
+		WmTask wmTask = wmTaskService.getById(taskId);
+		if (wmTask == null) {
+			return R.failed("未查询到调查信息");
+		}
+		String approvalInfo = map.get("approvalInfo");
+		String approvalOpinion = map.get("approvalOpinion");
+		String compareResult = map.get("compareResult");
+		//更新时,同一个task_content_id和createtime下的数据,都要更新状态为已审核
+//		LambdaUpdateWrapper<WmTask> updateWrapper=new LambdaUpdateWrapper<WmTask>();
+//		updateWrapper.set(WmTask::getPlatAuditStatus,"1");
+//		updateWrapper.set(WmTask::getApprovalOpinion,approvalOpinion);
+//		updateWrapper.set(WmTask::getCompareResult,compareResult);
+//		updateWrapper.set(WmTask::getApprovalInfo,approvalInfo);
+//		updateWrapper.eq(WmTask::getTaskContentId,wmTask.getTaskContentId());
+//		updateWrapper.eq(WmTask::getCreateTime,wmTask.getCreateTime());
+//		WmTask updateTask = new WmTask();
+//		updateTask.setId(taskId);
+//		updateTask.setPlatAuditStatus("1");
+//		updateTask.setApprovalOpinion(approvalOpinion);
+//		updateTask.setCompareResult(compareResult);
+//		updateTask.setApprovalInfo(approvalInfo);
+
+		WmDaHospital wmDaHospital = generateHospital(map);
+
+		if ("1".equals(approvalOpinion)) {//采纳
+			//updateWrapper.set(WmTask::getTaskStatus,"3");//审核通过
+			// TODO 根据任务积分修改积分包状态
+
+//			updateWrapper.set(WmTask::getRealFlag,"0");//0通过
+//			updateTask.setRealFlag("0");
+
+			//更新审核信息
+			LocalDateTime now = LocalDateTime.now();
+			Integer userId = SecurityUtils.getUser().getId();
+			if ("1".equals(compareResult)) {//新增
+				//新增
+				wmDaHospital.setCreateTime(now);
+				wmDaHospital.setCreateUser(userId);
+				wmDaHospital.setLongitude(map.get("longitude"));
+				wmDaHospital.setLatitude(map.get("latitude"));
+				this.save(wmDaHospital);
+			} else if ("2".equals(compareResult)) {//信息不一致
+				wmDaHospital.setUpdateTime(now);
+				wmDaHospital.setUpdateUser(userId);
+				this.updateById(wmDaHospital);
+			} else if ("3".equals(compareResult)) {//信息一致
+				//信息一致的情况下,只改地址
+				if (!StringUtil.isEmpty(map.get("address"))) {
+					WmDaHospital wmDaHospital1 = new WmDaHospital();
+					wmDaHospital1.setId(wmDaHospital.getId());
+					wmDaHospital1.setAddress(map.get("address"));
+					wmDaHospital1.setLongitude(map.get("longitude"));
+					wmDaHospital1.setLatitude(map.get("latitude"));
+					wmDaHospital1.setUpdateTime(now);
+					wmDaHospital1.setUpdateUser(userId);
+					this.updateById(wmDaHospital1);
+				}
+			}
+
+
+			//更新任务内容表
+			WmTaskContent wmTaskContent = wmTaskContentMapper.selectById(wmTask.getTaskContentId());
+			String infoId = map.get("infoId");
+			wmTaskContent.setTemp29(infoId);
+			wmTaskContentMapper.updateById(wmTaskContent);
+		} else {
+			//updateWrapper.set(WmTask::getTaskStatus,"2");//审核不通过
+//			updateWrapper.set(WmTask::getRealFlag,"1");//1bu通过
+//			updateTask.setRealFlag("1");
+		}
+		//提交
+//		updateTask.setTaskStatus("2");
+		LocalDateTime localDateTime = LocalDateTime.now();
+//		updateTask.setUpdateTime(localDateTime);
+
+		WmScorePackage wmScorePackage = wmScorePackageService.getById(wmTask.getScorePackageId());
+// 		if ("1".equals(approvalOpinion)) {
+// 			if ("1".equals(wmScorePackage.getPackageType1())) {
+// 				Boolean fullFlag = wmTaskService.checkUserTaskSubScore(wmTask.getTaskUserId());
+// 				if (fullFlag) {
+// //					return R.failed(1, "每日最多提交5万积分");
+// 					updateTask.setScore(0);
+// 				}
+//
+// 			}
+// 		}
+//		wmTaskService.updateById(updateTask);
+//		wmTaskService.update(updateWrapper);
+
+		//审核之后的操作 //采纳
+//		if("1".equals(approvalOpinion)){
+//		}else {
+		//更新积分包状态
+
+		WmScorePackageStatus query = new WmScorePackageStatus();
+		query.setUserId(wmTask.getTaskUserId());
+		query.setPackageId(wmTask.getScorePackageId());
+		query.setStatus("2");
+		WmScorePackageStatus scorePackageStatus = packageStatusService.getOne(Wrappers.query(query));
+
+		/**
+		 * 不需要释放 直接返回
+		 */
+//			if("1".equals(wmScorePackage.getTaskAddFlag()) && "1".equals(scorePackageStatus.getTaskAddFlag())){
+//				return R.ok();
+//			}
+
 //		packageStatusService.updatePackageAndStatus(wmTask, wmScorePackage, scorePackageStatus);
 //		}
 		return R.ok();

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

@@ -122,6 +122,150 @@ public class WmDaPharmacyServiceImpl extends ServiceImpl<WmDaPharmacyMapper, WmD
 		return R.ok(result);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R updateByapprovalForManualOperation(Map<String, String> map) {
+		String taskId=map.get("taskId");
+		WmTask wmTask=wmTaskService.getById(taskId);
+		if(wmTask==null){
+			return R.failed("未查询到调查信息");
+		}
+		String approvalInfo=map.get("approvalInfo");
+		String approvalOpinion=map.get("approvalOpinion");
+		String compareResult=map.get("compareResult");
+		//更新时,同一个task_content_id和createtime下的数据,都要更新状态为已审核
+//		LambdaUpdateWrapper<WmTask> updateWrapper=new LambdaUpdateWrapper<WmTask>();
+//		updateWrapper.set(WmTask::getPlatAuditStatus,"1");
+//		updateWrapper.set(WmTask::getApprovalOpinion,approvalOpinion);
+//		updateWrapper.set(WmTask::getCompareResult,compareResult);
+//		updateWrapper.set(WmTask::getApprovalInfo,approvalInfo);
+//		updateWrapper.eq(WmTask::getTaskContentId,wmTask.getTaskContentId());
+//		updateWrapper.eq(WmTask::getCreateTime,wmTask.getCreateTime());
+
+//		WmTask updateTask = new WmTask();
+//		updateTask.setId(taskId);
+//		updateTask.setPlatAuditStatus("1");
+//		updateTask.setApprovalOpinion(approvalOpinion);
+//		updateTask.setCompareResult(compareResult);
+//		updateTask.setApprovalInfo(approvalInfo);
+
+		if("1".equals(approvalOpinion)){//采纳
+			//updateWrapper.set(WmTask::getTaskStatus,"3");//审核通过
+			// TODO 根据任务积分修改积分包状态
+//			updateWrapper.set(WmTask::getRealFlag,"0");//0审核通过
+//			updateTask.setRealFlag("0");
+
+			WmDaPharmacy wmDaPharmacy = new WmDaPharmacy();
+			WmTaskContent wmTaskContent = wmTaskContentMapper.selectById(wmTask.getTaskContentId());
+			//更新审核信息
+			LocalDateTime now = LocalDateTime.now();
+//			Integer userId = SecurityUtils.getUser().getId();
+			if("1".equals(compareResult)){//新增
+				//新增
+				wmDaPharmacy.setPharmacyName(wmTaskContent.getTemp3());//名称
+				wmDaPharmacy.setAddress(wmTaskContent.getTemp4());//名称
+				if (!StringUtil.isEmpty(wmTaskContent.getTemp7())) {//省市区
+					String[] citys = wmTaskContent.getTemp7().split("-");
+					if(citys.length==3) {
+						wmDaPharmacy.setProvince(citys[0]);
+						wmDaPharmacy.setCity(citys[1]);
+						wmDaPharmacy.setArea(citys[2]);
+					}else {
+						String[] citys1=wmTaskContent.getTemp7().split(",");
+						if(citys1.length==3) {
+							wmDaPharmacy.setProvince(citys1[0]);
+							wmDaPharmacy.setCity(citys1[1]);
+							wmDaPharmacy.setArea(citys1[2]);
+						}
+					}
+				}
+				wmDaPharmacy.setCreateTime(now);
+				wmDaPharmacy.setCreateUser(0);
+				// 根据地址转换经纬度
+				this.convertToLatAndLong(wmDaPharmacy);
+				this.save(wmDaPharmacy);
+			}else if("2".equals(compareResult)){//信息不一致
+				//对比药店和调研信息,只有所属地区不一样
+//				List<WmDaPharmacy> wdplist=wmDaPharmacyMapper.slectByParam(wmTaskContent.getTemp3());
+//				if(null!=wdplist&&wdplist.size()>0){
+//					wmDaPharmacy=wdplist.get(0);
+//				}
+//				String address=wmDaPharmacy.getProvince()+"-"+wmDaPharmacy.getCity()+"-"+wmDaPharmacy.getArea();
+//				if(null!=wmTaskContent.getTemp7()&&!wmTaskContent.getTemp7().equals(address)){
+//					String[] citys=wmTaskContent.getTemp7().split("-");
+//					if(citys.length==3){
+//						wmDaPharmacy.setProvince(citys[0]);
+//						wmDaPharmacy.setCity(citys[1]);
+//						wmDaPharmacy.setArea(citys[2]);
+//					}else {
+//						String[] citys1=wmTaskContent.getTemp7().split(",");
+//						if(citys1.length==3) {
+//							wmDaPharmacy.setProvince(citys1[0]);
+//							wmDaPharmacy.setCity(citys1[1]);
+//							wmDaPharmacy.setArea(citys1[2]);
+//						}
+//					}
+//				}
+//				wmDaPharmacy.setId(map.get("infoId"));
+//				wmDaPharmacy.setPharmacyName(wmTaskContent.getTemp3());//名称
+//				wmDaPharmacy.setAddress(wmTaskContent.getTemp4());
+//				wmDaPharmacy.setUpdateTime(now);
+//				wmDaPharmacy.setUpdateUser(userId);
+				// 根据地址转换经纬度
+//				this.convertToLatAndLong(wmDaPharmacy);
+				//更新药店信息;
+//				this.updateById(wmDaPharmacy);
+			}
+
+		}else{
+			//updateWrapper.set(WmTask::getTaskStatus,"2");//审核不通过
+//			updateWrapper.set(WmTask::getRealFlag,"1");//1不通过
+
+//			updateTask.setRealFlag("1");
+		}
+		//提交
+//		updateTask.setTaskStatus("2");
+		WmScorePackage wmScorePackage = wmScorePackageService.getById(wmTask.getScorePackageId());
+// 		if("1".equals(approvalOpinion)){
+// 			if("1".equals(wmScorePackage.getPackageType1())){
+// 				Boolean fullFlag = wmTaskService.checkUserTaskSubScore(wmTask.getTaskUserId());
+// 				if(fullFlag){
+// //					return R.failed(1, "每日最多提交5万积分");
+// 					updateTask.setScore(0);
+// 				}
+//
+// 			}
+// 		}
+//		wmTaskService.updateById(updateTask);
+//		wmTaskService.update(updateWrapper);
+
+//		if("1".equals(approvalOpinion)){
+//
+//		}else {
+
+			/**
+			 * 审核不通过可能需要释放积分
+			 */
+			//更新积分包状态
+//			WmScorePackage wmScorePackage = wmScorePackageService.getById(wmTask.getScorePackageId());
+			WmScorePackageStatus query = new WmScorePackageStatus();
+			query.setUserId(wmTask.getTaskUserId());
+			query.setPackageId(wmTask.getScorePackageId());
+			query.setStatus("2");
+			WmScorePackageStatus scorePackageStatus = packageStatusService.getOne(Wrappers.query(query));
+
+			/**
+			 * 不需要释放 直接返回
+			 */
+//			if("1".equals(wmScorePackage.getTaskAddFlag()) && "1".equals(scorePackageStatus.getTaskAddFlag())){
+//				return R.ok();
+//			}
+
+//			packageStatusService.updatePackageAndStatus(wmTask, wmScorePackage, scorePackageStatus);
+//		}
+		return R.ok();
+	}
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R updateByapproval(Map<String, String> map) {

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

@@ -2825,6 +2825,52 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 		}
 	}
 
+	/**
+	 * 更新调查信息数据(只入库调查信息数据,不更新任务和积分包数据,用于手动处理)
+	 *
+	 * @param task 任务信息
+	 * @param taskStatus 审核状态
+	 * @param taskStatusInfo 审批说明
+	 */
+	public void task15_30_16_18ForManualOperation(WmTask task, String taskStatus, String taskStatusInfo) {
+
+		// 调查信息审核(15、30-医院 16-商业公司 18-药店)
+		String approvalOpinion = taskStatus.equals(TaskStatusEnum.APPROVED.val()) ? "1" : "2";
+		if ("15".equals(task.getTaskTypeId()) || "30".equals(task.getTaskTypeId())) {
+			Map<String, Object> data = (Map<String, Object>) wmDaHospitalService.approvalHospital(task.getId()).getData();
+			WmTask _wmTask = (WmTask) data.get("wmTask");
+			Map<String, String> paramMap = BeanUtil.toBean(data.get("newinfo"), Map.class);
+			paramMap.put("approvalInfo", taskStatusInfo);
+			paramMap.put("approvalOpinion", approvalOpinion);
+			paramMap.put("compareResult", _wmTask.getCompareResult());
+			paramMap.put("taskId", task.getId());
+			log.info("更新调查信息数据hospital:{}", paramMap);
+			wmDaHospitalService.updateByApprovalForManualOperation(paramMap);
+		} else if ("16".equals(task.getTaskTypeId())) {
+			Map<String, Object> data = (Map<String, Object>) wmDaDistributionService.approvalDistribution(task.getId()).getData();
+			WmTask _wmTask = (WmTask) data.get("wmTask");
+			Map<String, String> paramMap = BeanUtil.toBean(data.get("newinfo"), Map.class);
+			paramMap.put("approvalInfo", taskStatusInfo);
+			paramMap.put("approvalOpinion", approvalOpinion);
+			paramMap.put("compareResult", _wmTask.getCompareResult());
+			paramMap.put("taskId", task.getId());
+			log.info("更新调查信息数据distribution:{}", paramMap);
+			wmDaDistributionService.updateByapprovalForManualOperation(paramMap);
+		} else if ("18".equals(task.getTaskTypeId())) {
+			Map<String, Object> data = (Map<String, Object>) wmDaPharmacyService.approvalPharmacy(task.getId()).getData();
+			WmTask _wmTask = (WmTask) data.get("_wmTask");
+			WmDaPharmacy info = (WmDaPharmacy) data.get("info");
+			Map<String, String> paramMap = MapUtil.newHashMap(4);
+			paramMap.put("infoId", info.getId());
+			paramMap.put("approvalInfo", taskStatusInfo);
+			paramMap.put("approvalOpinion", approvalOpinion);
+			paramMap.put("compareResult", _wmTask.getCompareResult());
+			paramMap.put("taskId", task.getId());
+			log.info("更新调查信息数据pharmacy:{}", paramMap);
+			wmDaPharmacyService.updateByapprovalForManualOperation(paramMap);
+		}
+	}
+
 	/**
 	 * 移除图片缓存
 	 *

+ 514 - 330
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

@@ -5,20 +5,18 @@ import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
-import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
-import com.qunzhixinxi.hnqz.admin.enums.LockEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.CommonFlag;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
@@ -27,17 +25,17 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -62,38 +60,18 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 	private final WmUserSignDetailService wmUserSignDetailService;
 	private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
 	private final WmTaskSubmissionRuleService wmTaskSubmissionRuleService;
-	private final UpmsConfig upmsConfig;
 	private final Sequence taskSequence;
 
-	@Override
-	public R saveWmUserSign(WmUserSign wmUserSign) {
-		if (StringUtils.isEmpty(wmUserSign.getPackageId())) {
-			return R.failed("关联积分包异常");
-		}
-		if (StringUtils.isEmpty(wmUserSign.getSignEntId())) {
-			return R.failed("打卡地址异常,请退出后重试");
-		}
+	/**
+	 * 校验基础参数
+	 *
+	 * @param wmUserSign 参数
+	 * @return 任务ID
+	 */
+	private String checkBaseInfo(WmUserSign wmUserSign) {
 
-		if (StringUtils.isEmpty(wmUserSign.getSignEntName())) {
-			return R.failed("打卡地址异常,请退出后重试");
-		}
-		if (StringUtils.isEmpty(wmUserSign.getSignEntType())) {
-			wmUserSign.setSignEntType("1");
-		}
-		WmScorePackage tWmScorePackage = wmScorePackageService.getById(wmUserSign.getPackageId());
-		if (StringUtils.isEmpty(tWmScorePackage.getId())) {
-			log.warn("获取不到积分包:{}", wmUserSign.getPackageId());
-			return R.failed("获取不到积分包");
-		}
-		if (StringUtils.isEmpty(tWmScorePackage.getRuleId())) {
-			log.warn("积分包未配置积分规则:{}", wmUserSign.getPackageId());
-			return R.failed("积分包未配置积分规则");
-		}
-		//TODO 测试通过后删除
-		UserVO sysU = sysUserService.selectUserVoById(SecurityUtils.getUser().getId());
-		if (!sysU.getUserId().toString().equals(wmUserSign.getSignUserid())) {
-			log.warn("客户拜访任务,登录人不符:{}", wmUserSign.getSignUserid());
-			return R.failed("客户拜访任务,登录人不符");
+		if (StringUtils.isEmpty(wmUserSign.getSignEntId()) || StringUtils.isEmpty(wmUserSign.getSignEntName())) {
+			throw new BizException("打卡地址异常,请退出后重试");
 		}
 
 		String taskTypeId;
@@ -104,372 +82,578 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 		} else if ("3".equals(wmUserSign.getSignEntType())) {
 			taskTypeId = "33";
 		} else {
-			return R.failed("拜访类型不存在");
+			throw new BizException("拜访类型不存在");
+		}
+
+		return taskTypeId;
+	}
+
+	/**
+	 * 获取并校验积分包信息
+	 *
+	 * @param wmUserSign 签到信息
+	 * @return 积分包信息
+	 */
+	private WmScorePackage checkPkgInfo(WmUserSign wmUserSign) {
+		String pkgId = wmUserSign.getPackageId();
+		if (StringUtils.isEmpty(pkgId)) {
+			throw new BizException("关联积分包异常");
 		}
-		wmUserSign.setTaskTypeId(taskTypeId);
+
+		WmScorePackage tWmScorePackage = wmScorePackageService.getById(pkgId);
+
+		if (tWmScorePackage == null) {
+			log.warn("获取不到积分包:{}", pkgId);
+			throw new BizException("获取不到积分包");
+		}
+
+		if (StringUtils.isEmpty(tWmScorePackage.getRuleId())) {
+			log.warn("积分包未配置积分规则:{}", pkgId);
+			throw new BizException("积分包未配置积分规则");
+		}
+
+		return tWmScorePackage;
+
+	}
+
+	/**
+	 * 获取用户
+	 *
+	 * @param wmUserSign 打卡信息
+	 * @return 用户vo
+	 */
+	private UserVO checkUser(WmUserSign wmUserSign) {
+
+		Integer userId = SecurityUtils.getUser().getId();
+		if (!userId.toString().equals(wmUserSign.getSignUserid())) {
+			log.warn("客户拜访任务,登录人不符:{}", wmUserSign.getSignUserid());
+			throw new BizException("客户拜访任务,登录人不符");
+		}
+
+		UserVO userVO = sysUserService.selectUserVoById(userId);
 
 		// 校验超过60周岁,不能做任务
-		Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
+		Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(userVO);
 		if (CollUtil.isNotEmpty(checkResult) && checkResult.containsKey("OVER")) {
-			throw new RuntimeException(checkResult.get("OVER"));
+			throw new BizException(checkResult.get("OVER"));
 		}
 
-		// 查询任务类型启用状态
+		return userVO;
+	}
+
+	/**
+	 * 校验任务类型规则
+	 *
+	 * @param entId      企业ID
+	 * @param taskTypeId 任务类型ID
+	 */
+	private void checkTaskTypeRules(Integer entId, String taskTypeId) {
 		List<WmTaskSubmissionPercentRule> taskTypeRules = wmTaskSubmissionPercentRuleService.list(Wrappers.<WmTaskSubmissionPercentRule>lambdaQuery()
-				.eq(WmTaskSubmissionPercentRule::getDeptId, sysU.getDeptId())
+				.eq(WmTaskSubmissionPercentRule::getDeptId, entId)
 				.eq(WmTaskSubmissionPercentRule::getSubCategory, UpmsType.TaskSubCategory2.TASK_TYPE_CONFIG));
 		if (CollUtil.isEmpty(taskTypeRules)) {
-			throw new RuntimeException("当前企业未开启该任务!");
+			throw new BizException("当前企业未开启该任务!");
 		}
 		String[] taskTypeIds = taskTypeRules.get(0).getRule().getTaskTypeIds();
 		if (!ArrayUtil.contains(taskTypeIds, taskTypeId)) {
-			throw new RuntimeException("当前企业未开启该任务!");
+			throw new BizException("当前企业未开启该任务!");
 		}
 
-		// 校验任务类型是否启用
+	}
+
+	/**
+	 * 校验百分比规则
+	 * 校验任务百分比限制规则(如果积分包值大于【任务配置】-【百分比限制】配置的起始值,
+	 * 且【任务配置】-【百分比限制】所选的任务类型对应的任务总完成积分值>积分包值*【任务配置】-【百分比限制】配置的百分比,则校验不通过)
+	 *
+	 * @param pkg   积分包
+	 * @param entId 企业ID
+	 */
+	private void checkPercentRule(WmScorePackage pkg, Integer entId) {
+		R<?> checkPercentRuleResult =
+				wmTaskSubmissionPercentRuleService.checkPercentRule(pkg, entId, null, Arrays.asList("5", "6", "33"));
+		if (checkPercentRuleResult.getCode() != 0) {
+			throw new BizException(checkPercentRuleResult.getMsg());
+		}
+
+	}
+
+	/**
+	 * 校验任务类型是否启用
+	 *
+	 * @param taskTypeId 任务类型ID
+	 * @param ruleId     规则ID
+	 */
+	private void checkTaskType(String taskTypeId, String ruleId) {
 		WmTaskType _baseTaskType = wmTaskTypeService.getById(taskTypeId);
-		WmTaskType queryTaskType = new WmTaskType();
-		queryTaskType.setRuleId(tWmScorePackage.getRuleId());
-		queryTaskType.setTaskTypeName(_baseTaskType.getTaskTypeName());
-		queryTaskType.setDelFlag("0");
-		List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.query(queryTaskType));
+		String typeName = _baseTaskType.getTaskTypeName();
+		List<WmTaskType> deptTaskTypes = wmTaskTypeService.list(Wrappers.<WmTaskType>lambdaQuery()
+				.eq(WmTaskType::getRuleId, ruleId)
+				.eq(WmTaskType::getTaskTypeName, typeName)
+				.eq(WmTaskType::getDelFlag, "0"));
 		if (CollUtil.isEmpty(deptTaskTypes)) {
-			throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型不存在");
+			throw new BizException(typeName + "任务类型不存在");
 		}
 		if (EnableEnum.DISABLE.val().equals(deptTaskTypes.get(0).getEnableFlag())) {
-			throw new RuntimeException(_baseTaskType.getTaskTypeName() + "任务类型已停用");
+			throw new BizException(typeName + "任务类型已停用");
+		}
+	}
+
+	/**
+	 * 校验积分限制
+	 *
+	 * @param entId  企业ID
+	 * @param userId 用户ID
+	 */
+	private void checkLimitScore(Integer entId, Integer userId) {
+		String limitValue = "30000";
+		// 查询当前企业配置的积分限制
+		List<WmTaskSubmissionRule> scoreLimitRuleList = wmTaskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
+				.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(entId, 1))
+				.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
+				.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
+
+		// 公共参数配置的
+		String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
+
+		if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
+			Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.stream()
+					.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
+							BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
+			WmTaskSubmissionRule.SubmissionRule submissionRule = submissionRuleMap.containsKey(entId) ? submissionRuleMap.get(entId) : submissionRuleMap.get(1);
+			limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
+		} else if (StrUtil.isNotBlank(userTaskSubScore)) {
+			limitValue = userTaskSubScore;
+		}
+
+		boolean fullFlag = wmTaskService.checkUserTaskSubScore(userId.toString(), limitValue);
+		if (fullFlag) {
+			String info = String.format("每日最多提交%s积分", limitValue);
+			log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
+			throw new BizException(info);
+		}
+
+	}
+
+	/**
+	 * 获取积分包领取明细
+	 *
+	 * @param pkgId  积分包ID
+	 * @param userId 用户ID
+	 * @return 明细
+	 */
+	private WmScorePackageStatus checkPkgStatus(String pkgId, Integer userId) {
+
+		List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+				.eq(WmScorePackageStatus::getUserId, userId.toString())
+				.eq(WmScorePackageStatus::getStatus, "2")
+				.eq(WmScorePackageStatus::getTaskAddFlag, "1")
+				.eq(WmScorePackageStatus::getPackageId, pkgId)
+		);
+		if (CollectionUtils.isEmpty(statusList) || statusList.size() != 1) {
+			log.warn("获取积分包异常,任务保存失败:{}", pkgId);
+			throw new BizException("获取积分包领取异常,任务保存失败");
+		}
+
+		return statusList.get(0);
+	}
+
+	/**
+	 * 保存任务
+	 *
+	 * @param taskTypeId 任务ID
+	 * @param wmUserSign 用户签到信息
+	 * @param userVO     用户信息
+	 * @param pkg        积分包信息
+	 * @return 任务结果
+	 */
+	private WmTask createTask(String taskTypeId, WmUserSign wmUserSign, UserVO userVO, WmScorePackage pkg) {
+
+		// 获取任务类型积分
+		WmTaskType wmTaskType = new WmTaskType();
+		wmTaskType.setTaskTypeName(wmTaskTypeService.getById(taskTypeId).getTaskTypeName());
+		wmTaskType.setRuleId(pkg.getRuleId());
+		int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
+		if (score < 0) {
+			throw new BizException("获取任务积分失败");
 		}
 
+		// 保存任务详情
+		WmTaskContent wmTaskContent = new WmTaskContent();
+		wmTaskContent.setTemp1(wmUserSign.getLatitude());
+		wmTaskContent.setTemp2(wmUserSign.getLongitude());
+		wmTaskContent.setTemp3(wmUserSign.getId().toString());
+		wmTaskContentService.save(wmTaskContent);
+
+		// 保存任务
+		WmTask wmTask = new WmTask();
+		wmTask.setTaskFrom("1");
+		wmTask.setTaskUserId(userVO.getUserId().toString());
+		wmTask.setTaskTypeId(taskTypeId);
+		wmTask.setSubmitStatus("0");
+		LocalDateTime now = LocalDateTime.now();
+		wmTask.setCreateTime(now);
+		wmTask.setUpdateTime(now);
+		wmTask.setLookintoDate(now);
+		wmTask.setTaskStatus("2"); //直接提交
+		wmTask.setDrugEntId(userVO.getDrugEntId());
+		wmTask.setDeptId(userVO.getDeptId().toString());
+		wmTask.setScorePackageId(pkg.getId());
+		wmTask.setTaskRuleId(pkg.getTaskRuleId());
+		wmTask.setTaskContentId(wmTaskContent.getId().toString());
+		wmTask.setTaskNumber(taskSequence.nextNo());
+		wmTask.setScore(score);
+
+		// 保存任务
+		wmTaskService.save(wmTask);
+
+		return wmTask;
+	}
+
+
+	/**
+	 * 操作积分包和领包状态, 判断任务完成度
+	 *
+	 * @param tWmScorePackage 积分包
+	 * @param packageStatus   领包记录
+	 * @param userVO          用户信息
+	 * @param taskTypeId      任务ID
+	 * @param wmUserSign      签到信息
+	 */
+	private void operatePkgAndPkgStatus(WmScorePackage tWmScorePackage, WmScorePackageStatus packageStatus, UserVO userVO, String taskTypeId, WmUserSign wmUserSign) {
+
+		//  查询出 审核通过和审核中的任务
+		List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
+				.eq(WmTask::getScorePackageId, tWmScorePackage.getId())
+				.ne(WmTask::getTaskStatus, "4")
+				.eq(WmTask::getRealFlag, "0"));
+
+		// 判断定量还是定额 1- 定额   2-定量
+		// 20210120 目前 1-定额  1包1人  2-定量   1包多人
 		if ("1".equals(tWmScorePackage.getPackageType1())) {
-			String limitValue = "30000";
-			// 查询当前企业配置的积分限制
-			List<WmTaskSubmissionRule> scoreLimitRuleList = wmTaskSubmissionRuleService.list(Wrappers.<WmTaskSubmissionRule>lambdaQuery()
-					.in(WmTaskSubmissionRule::getDeptId, CollUtil.newHashSet(sysU.getDeptId(), 1))
-					.eq(WmTaskSubmissionRule::getOptFlag, CommonFlag.OptFlag.OK)
-					.eq(WmTaskSubmissionRule::getSubCategory, UpmsType.TaskSubCategory.SCORE_LIMIT));
-
-			// 公共参数配置的
-			String userTaskSubScore = sysPublicParamService.getSysPublicParamKeyToValue("USER_TASK_SUB_SCORE");
-
-			if (CollUtil.isNotEmpty(scoreLimitRuleList)) {
-				Map<Integer, WmTaskSubmissionRule.SubmissionRule> submissionRuleMap = scoreLimitRuleList.stream()
-						.collect(Collectors.toMap(WmTaskSubmissionRule::getDeptId, rules ->
-								BeanUtil.toBean(rules.getRule().get(0), WmTaskSubmissionRule.SubmissionRule.class)));
-				WmTaskSubmissionRule.SubmissionRule submissionRule = null;
-				if (submissionRuleMap.containsKey(sysU.getDeptId())) {
-					submissionRule = submissionRuleMap.get(sysU.getDeptId());
-				} else {
-					submissionRule = submissionRuleMap.get(1);
+
+			int totalCount = wmTaskList.stream().mapToInt(WmTask::getScore).sum();
+
+			if (totalCount >= tWmScorePackage.getScore()) {
+				tWmScorePackage.setTaskAddFlag("0");
+				packageStatus.setTaskAddFlag("0");
+				wmScorePackageStatusService.updateById(packageStatus);
+			}
+
+		} else if ("2".equals(tWmScorePackage.getPackageType1())) {
+
+			String userIdStr = userVO.getUserId().toString();
+			long count = wmTaskList.stream().filter(item -> item.getTaskUserId().equals(userIdStr)).count();
+
+			if (count - packageStatus.getTaskNum() >= 0) {
+				packageStatus.setTaskAddFlag("0");
+				wmScorePackageStatusService.updateById(packageStatus);
+
+				// 改变大包状态
+				List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+						.eq(WmScorePackageStatus::getPackageId, tWmScorePackage.getId())
+						.eq(WmScorePackageStatus::getStatus, "2")
+						.eq(WmScorePackageStatus::getTaskAddFlag, "0"));
+				if (new BigDecimal(tWmScorePackage.getUserNum()).compareTo(new BigDecimal(statusAll.size())) <= 0) {
+					tWmScorePackage.setTaskAddFlag("0");
 				}
-				limitValue = String.valueOf(submissionRule.getFrequency().get(0).get("quantity"));
-			} else if (StrUtil.isNotBlank(userTaskSubScore)) {
-				limitValue = userTaskSubScore;
 			}
+		}
 
-			Boolean fullFlag = wmTaskService.checkUserTaskSubScore(sysU.getUserId() + "", limitValue);
-			if (fullFlag) {
-				String info = String.format("每日最多提交%s积分", limitValue);
-				log.warn("系统当前限制积分上限:【{}】,提示:【{}】", limitValue, info);
-				return R.failed(1, info);
+		tWmScorePackage.setIsConduct("1");
+		wmScorePackageService.updateById(tWmScorePackage);
+
+		// 如果配置了医院拜访的任务类型模板,则关联保存签到详情
+		if (wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(userVO.getDeptId(), taskTypeId)) {
+			WmUserSignDetail userSignDetail = wmUserSign.getUserSignDetail();
+			if (userSignDetail != null) {
+				userSignDetail.setSignId(wmUserSign.getId());
+				wmUserSignDetailService.save(userSignDetail);
 			}
 		}
+	}
 
+
+	/**
+	 * 校验打卡规则
+	 *
+	 * @param taskTypeId          任务类型
+	 * @param wmUserSign          签到信息
+	 * @param relatedServiceEntId 关联企业
+	 */
+	private void checkByRule(String taskTypeId, WmUserSign wmUserSign, String relatedServiceEntId) {
+		// 校验药店打卡
 		if ("33".equals(taskTypeId)) {
-			// 一个用户,在同一打卡地点,4小时内只能打卡一次
-			int total = this.count(Wrappers.<WmUserSign>lambdaQuery()
-					.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
-					.eq(WmUserSign::getSignEntId, wmUserSign.getSignEntId())
-					.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(4, ChronoUnit.HOURS)));
-			// 一个用户,半小时内只能打卡一次
-			int halfHourTotal = this.count(Wrappers.<WmUserSign>lambdaQuery()
-					.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
-					.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(30, ChronoUnit.MINUTES)));
-			if (total != 0 || halfHourTotal != 0) {
-				log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-				return R.failed("打卡间隔过短");
-			}
-		} else {
+			checkPharmacySign(wmUserSign);
+		}
+		// 医院拜访
+		else if ("5".equals(taskTypeId)) {
+			checkHospitalSign(relatedServiceEntId, wmUserSign);
+		}
+		// 商业公司拜访
+		else {
+			checkBizSign(relatedServiceEntId, wmUserSign);
+		}
+
+
+	}
+
+	/**
+	 * 校验药店打卡
+	 *
+	 * @param wmUserSign 签到信息
+	 */
+	private void checkPharmacySign(WmUserSign wmUserSign) {
+		// 一个用户,在同一打卡地点,4小时内只能打卡一次
+		int total = this.count(Wrappers.<WmUserSign>lambdaQuery()
+				.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
+				.eq(WmUserSign::getSignEntId, wmUserSign.getSignEntId())
+				.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(4, ChronoUnit.HOURS)));
+		// 一个用户,半小时内只能打卡一次
+		int halfHourTotal = this.count(Wrappers.<WmUserSign>lambdaQuery()
+				.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
+				.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(30, ChronoUnit.MINUTES)));
+		if (total != 0 || halfHourTotal != 0) {
+			log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+			throw new BizException("打卡间隔过短");
+		}
+	}
 
-			List<WmTaskSubmissionRule.SubmissionRule> rules = wmTaskContentService.getTaskSubmissionRule(taskTypeId, tWmScorePackage.getRelatedService());
+	/**
+	 * 校验医院打卡
+	 *
+	 * @param relatedServiceEntId 关联企业
+	 * @param wmUserSign          签到信息
+	 */
+	private void checkHospitalSign(String relatedServiceEntId, WmUserSign wmUserSign) {
 
-			int dailyLimit = 0;
-			Map<String, Integer> eachLimitMap = new HashMap<>(2);
+		checkCommonSign("5", relatedServiceEntId, wmUserSign);
 
-			if (CollUtil.isNotEmpty(rules)) {
-				// 获取限制
-				for (int i = 0, size = rules.size(); i < size; i++) {
-					Map<String, Object> map = (Map<String, Object>) rules.get(i);
-					WmTaskSubmissionRule.SubmissionRule r = BeanUtil.mapToBean(map, WmTaskSubmissionRule.SubmissionRule.class, true, new CopyOptions());
+	}
+
+	/**
+	 * 校验商业公司打卡
+	 *
+	 * @param relatedServiceEntId 关联企业
+	 * @param wmUserSign          签到信息
+	 */
+	private void checkBizSign(String relatedServiceEntId, WmUserSign wmUserSign) {
+		checkCommonSign("6", relatedServiceEntId, wmUserSign);
+	}
+
+	/**
+	 * 公用打卡校验
+	 *
+	 * @param taskTypeId          任务类型
+	 * @param relatedServiceEntId 服务企业
+	 * @param wmUserSign          签到信息
+	 */
+	@SuppressWarnings("unchecked")
+	private void checkCommonSign(String taskTypeId, String relatedServiceEntId, WmUserSign wmUserSign) {
+
+		List<WmTaskSubmissionRule.SubmissionRule> rules = wmTaskContentService.getTaskSubmissionRule(taskTypeId, relatedServiceEntId);
+
+		Map<String, Integer> eachLimitMap = new HashMap<>(3);
+		Map<String, Integer> totalLimitMap = new HashMap<>(3);
+
+		if (CollUtil.isNotEmpty(rules)) {
+			// 获取限制
+			for (int i = 0, size = rules.size(); i < size; i++) {
+				Map<String, Object> map = (Map<String, Object>) rules.get(i);
+				WmTaskSubmissionRule.SubmissionRule r = BeanUtil.mapToBean(map, WmTaskSubmissionRule.SubmissionRule.class, true, new CopyOptions());
+
+				if ("拜访次数上限".equals(r.getManual())) {
+					r.getFrequency().forEach(f -> {
+
+						// 获取数量
+						Object o = f.get("quantity");
+						int limit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
+
+						// 获取单位
+						String timeUnit = (String) f.get("timeUnit");
+
+						// 同一个单位只记录最小的
+						if (totalLimitMap.containsKey(timeUnit)) {
+							Integer l1 = totalLimitMap.get(timeUnit);
+							if (l1 != null && l1 > limit) {
+								totalLimitMap.put(timeUnit, limit);
+							}
+						} else {
+							totalLimitMap.put(timeUnit, limit);
+						}
 
-					if ("拜访次数上限".equals(r.getManual())) {
-						Object o = r.getFrequency().get(0).get("quantity");
-						dailyLimit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
+					});
 
-					}
-					if (r.getManual().startsWith("同一个人")) {
+				}
+				if (r.getManual().startsWith("同一个人")) {
 
-						r.getFrequency().forEach(f -> {
+					r.getFrequency().forEach(f -> {
 
-							// 获取数量
-							Object o = f.get("quantity");
-							int limit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
+						// 获取数量
+						Object o = f.get("quantity");
+						int limit = o instanceof String ? Integer.parseInt((String) o) : (int) o;
 
-							// 获取单位
-							String timeUnit = (String) f.get("timeUnit");
+						// 获取单位
+						String timeUnit = (String) f.get("timeUnit");
 
-							// 同一个单位只记录最小的
-							if (eachLimitMap.containsKey(timeUnit)) {
-								Integer l1 = eachLimitMap.get(timeUnit);
-								if (l1 != null && l1 > limit) {
-									eachLimitMap.put(timeUnit, limit);
-								}
-							} else {
+						// 同一个单位只记录最小的
+						if (eachLimitMap.containsKey(timeUnit)) {
+							Integer l1 = eachLimitMap.get(timeUnit);
+							if (l1 != null && l1 > limit) {
 								eachLimitMap.put(timeUnit, limit);
 							}
+						} else {
+							eachLimitMap.put(timeUnit, limit);
+						}
 
-						});
+					});
 
-					}
 				}
 			}
+		}
+
+		// 月度为最大单位,以当前时间所在自然月查询范围, 获取签到记录
+		LocalDateTime now = LocalDateTime.now();
+		LocalDateTime start = now.with(TemporalAdjusters.firstDayOfMonth());
+		List<WmUserSign> signs = this.list(Wrappers.<WmUserSign>lambdaQuery()
+				.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
+				.eq(WmUserSign::getTaskTypeId, taskTypeId)
+				.between(WmUserSign::getSignDate, start, now));
+
+		// 本月未有打卡记录
+		if (CollUtil.isEmpty(signs)) {
+			log.info("当前用户本月不存在打卡任务,放行");
+			return;
+		}
+
+		// 校验 同一个人,对同一拜访对象
+		Map<String, List<WmUserSign>> collect = signs.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
+		List<WmUserSign> wmUserSigns = collect.get(wmUserSign.getSignEntId());
+		if (CollUtil.isNotEmpty(wmUserSigns)) {
+
+			int currCount = wmUserSigns.size();
+			log.info("当前用户同一地点本月已完成次数:[{}]", currCount);
+			Integer monthLimit = eachLimitMap.get("MONTH");
+			log.info("同一个人,对同一拜访对象打卡每月限制:[{}]", monthLimit);
+			if (monthLimit != null && monthLimit <= currCount) {
+				log.warn("超过同一个人,对同一拜访对象打卡每月限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+				throw new BizException("超过同一个人,对同一拜访对象打卡每月限制");
+			}
 
-			// 按照最大周期进行查询
-			LocalDateTime now = LocalDateTime.now();
-			LocalDateTime start;
-			boolean isMonth = false;
-			if (eachLimitMap.containsKey("MONTH")) {
-				start = now.minusDays(30L);
-				isMonth = true;
-			} else {
-				start = LocalDateTime.of(now.toLocalDate(), LocalTime.MIN);
+			Integer dailyLimit = eachLimitMap.get("DAY");
+			log.info("同一个人,对同一拜访对象打卡每日限制:[{}]", dailyLimit);
+			if (dailyLimit != null) {
+				LocalDateTime todayStart = LocalDateTime.of(now.toLocalDate(), LocalTime.MIN);
+				long dailyCount = wmUserSigns.stream().filter(sign -> sign.getSignDate().isAfter(todayStart)).count();
+				log.info("当前用户同一地点本日已完成次数:[{}]", dailyCount);
+				if (dailyLimit <= dailyCount) {
+					log.warn("超过同一个人,对同一拜访对象打卡每日限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+					throw new BizException("超过同一个人,对同一拜访对象打卡每日限制");
+				}
 			}
 
-			List<WmUserSign> signs = this.list(Wrappers.<WmUserSign>lambdaQuery()
-					.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
-					.eq(WmUserSign::getTaskTypeId, taskTypeId)
-					.between(WmUserSign::getSignDate, start, now));
+			Integer hourLimit = eachLimitMap.get("HOUR");
+			log.info("同一个人,对同一拜访对象打卡每小时限制:[{}]", hourLimit);
+			if (hourLimit != null) {
+				LocalDateTime hourStart = now.minusHours(1L);
+				long hourCount = wmUserSigns.stream().filter(sign -> sign.getSignDate().isAfter(hourStart)).count();
+				log.info("当前用户同一地点本小时已完成次数:[{}]", hourCount);
+				if (hourLimit <= hourCount) {
+					log.warn("超过同一个人,对同一拜访对象打卡每小时限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+					throw new BizException("超过同一个人,对同一拜访对象打卡每小时限制");
+				}
+			}
+		} else {
+			log.info("当前用户本月不存在关于该企业的打卡任务,放行");
+		}
 
 
-			// 月度限制
-			if (isMonth) {
+		//  校验当日的拜访限制
+		int currCount = signs.size();
+		log.info("当前用户本月已完成打卡次数:[{}]", currCount);
+		Integer monthLimit = totalLimitMap.get("MONTH");
+		log.info("拜访次数上限打卡每月限制:[{}]", monthLimit);
+		if (monthLimit != null && monthLimit <= currCount) {
+			log.warn("超过拜访次数上限打卡每月限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+			throw new BizException("超过拜访次数上限打卡每月限制");
+		}
 
-				Map<String, List<WmUserSign>> collect = signs.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
-				List<WmUserSign> wmUserSigns = collect.get(wmUserSign.getSignEntId());
-				if (CollUtil.isNotEmpty(wmUserSigns)) {
-					int monthLimit = eachLimitMap.get("MONTH");
-					if (monthLimit <= wmUserSigns.size()) {
-						log.warn("超过打卡每月限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-						return R.failed("超过打卡每月限制");
-					}
-				}
+		Integer dailyLimit = totalLimitMap.get("DAY");
+		log.info("拜访次数上限打卡每天限制:[{}]", dailyLimit);
+		if (dailyLimit != null) {
+			LocalDateTime todayStart = LocalDateTime.of(now.toLocalDate(), LocalTime.MIN);
+			long dailyCount = signs.stream().filter(sign -> sign.getSignDate().isAfter(todayStart)).count();
+			log.info("当前用户本日已完成打卡次数:[{}]", dailyCount);
+			if (dailyLimit <= dailyCount) {
+				log.warn("超过拜访次数上限打卡每日限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+				throw new BizException("超过拜访次数上限打卡每日限制");
 			}
+		}
 
-			// 获取当日的打卡记录
-			LocalDateTime begin = LocalDateTime.of(now.toLocalDate(), LocalTime.MIN);
-			List<WmUserSign> todaySign = signs.stream().filter(s -> s.getSignDate().isAfter(begin)).collect(Collectors.toList());
+		Integer hourLimit = totalLimitMap.get("HOUR");
+		log.info("拜访次数上限打卡每小时限制:[{}]", hourLimit);
+		if (hourLimit != null) {
+			LocalDateTime hourStart = now.minusHours(1L);
+			long hourCount = signs.stream().filter(sign -> sign.getSignDate().isAfter(hourStart)).count();
+			log.info("当前用户本小时已完成打卡次数:[{}]", hourCount);
+			if (hourLimit <= hourCount) {
+				log.warn("超过拜访次数上限打卡每小时限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+				throw new BizException("超过拜访次数上限打卡每小时限制");
+			}
+		}
 
-			// 没有超过日打卡限制
-			int todaySignQty = CollUtil.isNotEmpty(todaySign) ? todaySign.size() : 0;
-			if (dailyLimit > todaySignQty) {
+	}
 
-				Map<String, List<WmUserSign>> collect = todaySign.stream().collect(Collectors.groupingBy(WmUserSign::getSignEntId));
-				List<WmUserSign> wmUserSigns = collect.get(wmUserSign.getSignEntId());
-				if (CollUtil.isNotEmpty(wmUserSigns)) {
-					int eachLimit = eachLimitMap.get("DAY");
-					if (wmUserSigns.size() < eachLimit) {
 
-						// 一个用户,在同一打卡地点,4小时内只能打卡一次
-						Optional<LocalDateTime> first = wmUserSigns.stream().map(WmUserSign::getSignDate).filter(sd -> Duration.between(sd, now).toMinutes() <= upmsConfig.getDurationLimit()).findFirst();
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R<?> saveWmUserSign(WmUserSign wmUserSign) {
+		// 校验基础参数
+		String taskTypeId = checkBaseInfo(wmUserSign);
 
-						if (first.isPresent()) {
-							log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-							return R.failed("打卡间隔过短");
-						}
+		// 校验积分包
+		WmScorePackage tWmScorePackage = checkPkgInfo(wmUserSign);
 
-						// 一个用户,半小时内只能打卡一次
-						Optional<LocalDateTime> first1 = signs.stream().map(WmUserSign::getSignDate).filter(sd -> Duration.between(sd, now).toMinutes() <= upmsConfig.getEachDurationLimit()).findFirst();
+		// 获取用户
+		UserVO sysU = checkUser(wmUserSign);
 
-						if (first1.isPresent()) {
-							log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-							return R.failed("打卡间隔过短");
-						}
+		// 查询任务类型启用状态
+		checkTaskTypeRules(sysU.getDeptId(), taskTypeId);
 
+		// 校验任务类型是否启用
+		checkTaskType(taskTypeId, tWmScorePackage.getRuleId());
 
-					} else {
-						log.warn("超过每个地点打卡每日限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-						return R.failed("超过每个地点打卡每日限制");
-					}
-				}
+		// 根据规则校验限制
+		checkByRule(taskTypeId, wmUserSign, tWmScorePackage.getRelatedService());
 
-			} else {
-				log.warn("超过打卡每日总限制:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
-				return R.failed("超过打卡每日总限制");
-			}
+		// 校验百分比参数
+		checkPercentRule(tWmScorePackage, sysU.getDeptId());
 
-		}
+		// 校验积分包领取明细
+		WmScorePackageStatus packageStatus = checkPkgStatus(tWmScorePackage.getId(), sysU.getUserId());
 
-		// 校验任务百分比限制规则(如果积分包值大于【任务配置】-【百分比限制】配置的起始值,
-		// 且【任务配置】-【百分比限制】所选的任务类型对应的任务总完成积分值>积分包值*【任务配置】-【百分比限制】配置的百分比,则校验不通过)
-		R<?> checkPercentRuleResult =
-				wmTaskSubmissionPercentRuleService.checkPercentRule(tWmScorePackage, SecurityUtils.getUser().getDeptId(), null, Arrays.asList("5", "6", "33"));
-		if (checkPercentRuleResult.getCode() != 0) {
-			throw new RuntimeException(checkPercentRuleResult.getMsg());
+		// 校验积分限制
+		if ("1".equals(tWmScorePackage.getPackageType1())) {
+			checkLimitScore(sysU.getDeptId(), sysU.getUserId());
 		}
 
-		/**
-		 * 积分包领取明细
-		 */
-		WmScorePackageStatus query = new WmScorePackageStatus();
-		query.setUserId(sysU.getUserId() + "");
-		query.setStatus("2");
-		query.setTaskAddFlag("1");
-		query.setPackageId(tWmScorePackage.getId());
-		List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(Wrappers.lambdaQuery(query));
-		if (CollectionUtils.isEmpty(statusList)) {
-			log.warn("获取积分包异常,任务保存失败9001:{}", tWmScorePackage.getId());
-			return R.failed("获取积分包异常,任务保存失败");
-		}
-		if (statusList.size() != 1) {
-			log.warn("获取积分包异常,任务保存失败9002:{}", tWmScorePackage.getId());
-			return R.failed("获取积分包异常,任务保存失败");
+		// 设置参数 && 保存
+		if (StringUtils.isEmpty(wmUserSign.getSignEntType())) {
+			wmUserSign.setSignEntType("1");
 		}
-		WmScorePackageStatus scorePackageStatus = statusList.get(0);
-
+		wmUserSign.setTaskTypeId(taskTypeId);
 		boolean saveSign = this.save(wmUserSign);
 
+		// 保存后续操作
 		if (saveSign) {
 
-			WmTask wmTask = new WmTask();
-			wmTask.setTaskFrom("1");
-			wmTask.setTaskUserId(sysU.getUserId() + "");    //任务提交人
-			if ("1".equals(wmUserSign.getSignEntType())) {
-				wmTask.setTaskTypeId("5");                           //任务类型
-			} else if ("2".equals(wmUserSign.getSignEntType())) {
-				wmTask.setTaskTypeId("6");                           //任务类型
-			} else if ("3".equals(wmUserSign.getSignEntType())) {
-				wmTask.setTaskTypeId("33");
-			}
-			wmTask.setSubmitStatus("0");
-			LocalDateTime localDateTime = LocalDateTime.now();
-			wmTask.setUpdateTime(localDateTime);
-			wmTask.setLookintoDate(localDateTime);       //调研时间
-			wmTask.setCreateTime(localDateTime);
-			wmTask.setTaskStatus("2"); //直接提交
-			wmTask.setDrugEntId(sysU.getDrugEntId());
-
-			wmTask.setDeptId(sysU.getDeptId() + "");
-
-			WmTaskType wmTaskType = new WmTaskType();
-
-			if ("1".equals(wmUserSign.getSignEntType())) {
-				WmTaskType wmTaskType1 = wmTaskTypeService.getById(5);
-				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-			} else if ("2".equals(wmUserSign.getSignEntType())) {
-				WmTaskType wmTaskType1 = wmTaskTypeService.getById(6);
-				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-			} else if ("3".equals(wmUserSign.getSignEntType())) {
-				WmTaskType wmTaskType1 = wmTaskTypeService.getById(33);
-				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-			}
-
-			wmTaskType.setRuleId(tWmScorePackage.getRuleId());
-			int score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType);
-			if (score < 0) {
-				return R.failed("获取任务积分失败");
-			}
-			wmTask.setScore(score);
-
-			wmTask.setScorePackageId(tWmScorePackage.getId());
-			wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
-
-			WmTaskContent wmTaskContent = new WmTaskContent();
-			wmTaskContent.setTemp1(wmUserSign.getLatitude());
-			wmTaskContent.setTemp2(wmUserSign.getLongitude());
-			wmTaskContent.setTemp3(wmUserSign.getId() + "");
-			wmTaskContentService.save(wmTaskContent);
-
-			wmTask.setTaskContentId(wmTaskContent.getId() + "");
-			wmTask.setTaskNumber(taskSequence.nextNo());
-			//保存任务
-			wmTaskService.save(wmTask);
-
-			/**
-			 * 判断任务完成度
-			 */
-			WmScorePackage updatePke = wmScorePackageService.getById(tWmScorePackage.getId());
-			if (null != updatePke) {
-				/**
-				 * 查询出 审核通过和审核中的任务
-				 */
-				WmTask taskQuery = new WmTask();
-				taskQuery.setScorePackageId(tWmScorePackage.getId());
-				QueryWrapper<WmTask> taskQueryWrapper = Wrappers.query(taskQuery);
-				taskQueryWrapper.lambda()
-						.ne(WmTask::getTaskStatus, "4")
-						.eq(WmTask::getRealFlag, "0");
-//						.ne(WmTask::getRealFlag, "1");
-				List<WmTask> wmTaskList = wmTaskService.list(taskQueryWrapper);
-				/**
-				 * 判断定量还是定额 1- 定额   2-定量
-				 * 20210120 目前 1-定额  1包1人  2-定量   1包多人
-				 */
-
-				if ("1".equals(updatePke.getPackageType1())) {
-
-					int totalCount = 0;
-					for (WmTask wmtask : wmTaskList) {
-						totalCount += wmtask.getScore();
-					}
-
-					if (totalCount >= updatePke.getScore()) {
-						updatePke.setTaskAddFlag("0");
-						scorePackageStatus.setTaskAddFlag("0");
-						wmScorePackageStatusService.updateById(scorePackageStatus);
-					}
-					wmTask.setType("1");
-
-				} else if ("2".equals(updatePke.getPackageType1())) {
-
-					List<WmTask> userTaskList = wmTaskList.stream().filter(item ->
-							item.getTaskUserId().equals(sysU.getUserId() + "")).collect(Collectors.toList());
-
-					if (userTaskList.size() >= scorePackageStatus.getTaskNum()) {
-						scorePackageStatus.setTaskAddFlag("0");
-						wmScorePackageStatusService.updateById(scorePackageStatus);
-
-						/**
-						 * 改变大包状态
-						 */
-						WmScorePackageStatus queryAll = new WmScorePackageStatus();
-						queryAll.setPackageId(tWmScorePackage.getId());
-						queryAll.setStatus("2");
-						queryAll.setTaskAddFlag("0");
-						List<WmScorePackageStatus> statusAll = wmScorePackageStatusService.
-								list(Wrappers.query(queryAll));
-						if (new BigDecimal(updatePke.getUserNum())
-								.compareTo(new BigDecimal(statusAll.size())) <= 0) {
-							updatePke.setTaskAddFlag("0");
-						}
-					}
+			// 保存任务
+			WmTask task = createTask(taskTypeId, wmUserSign, sysU, tWmScorePackage);
+			task.setType(tWmScorePackage.getPackageType1());
+			// 操作积分包
+			operatePkgAndPkgStatus(tWmScorePackage, packageStatus, sysU, taskTypeId, wmUserSign);
 
-//					if (wmTaskList.size() >= updatePke.getTaskNum()) {
-//						updatePke.setTaskAddFlag("0");
-//					}
-					wmTask.setType("2");
-				}
-				updatePke.setIsConduct("1");
-				wmScorePackageService.updateById(updatePke);
-
-				// 如果配置了医院拜访的任务类型模板,则关联保存签到详情
-				if (wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(sysU.getDeptId(), wmTask.getTaskTypeId())) {
-					WmUserSignDetail userSignDetail = wmUserSign.getUserSignDetail();
-					if (userSignDetail != null) {
-						userSignDetail.setSignId(wmUserSign.getId());
-						wmUserSignDetailService.save(userSignDetail);
-					}
-				}
-				return R.ok(wmTask);
-			}
+			return R.ok(task);
 		}
 
 		return R.failed("签到保存失败");

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

@@ -90,5 +90,4 @@
 		WHERE ds.dept_id = #{deptId}
 	</select>
 
-
 </mapper>

+ 61 - 0
hnqz-upms/hnqz-upms-biz/src/test/java/com/qunzhixinxi/hnqz/admin/WmReportApprovalTest.java

@@ -0,0 +1,61 @@
+package com.qunzhixinxi.hnqz.admin;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = {HnqzAdminApplication.class})
+public class WmReportApprovalTest {
+
+    @Autowired
+    private WmTaskService wmTaskService;
+
+//    @Test
+    public void testApprovalData() {
+        String taskIdStr = "315679,\n" +
+                "315681,\n" +
+                "315682,\n" +
+                "315683,\n" +
+                "315685,\n" +
+                "315690,\n" +
+                "315695,\n" +
+                "315697,\n" +
+                "315703,\n" +
+                "315704,\n" +
+                "315705,\n" +
+                "315706,\n" +
+                "315707,\n" +
+                "315708,\n" +
+                "315709,\n" +
+                "315710,\n" +
+                "315711\n";
+        List<String> taskIdList = StrUtil.split(taskIdStr, ",")
+                .stream().map(String::trim)
+                .collect(Collectors.toList());;
+
+        taskIdList.forEach(id -> {
+            // 查询这条任务
+            WmTask queryTask = wmTaskService.getById(id);
+            if (queryTask == null) {
+                throw new RuntimeException("任务不存在");
+            }
+
+
+            // STEP4: 如果是源头积分包,则判断是否审核入库调查信息
+//            if (StringUtils.isNotBlank(reportScorePackage.getRelationScoreId())) {
+                wmTaskService.task15_30_16_18ForManualOperation(queryTask, "3", "手动审核通过入库"+ DateUtil.now());
+//            }
+            System.out.println("处理完成taskID="+id);
+        });
+    }
+}