Browse Source

Merge remote-tracking branch 'origin/temp-pre' into temp-pre

shc 2 năm trước cách đây
mục cha
commit
43ccbcb6f3
21 tập tin đã thay đổi với 971 bổ sung3 xóa
  1. 39 0
      db/v2.0/221109.sql
  2. 24 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  3. 120 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/MedicalEquipmentController.java
  4. 31 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java
  5. 13 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java
  6. 106 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/MedicalEquipment.java
  7. 13 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmReport.java
  8. 276 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/WmTaskVO.java
  9. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/MedicalEquipmentMapper.java
  10. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysDeptSubMapper.java
  11. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskMapper.java
  12. 22 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/MedicalEquipmentService.java
  13. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmReportService.java
  14. 68 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/MedicalEquipmentServiceImpl.java
  15. 3 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskTypeConfigServiceImpl.java
  16. 122 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java
  17. 18 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java
  18. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScoreTaskTypeServiceImpl.java
  19. 29 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java
  20. 2 3
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptSubMapper.xml
  21. 30 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

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

@@ -0,0 +1,39 @@
+-- 新增医疗器械表
+create table if not exists medical_equipment
+(
+    id            int auto_increment comment '医疗器械'
+        primary key,
+    name          varchar(64)      null comment '器械名称',
+    manufacturer  varchar(64)      null comment '生产厂家',
+    drug_ent_id   int              null comment '所属企业id',
+    drug_ent_name varchar(64)      null comment '所属企业名称',
+    specification varchar(64)      null comment '规格',
+    measure_unit  varchar(64)      null comment '计量单位组名称',
+    level         varchar(20)      null comment '等级',
+    remark        varchar(64)      null comment '备注',
+    del_flag      char default '0' null comment '删除标记,1:已删除,0:正常',
+    create_time   datetime         null comment '创建时间',
+    create_user   int              null comment '创建人',
+    update_time   datetime         null comment '更新时间',
+    update_user   int              null comment '更新人'
+)
+    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_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, '', '', '', '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', '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);
+

+ 24 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -32,6 +32,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.WmAdRecord;
 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.MedicalEquipment;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDistribution;
@@ -64,6 +65,7 @@ import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.UserSignResultEnum;
+import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptCsmService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
@@ -201,6 +203,7 @@ public class ApiController {
 	private final SysUserExtRecordService sysUserExtRecordService;
 	private final WmTaskSubmissionRuleService taskSubmissionRuleService;
 	private final SysDeptCsmService deptCsmService;
+	private final MedicalEquipmentService medicalEquipmentService;
 
 	@SysLog("通过任务类型获取表单配置")
 	@ApiOperation(value = "任务类型表单配置-通过任务类型获取表单配置", notes = "根据任务类型获取表单配置")
@@ -226,6 +229,9 @@ public class ApiController {
 		} else if ("39".equals(taskTypeId) || "40".equals(taskTypeId) || "41".equals(taskTypeId)) {
 			// 应收账款回款-A类、应收账款回款-B类、应收账款回款-C类 都取39
 			connfigMap = getTaskContentConfigByTaskTypeId("39");
+		} else if ("42".equals(taskTypeId) || "43".equals(taskTypeId) || "44".equals(taskTypeId)) {
+			// 手术跟台-一级/手术跟台-二级/手术跟台-三级 都取42
+			connfigMap = getTaskContentConfigByTaskTypeId("42");
 		} else {
 			connfigMap = getTaskContentConfigByTaskTypeId(taskTypeId);
 		}
@@ -389,6 +395,19 @@ public class ApiController {
 				} else if ("package_drug_list".equals(config.getDictGroupName())) {
 					// 前端自动获取
 					dictMap.put(config.getDictGroupName(), "package_drug_list");
+				} else if ("medical_equipment_list".equals(config.getDictGroupName())) {
+					List<Map<String, Object>> listMap = new ArrayList<>();
+					// 手术跟台任务类型-推广产品
+					List<MedicalEquipment> medicalEquipmentList = medicalEquipmentService.listByDrugId(SecurityUtils.getUser().getDeptId());
+					if (CollUtil.isNotEmpty(medicalEquipmentList)) {
+						listMap = medicalEquipmentList.stream().map(medicalEquipment -> {
+							Map<String, Object> equipmentMap = new HashMap<>();
+							equipmentMap.put("value", medicalEquipment.getId());
+							equipmentMap.put("label", medicalEquipment.getName());
+							return equipmentMap;
+						}).collect(Collectors.toList());
+					}
+					dictMap.put(config.getDictGroupName(), listMap);
 				}
 
 			}
@@ -417,6 +436,11 @@ public class ApiController {
 		if ("39".equals(taskTypeId) || "40".equals(taskTypeId) || "41".equals(taskTypeId)) {
 			taskTypeId  = "39";
 		}
+		if ("42".equals(taskTypeId) || "43".equals(taskTypeId) || "44".equals(taskTypeId)) {
+			// 手术跟台-一级/手术跟台-二级/手术跟台-三级 都取42
+			taskTypeId  = "42";
+		}
+
 		queryConn.setTaskTypeId(taskTypeId);
 		queryConn.setDelFlag("0");
 		queryConn.setEnableFlag("0");

+ 120 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/MedicalEquipmentController.java

@@ -0,0 +1,120 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
+import com.qunzhixinxi.hnqz.admin.entity.MedicalEquipment;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
+import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author: lixuesong
+ * @createTime: 2022/11/08 10:07
+ * @description: 医疗企业前端控制器
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/medical-equipment")
+public class MedicalEquipmentController {
+
+	private final MedicalEquipmentService medicalEquipmentService;
+
+	private final WmDaDrugEntService wmDaDrugEntService;
+
+	private final SysDeptRelationService sysDeptRelationService;
+
+	/**
+	 * 新增
+	 *
+	 * @param medicalEquipment
+	 * @return
+	 */
+	@PostMapping
+	public R<?> save(@Validated(BaseEntity.Create.class) @RequestBody MedicalEquipment medicalEquipment) {
+		int count = medicalEquipmentService.count(Wrappers.<MedicalEquipment>lambdaQuery()
+				.eq(MedicalEquipment::getDrugEntId, medicalEquipment.getDrugEntId())
+				.eq(MedicalEquipment::getName, medicalEquipment.getName()));
+		if (count > 0) {
+			return R.failed("所属企业下已存在");
+		}
+		medicalEquipmentService.save(medicalEquipment);
+		return R.ok();
+	}
+
+	/**
+	 * 修改
+	 *
+	 * @param medicalEquipment
+	 * @return
+	 */
+	@PutMapping
+	public R<?> update(@Validated(BaseEntity.Update.class) @RequestBody MedicalEquipment medicalEquipment) {
+		int count = medicalEquipmentService.count(Wrappers.<MedicalEquipment>lambdaQuery()
+				.eq(MedicalEquipment::getDrugEntId, medicalEquipment.getDrugEntId())
+				.eq(MedicalEquipment::getName, medicalEquipment.getName())
+				.ne(MedicalEquipment::getId, medicalEquipment.getId()));
+		if (count > 0) {
+			return R.failed("所属企业下已存在");
+		}
+		medicalEquipmentService.updateById(medicalEquipment);
+		return R.ok();
+	}
+
+	/**
+	 * 删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping("/{id}")
+	public R<?> remove(@PathVariable("id") Integer id) {
+		medicalEquipmentService.removeById(id);
+		return R.ok();
+	}
+
+	/**
+	 * 分页查询
+	 *
+	 * @param page
+	 * @param medicalEquipment
+	 * @return
+	 */
+	@GetMapping("/page")
+	public R<?> page(Page<MedicalEquipment> page, MedicalEquipment medicalEquipment) {
+		LambdaQueryWrapper<MedicalEquipment> queryWrapper = Wrappers.lambdaQuery();
+		if (StrUtil.isNotBlank(medicalEquipment.getName())) {
+			queryWrapper.like(MedicalEquipment::getName, medicalEquipment.getName());
+		}
+		if (StrUtil.isNotBlank(medicalEquipment.getManufacturer())) {
+			queryWrapper.like(MedicalEquipment::getManufacturer, medicalEquipment.getManufacturer());
+		}
+		if (StrUtil.isNotBlank(medicalEquipment.getDrugEntName())) {
+			queryWrapper.like(MedicalEquipment::getDrugEntName, medicalEquipment.getDrugEntName());
+		}
+		Page<MedicalEquipment> equipmentPage = medicalEquipmentService.page(page, queryWrapper);
+		return R.ok(equipmentPage);
+	}
+
+}

+ 31 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmReportController.java

@@ -17,12 +17,15 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
@@ -233,6 +236,22 @@ public class WmReportController {
 		return wmReportService.approvalReport(wmReport1,taskIds,approvalOpinion,approvalInfo);
 	}
 
+	/**
+	 * 结算报告--审批
+	 * reportStatus 1:待提交,2:已提交待审批 3:已部分审批  4:已退回 5:已审批待结单 6:已结单
+	 * @param taskIds 所选任务id
+	 * @return R
+	 */
+	@SysLog("批量任务类型结算报告--审批" )
+	@PostMapping("/approval-report-by-task")
+	public R approvalReportByTask(@RequestParam(value = "taskIds") List<String> taskIds,
+							String approvalOpinion,String approvalInfo) {
+		if(CollUtil.isEmpty(taskIds)){
+			return R.failed("taskIds必填");
+		}
+		return wmReportService.approvalReportByTaskType(taskIds,  approvalOpinion, approvalInfo);
+	}
+
 
 
 	/**
@@ -252,7 +271,19 @@ public class WmReportController {
 		return wmReportService.getTaskListPage(page,wmReport1, isApprovalPage);
 	}
 
+	/**
+	 * 根据任务类型查询任务
+	 *
+	 * @param page 分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param entTaskStatus 企业审核状态
+	 * @return
+	 */
+	@GetMapping("/task-page-by-type")
+	public R<?> taskPageByTaskType(Page<WmTaskVO> page, String taskTypeName, String[] entTaskStatus) {
 
+		return wmReportService.taskPageByTaskType(page, taskTypeName, entTaskStatus);
+	}
 
 
 

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

@@ -2434,6 +2434,19 @@ public class WmScorePackageController {
 						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType40);
 						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType41);
 					}
+					// 如果存在taskTypeId=42 则同时增加手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型(42/43/44)
+					if (wmScorePackage.getWmScoreTaskTypeList().stream().anyMatch(wmTaskTypeTree -> "42".equals(wmTaskTypeTree.getTaskTypeId()))) {
+						WmScoreTaskType addTaskType43 = new WmScoreTaskType();
+						addTaskType43.setScoreId(wmScorePackage.getId());
+						addTaskType43.setType("1");
+						addTaskType43.setTaskTypeId("43");
+						WmScoreTaskType addTaskType44 = new WmScoreTaskType();
+						addTaskType44.setScoreId(wmScorePackage.getId());
+						addTaskType44.setType("1");
+						addTaskType44.setTaskTypeId("44");
+						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType43);
+						wmScorePackage.getWmScoreTaskTypeList().add(addTaskType44);
+					}
 
 					List<WmScoreTaskType> wmScoreTaskTypess = new ArrayList<>();
 					for (WmScoreTaskType wmScoreTaskTypes : wmScorePackage.getWmScoreTaskTypeList()) {

+ 106 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/MedicalEquipment.java

@@ -0,0 +1,106 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 医疗器械
+ * @TableName medical_equipment
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value ="medical_equipment")
+public class MedicalEquipment extends Model<MedicalEquipment> {
+    /**
+     * 医疗器械id
+     */
+	@NotNull(message = "id不能为空", groups = BaseEntity.Update.class)
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 器械名称
+     */
+	@NotBlank(message = "器械名称不能为空", groups = BaseEntity.Create.class)
+    private String name;
+
+    /**
+     * 生产厂家
+     */
+	@NotBlank(message = "生产厂家不能为空", groups = BaseEntity.Create.class)
+    private String manufacturer;
+
+    /**
+     * 所属企业id
+     */
+	@NotNull(message = "所属企业id不能为空", groups = BaseEntity.Create.class)
+    private Integer drugEntId;
+
+    /**
+     * 所属企业名称
+     */
+    private String drugEntName;
+
+    /**
+     * 规格
+     */
+	@NotBlank(message = "规格不能为空", groups = BaseEntity.Create.class)
+    private String specification;
+
+    /**
+     * 计量单位组名称
+     */
+	@NotBlank(message = "计量单位组名称不能为空", groups = BaseEntity.Create.class)
+    private String measureUnit;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+	/**
+	 * 删除标记,1:已删除,0:正常
+	 */
+	@TableLogic
+	private String delFlag;
+
+	/**
+	 * 创建时间
+	 */
+	private LocalDateTime createTime;
+
+	/**
+	 * 创建人
+	 */
+	private Integer createUser;
+
+	/**
+	 * 更新时间
+	 */
+	private LocalDateTime updateTime;
+
+	/**
+	 * 更新人
+	 */
+	private Integer updateUser;
+
+}

+ 13 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmReport.java

@@ -28,6 +28,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 报告审核表
@@ -153,4 +154,16 @@ public class WmReport extends Model<WmReport> {
 	 */
 	@TableField(exist = false)
 	private WmReportOpt reportOpt;
+
+	/**
+	 * 任务类型id
+	 */
+	@TableField(exist = false)
+	private List<String> taskTypeIdList;
+
+	/**
+	 * 报告审批状态:0待审核 1通过,2不通过
+	 */
+	@TableField(exist = false)
+	private List<String> entTaskStatus;
 }

+ 276 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/WmTaskVO.java

@@ -0,0 +1,276 @@
+/*
+ *    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.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 任务表
+ *
+ * @author gaoyanng
+ * @date 2020-06-25 23:35:25
+ */
+@Data
+@ApiModel(value = "任务表")
+public class WmTaskVO implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 *
+	 */
+	@TableId
+	@ApiModelProperty(value="")
+	private String id;
+	/**
+	 * 任务类型ID
+	 */
+	@ApiModelProperty(value="任务类型ID")
+	private String taskTypeId;
+
+	@ApiModelProperty(value="任务得分")
+	Integer score;
+
+	@ApiModelProperty(value="任务提交到的积分包ID")
+	String scorePackageDrugId;
+
+	@ApiModelProperty(value="任务提交到的积分包ID")
+	String scorePackageLevel1Id;
+
+	@ApiModelProperty(value="任务类型ID")
+	String scorePackageId;
+
+	@ApiModelProperty(value="积分分配")
+	String taskRuleId;
+
+	/**
+	 * 调研时间
+	 */
+	@ApiModelProperty(value="调研时间")
+	private LocalDateTime lookintoDate;
+	/**
+	 * 省
+	 */
+	@ApiModelProperty(value="省")
+	private String province;
+	/**
+	 * 市
+	 */
+	@ApiModelProperty(value="市")
+	private String city;
+	/**
+	 * 区
+	 */
+	@ApiModelProperty(value="区")
+	private String area;
+	/**
+	 * 地址
+	 */
+	@ApiModelProperty(value="地址")
+	private String address;
+	/**
+	 * 调研类型ID
+	 */
+	@ApiModelProperty(value="调研类型ID")
+	private String lookintoTypeId;
+	/**
+	 * 任务内容ID
+	 */
+	@ApiModelProperty(value="任务内容ID")
+	private String taskContentId;
+	/**
+	 * 任务状态
+	 */
+	@ApiModelProperty(value="任务状态")
+	private String taskStatus;
+
+	/**
+	 * 提交审核状态
+	 */
+	@ApiModelProperty(value="提交审核状态")
+	private String submitStatus;
+
+	/**
+	 * 任务用户ID
+	 */
+	@ApiModelProperty(value="任务用户ID")
+	private String taskUserId;
+
+	/**
+	 * 用户类型ID
+	 */
+	@ApiModelProperty(value="用户类型ID")
+	private String taskUserType;
+
+	/**
+	 * 服务药企
+	 */
+	@ApiModelProperty(value="服务药企")
+	private String drugEntId;
+
+	/**
+	 * 分享图片地址
+	 */
+	@ApiModelProperty(value="服务药企")
+	private String shareImgUrl;
+
+	/**
+	 * 组织机构ID
+	 */
+	@ApiModelProperty(value="组织机构ID")
+	private String deptId;
+	/**
+	 * 是否删除
+	 */
+	@ApiModelProperty(value="是否删除")
+	private String delFlag;
+	/**
+	 * 是否禁用
+	 */
+	@ApiModelProperty(value="是否禁用")
+	private String enableFlag;
+	/**
+	 * 所属租户
+	 */
+	@ApiModelProperty(value="所属租户",hidden=true)
+	private Integer tenantId;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value="创建时间")
+	private LocalDateTime createTime;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value="创建人")
+	private Integer createUser;
+	/**
+	 * 更新时间
+	 */
+	@ApiModelProperty(value="更新时间")
+	private LocalDateTime updateTime;
+	/**
+	 * 更新人
+	 */
+	@ApiModelProperty(value="更新人")
+	private String updateUser;
+
+	private String platAuditStatus;
+
+	private List<String> extIds;
+
+	private String taskInfoImg;
+
+	/**
+	 * 对比结果
+	 */
+	@ApiModelProperty(value="对比结果")
+	private String compareResult;
+	/**
+	 * 审批意见
+	 */
+	@ApiModelProperty(value="审批意见")
+	private String approvalOpinion;
+	/**
+	 * 审批说明
+	 */
+	@ApiModelProperty(value="审批说明")
+	private String approvalInfo;
+
+	private String realFlag;
+
+	@ApiModelProperty(value="任务提交到一级cso的报告ID")
+	private Integer reportOneId;
+	@ApiModelProperty(value="任务提交到一级cso的报告审核状态")
+	private String reportOneApprovalStatus;
+	@ApiModelProperty(value="任务提交到一级cso的报告审批意见")
+	private String reportOneApprovalOpinion;
+	@ApiModelProperty(value="任务提交到一级cso的报告审批说明")
+	private String reportOneApprovalInfo;
+
+	@ApiModelProperty(value="任务提交到二级cso的报告ID")
+	private Integer reportSecondId;
+	@ApiModelProperty(value="任务提交到二级cso的报告审核状态")
+	private String reportSecondApprovalStatus;
+	@ApiModelProperty(value="任务提交到二级cso的报告审批意见")
+	private String reportSecondApprovalOpinion;
+	@ApiModelProperty(value="任务提交到二级cso的报告审批说明")
+	private String reportSecondApprovalInfo;
+
+	@ApiModelProperty(value="任务提交到药企的报告ID")
+	private Integer reportDrugId;
+	@ApiModelProperty(value="任务提交到药企的报告审核状态")
+	private String reportDrugApprovalStatus;
+	@ApiModelProperty(value="任务提交到药企的报告审批意见")
+	private String reportDrugApprovalOpinion;
+	@ApiModelProperty(value="任务提交到药企的报告审批说明")
+	private String reportDrugApprovalInfo;
+
+	/**
+	 * 接单对象list
+	 */
+	private WmTaskContent wmTaskContent;
+
+	private String type;
+
+	/**
+	 * cso审批说明
+	 */
+	@ApiModelProperty(value="cso审批说明")
+	private String taskStatusInfo;
+
+
+	private String taskFrom;
+
+	/**
+	 * 任务用户用户名
+	 */
+	private String taskUsername;
+
+	/**
+	 * 关联的用户手机号
+	 */
+	private String username;
+
+	/**
+	 * 报告单号
+	 */
+	private String reportNo;
+
+	/**
+	 * 源头包积分包id
+	 */
+	private String scoreId;
+
+	/**
+	 * 分配对象类型(0-药企,1-一级CSO,2-二级CSO)
+	 */
+	private String typeid;
+
+	/**
+	 * 积分包名称
+	 */
+	private String scorePackageName;
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/MedicalEquipmentMapper.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.MedicalEquipment;
+
+/**
+ * @author lixuesong
+ * @description 针对表【medical_equipment(医疗器械)】的数据库操作Mapper
+ * @createDate 2022-11-08 10:03:50
+ * @Entity com.qunzhixinxi.hnqz.admin.entity.MedicalEquipment
+ */
+public interface MedicalEquipmentMapper extends BaseMapper<MedicalEquipment> {
+
+
+}

+ 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);
 }

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmTaskMapper.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScopeMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -201,4 +202,13 @@ public interface WmTaskMapper extends DataScopeMapper<WmTask> {
 	 */
 	Long countMeetingTask(@Param("taskTypeList") List<String> taskTypeList, @Param("taskUserId") String taskUserId,
 						  @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+	/**
+	 * 企业审核查询任务列表
+	 *
+	 * @param page
+	 * @param wmReport
+	 * @return
+	 */
+	IPage<WmTaskVO> entTaskPageByTaskType(Page<WmTaskVO> page, @Param("query") WmReport wmReport);
 }

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

@@ -0,0 +1,22 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.MedicalEquipment;
+
+import java.util.List;
+
+/**
+ * @author lixuesong
+ * @description 针对表【medical_equipment(医疗器械)】的数据库操作Service
+ * @createDate 2022-11-08 10:03:50
+ */
+public interface MedicalEquipmentService extends IService<MedicalEquipment> {
+
+	/**
+	 * 查询指定企业对应的医疗器械
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	List<MedicalEquipment> listByDrugId(Integer deptId);
+}

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmReportService.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
+import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
 import java.util.List;
@@ -39,9 +40,29 @@ public interface WmReportService extends IService<WmReport> {
 
 	R approvalReport(WmReport wmReport, List<String> taskIds, String approvalOpinion, String approvalInfo);
 
+	/**
+	 * 企业根据任务类型审核任务
+	 *
+	 * @param taskIds
+	 * @param approvalOpinion
+	 * @param approvalInfo
+	 * @return
+	 */
+	R<?> approvalReportByTaskType(List<String> taskIds, String approvalOpinion, String approvalInfo);
+
 	R getTaskListPage(Page page, WmReport wmReport, Integer isApprovalPage);
 
 	IPage<WmReport> getReportListPage(Page page, WmReport wmReport, String scoreId, String name);
 
+	/**
+	 * 根据任务类型查询任务
+	 *
+	 * @param page
+	 * @param taskTypeName
+	 * @param entTaskStatus
+	 * @return
+	 */
+	R<?> taskPageByTaskType(Page<WmTaskVO> page, String taskTypeName, String[] entTaskStatus);
+
 
 }

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

@@ -0,0 +1,68 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
+import com.qunzhixinxi.hnqz.admin.entity.MedicalEquipment;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.mapper.MedicalEquipmentMapper;
+import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
+import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author lixuesong
+ * @description 针对表【medical_equipment(医疗器械)】的数据库操作Service实现
+ * @createDate 2022-11-08 10:03:50
+ */
+@Service
+@AllArgsConstructor
+public class MedicalEquipmentServiceImpl extends ServiceImpl<MedicalEquipmentMapper, MedicalEquipment>
+		implements MedicalEquipmentService {
+
+	private final WmDaDrugEntService wmDaDrugEntService;
+
+	private final SysDeptRelationService sysDeptRelationService;
+
+	/**
+	 * 查询指定企业对应的医疗器械
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	public List<MedicalEquipment> listByDrugId(Integer deptId) {
+		// 查询父级企业id
+		SysDeptRelation deptRelation = sysDeptRelationService.getOne(Wrappers.<SysDeptRelation>lambdaQuery()
+				.eq(SysDeptRelation::getDescendant, deptId)
+				.ne(SysDeptRelation::getAncestor, deptId));
+		if (deptRelation == null) {
+			return Collections.emptyList();
+		}
+		// Ancestor() != 1 表明不是第一级的药企
+		if (deptRelation.getAncestor() != 1) {
+			// 查询是否存在父级的父级
+			SysDeptRelation pDeptRelation = sysDeptRelationService.getOne(Wrappers.<SysDeptRelation>lambdaQuery()
+					.eq(SysDeptRelation::getDescendant, deptRelation.getAncestor())
+					.ne(SysDeptRelation::getAncestor, deptRelation.getAncestor()));
+			if (pDeptRelation != null && pDeptRelation.getAncestor() == 1) {
+				deptRelation = pDeptRelation;
+			}
+		}
+
+		// 查询企业对应药企id
+		WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntService.selectByDeptId(deptRelation.getDescendant());
+
+		if (wmDaDrugEnt == null) {
+			return Collections.emptyList();
+		}
+
+		return this.list(Wrappers.<MedicalEquipment>lambdaQuery()
+				.eq(MedicalEquipment::getDrugEntId, wmDaDrugEnt.getId()));
+	}
+}

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

@@ -147,6 +147,9 @@ public class WmDeptTaskTypeConfigServiceImpl extends ServiceImpl<WmDeptTaskTypeC
 			add("应收账款回款-A类");
 			add("应收账款回款-B类");
 			add("应收账款回款-C类");
+			add("手术跟台-一级");
+			add("手术跟台-二级");
+			add("手术跟台-三级");
 		}};
 		BASE_TASK_TYPE_MAP.put("专项服务", medicineList);
 

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

@@ -17,7 +17,9 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
@@ -35,22 +37,31 @@ import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.WmDeptTaskTypeConfigJsonDTO;
+import com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO;
+import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmReportMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeConfigService;
 import com.qunzhixinxi.hnqz.admin.service.WmReportService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -58,9 +69,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 /**
@@ -69,18 +82,22 @@ import java.util.stream.Collectors;
  * @author pigx code generator
  * @date 2020-12-21 20:57:26
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> implements WmReportService {
 
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageStatusService wmScorePackageStatusService;
+	private final WmTaskTypeService wmTaskTypeService;
 	private final WmTaskService wmTaskService;
+	private final WmTaskMapper wmTaskMapper;
 	private final WmReportMapper wmReportMapper;
 	private final SysUserService sysUserService;
 	private final WmDaDistributionService wmDaDistributionService;
 	private final WmDaPharmacyService wmDaPharmacyService;
 	private final WmDaHospitalService wmDaHospitalService;
+	private final WmDeptTaskTypeConfigService wmDeptTaskTypeConfigService;
 	private final RedisTemplate<String,String> redisTemplate;
 
 	@Override
@@ -385,6 +402,45 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 		return R.ok("审批成功");
 	}
 
+	/**
+	 * 企业根据任务类型审核任务
+	 *
+	 * @param taskIds
+	 * @param approvalOpinion
+	 * @param approvalInfo
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R<?> approvalReportByTaskType(List<String> taskIds, String approvalOpinion, String approvalInfo) {
+		LambdaQueryWrapper<WmTask> queryWrapper = new LambdaQueryWrapper<>();
+		queryWrapper.in(WmTask::getId, taskIds);
+		List<WmTask> wmTaskList = wmTaskService.list(queryWrapper);
+
+		// 根据task任务表 反查report报告表
+		// 以reportId(reportDrugId或reportOneId字段)为key进行分类
+		Map<Integer, List<WmTask>> reportIdMap = wmTaskList.stream()
+				.filter(wmTask -> wmTask.getReportDrugId() != null || wmTask.getReportOneId() != null)
+				.collect(Collectors.groupingBy(wmTask -> wmTask.getReportDrugId() != null ?
+						wmTask.getReportDrugId() : wmTask.getReportOneId()));
+
+		AtomicBoolean successFlag = new AtomicBoolean(true);
+		reportIdMap.forEach((reportId, wmTasks) -> {
+			WmReport queryReport = this.getById(reportId);
+			List<String> taskIdList = wmTasks.stream().map(WmTask::getId).collect(Collectors.toList());
+			log.info("企业批量审核任务reportId={}, taskIds={}", reportId, taskIdList);
+
+			// 调用原有审核方法
+			R approvalReportResult = this.approvalReport(queryReport, taskIdList, approvalOpinion, approvalInfo);
+
+			if (approvalReportResult.getCode() != 0) {
+				successFlag.set(false);
+			}
+		});
+
+		return successFlag.get() ? R.ok("审批成功") : R.failed("审批失败");
+	}
+
 	/**
 	 * 报告管理--查看
 	 * @param page
@@ -453,7 +509,73 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 		return R.ok(pages);
 	}
 
+	/**
+	 * 根据任务类型查询任务
+	 *
+	 * @param page 分页参数
+	 * @param taskTypeName 任务类型名称
+	 * @param entTaskStatus 审核状态 0待审核 1通过,2不通过
+	 * @return
+	 */
+	@Override
+	public R<?> taskPageByTaskType(Page<WmTaskVO> page, String taskTypeName, String[] entTaskStatus) {
+
+		LambdaQueryWrapper<WmTaskType> queryWrapper = Wrappers.<WmTaskType>lambdaQuery()
+				.eq(WmTaskType::getTaskTypeLevel, "1")
+				.eq(WmTaskType::getEnableFlag, EnableEnum.ENABLE.val());
+				if (StrUtil.isNotBlank(taskTypeName)) {
+					queryWrapper.eq(WmTaskType::getTaskTypeName, taskTypeName);
+				} else {
+					// 查询该企业配置的任务类型
+					WmDeptTaskTypeConfigDTO deptTaskTypeConfig =
+							wmDeptTaskTypeConfigService.getDeptTaskTypeConfig(SecurityUtils.getUser().getDeptId());
+					List<String> taskTypeNames = deptTaskTypeConfig.getConfigList().stream()
+							.map(WmDeptTaskTypeConfigJsonDTO::getTaskTypeName)
+							.collect(Collectors.toList());
+					queryWrapper.in(WmTaskType::getTaskTypeName, taskTypeNames);
+				}
+		List<WmTaskType> baseTaskTypeList = wmTaskTypeService.list(queryWrapper);
+		if (CollUtil.isEmpty(baseTaskTypeList)) {
+			log.warn("任务类型不存在tastTypeName={}", baseTaskTypeList);
+			return R.failed("任务类型不存在");
+		}
+
+		WmReport queryReport = new WmReport();
+		queryReport.setDrugEntId(SecurityUtils.getUser().getDeptId());
+		queryReport.setTaskTypeIdList(baseTaskTypeList.stream().map(WmTaskType::getId).collect(Collectors.toList()));
+		if (ArrayUtil.isNotEmpty(entTaskStatus)) {
+			queryReport.setEntTaskStatus(Arrays.asList(entTaskStatus));
+		}
+		IPage<WmTaskVO> pages = wmTaskMapper.entTaskPageByTaskType(page, queryReport);
+
+		Page<Map<String, Object>> mapPage = new Page<>(pages.getCurrent(), pages.getSize(), pages.getTotal());
+		List<WmTaskVO> taskList = pages.getRecords();
+		if (CollUtil.isNotEmpty(taskList)) {
+			List<Map<String, Object>> resList = taskList.stream().map(wmtask -> {
+				Map<String, Object> map = JSON.parseObject(JSON.toJSONString(wmtask), Map.class);
+				map.put("reportNo", wmtask.getReportNo());
+				map.put("scoreId", wmtask.getScoreId());
+				if ("0".equals(wmtask.getTypeid())) {//药企
+					map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
+				} else if ("1".equals(wmtask.getTypeid())) {//一级代理商类型
+					map.put("reportApprovalOpinion", wmtask.getReportDrugApprovalOpinion());
+				} else if ("2".equals(wmtask.getTypeid())) {//二级代理商类型
+					map.put("reportApprovalOpinion", wmtask.getReportOneApprovalOpinion());
+				}
+				// 姓名
+				if (StringUtils.isNumeric(wmtask.getTaskUserId())) {
+					SysUser user = sysUserService.getById(Integer.parseInt(wmtask.getTaskUserId()));
+					map.put("taskUsername", user.getRealname());
+				}
+				// 积分包名称设置到scorePackageId上 适配页面
+				map.put("scorePackageId", wmtask.getScorePackageName());
+				return map;
+			}).collect(Collectors.toList());
 
+			mapPage.setRecords(resList);
+		}
+		return R.ok(mapPage);
+	}
 }
 
 

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

@@ -757,6 +757,15 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 					tasktypeList.add(addTaskTypeTree40);
 					tasktypeList.add(addTaskTypeTree41);
 				}
+				// 如果存在taskTypeId=42 则同时增加手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型(42/43/44)
+				if (tasktypeList.stream().anyMatch(wmTaskTypeTree -> "42".equals(wmTaskTypeTree.getTaskTypeId()))) {
+					WmTaskTypeTree addTaskTypeTree43 = new WmTaskTypeTree();
+					addTaskTypeTree43.setTaskTypeId("43");
+					WmTaskTypeTree addTaskTypeTree44 = new WmTaskTypeTree();
+					addTaskTypeTree44.setTaskTypeId("44");
+					tasktypeList.add(addTaskTypeTree43);
+					tasktypeList.add(addTaskTypeTree44);
+				}
 
 				for (WmTaskTypeTree type : tasktypeList) {
 					WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
@@ -1363,6 +1372,15 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 					wmScorePackage.getTaskTypeList().add(addTaskTypeTree40);
 					wmScorePackage.getTaskTypeList().add(addTaskTypeTree41);
 				}
+				// 如果存在taskTypeId=42 则同时增加手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型(42/43/44)
+				if (wmScorePackage.getTaskTypeList().stream().anyMatch(wmTaskTypeTree -> "42".equals(wmTaskTypeTree.getTaskTypeId()))) {
+					WmTaskTypeTree addTaskTypeTree43 = new WmTaskTypeTree();
+					addTaskTypeTree43.setTaskTypeId("43");
+					WmTaskTypeTree addTaskTypeTree44 = new WmTaskTypeTree();
+					addTaskTypeTree44.setTaskTypeId("44");
+					wmScorePackage.getTaskTypeList().add(addTaskTypeTree43);
+					wmScorePackage.getTaskTypeList().add(addTaskTypeTree44);
+				}
 
 				for (WmTaskTypeTree type : tasktypeList) {
 					WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();

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

@@ -92,6 +92,14 @@ public class WmScoreTaskTypeServiceImpl extends ServiceImpl<WmScoreTaskTypeMappe
 				// 应收账款回款-A类/应收账款回款-B类/应收账款回款-C类 统一回显为一个‘应收账款回款’
 				continue;
 			}
+			if (StrUtil.equals("42", type.getId())) {
+				type.setTaskTypeName("手术跟台");
+			}
+			if (StrUtil.equals("43", type.getId()) || StrUtil.equals("44", type.getId())) {
+				// 手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型 统一回显为一个‘手术跟台’
+				continue;
+			}
+
 			if(resultMap.containsKey(type.getParentId())){
 				String typeName = resultMap.get(type.getParentId());
 				typeName = typeName +";"+ type.getTaskTypeName();

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

@@ -1070,6 +1070,35 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 					score = (int) Math.round(score * Double.parseDouble(wmTaskContent.getTemp8()) / 1000.0D);
 				}
 
+				// 手术跟台-一级/手术跟台-二级/手术跟台-三级任务类型 积分值设置
+				if ("42".equals(wmTaskContent.getTemp30())) {
+					// 根据选择的跟台级别 设置积分值
+					String taskTypeId = "42";
+					switch (wmTaskContent.getTemp23()) {
+						case "1":
+							taskTypeId = "42";
+							break;
+						case "2":
+							taskTypeId = "43";
+							break;
+						case "3":
+							taskTypeId = "44";
+							break;
+						default:
+					}
+					WmTaskType baseTaskType = wmTaskTypeService.getById(taskTypeId);
+					// 查询当前企业的任务类型积分
+					WmTaskType wmTaskType2 = new WmTaskType();
+					WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmTaskContent.getTemp32());
+					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+					wmTaskType2.setTaskTypeName(baseTaskType.getTaskTypeName());
+					wmTaskType2.setRuleId(wmScorePackage1.getRuleId());
+					score = wmTaskTypeService.getWmTaskTypeByEnt(wmTaskType2);
+					// 设置实际的任务类型
+					wmTaskContent.setTemp30(taskTypeId);
+					wmTask.setTaskTypeId(taskTypeId);
+				}
+
 				log.info("获取任务得分:{}", score);
 
 				if (score < 0) {

+ 2 - 3
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptSubMapper.xml

@@ -17,8 +17,8 @@
 
 	<resultMap id="serviceChargeMap" type="com.qunzhixinxi.hnqz.admin.api.vo.SysEnterpriseServiceChargeVO">
 		<id property="entId" column="ent_id"/>
-		<result property="subjectLocation" column="app_id"/>
-		<result property="serviceCharge" column="app_secret"/>
+		<result property="subjectLocation" column="subject_location"/>
+		<result property="serviceCharge" column="service_charge"/>
 	</resultMap>
 
 	<select id="getSettleAmountMonitor" resultType="com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput">
@@ -90,5 +90,4 @@
 		WHERE ds.dept_id = #{deptId}
 	</select>
 
-
 </mapper>

+ 30 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmTaskMapper.xml

@@ -1332,4 +1332,34 @@ FROM
 	  	AND wm_task_content.temp4 BETWEEN #{startTime} AND #{endTime}
 		AND wm_task.task_status != 4
 	</select>
+
+	<!-- 企业审核查询任务列表 -->
+    <select id="entTaskPageByTaskType" resultType="com.qunzhixinxi.hnqz.admin.entity.vo.WmTaskVO">
+		select t.*, r.report_no, r.score_id, p.typeid, p.score_package_name
+		from wm_task t
+				 left join wm_report r on t.report_one_id = r.id or t.report_second_id = r.id or t.report_drug_id = r.id
+				 left join wm_score_package p on p.id = r.score_id
+		where r.drug_ent_id = #{query.drugEntId}
+		  and t.task_type_id in
+		<foreach collection="query.taskTypeIdList" item="item" index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
+		<foreach collection="query.entTaskStatus" item="item" index="index" separator="or" open="and (" close=")">
+			<if test="item == 1">
+			  (p.typeid = 0 and t.report_drug_approval_opinion = #{item}
+			  or p.typeid = 1 and t.report_drug_approval_opinion = #{item}
+			  or p.typeid = 2 and t.report_one_approval_opinion = #{item})
+			</if>
+			<if test="item == 2">
+				(p.typeid = 0 and t.report_drug_approval_opinion = #{item}
+				or p.typeid = 1 and t.report_drug_approval_opinion = #{item}
+				or p.typeid = 2 and t.report_one_approval_opinion = #{item})
+			</if>
+			<if test="item == 0">
+			  (p.typeid = 0 and t.report_drug_approval_opinion is null
+				or p.typeid = 1 and t.report_drug_approval_opinion is null
+				or p.typeid = 2 and t.report_one_approval_opinion is null)
+			</if>
+		</foreach>
+	</select>
 </mapper>