Prechádzať zdrojové kódy

Merge branch 'feat-20240229-csm'

lixuesong 1 rok pred
rodič
commit
4653e96049
67 zmenil súbory, kde vykonal 1351 pridanie a 2207 odobranie
  1. 16 0
      db/v2.0/20240229.sql
  2. 3 2
      hnqz-common/hnqz-common-log/src/main/java/com/qunzhixinxi/hnqz/common/log/aspect/SysLogAspect.java
  3. 27 0
      hnqz-common/hnqz-common-log/src/main/java/com/qunzhixinxi/hnqz/common/log/util/SysLogUtils.java
  4. 11 1
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserDTO.java
  5. 30 1
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysDept.java
  6. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysDeptCsm.java
  7. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysLog.java
  8. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/UserVO.java
  9. 10 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  10. 14 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ReportExportController.java
  11. 152 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysDeptController.java
  12. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysRoleController.java
  13. 39 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
  14. 42 9
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaAgentController.java
  15. 28 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaDrugEntController.java
  16. 19 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaDrugEntDrugtableController.java
  17. 80 8
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java
  18. 333 102
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java
  19. 25 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmWkAlbumController.java
  20. 20 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmWkArticleController.java
  21. 27 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysCsmUserRelation.java
  22. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaAgent.java
  23. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaDrugEnt.java
  24. 30 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackage.java
  25. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/NotifyByOneSelfDTO.java
  26. 4 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java
  27. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleOutput.java
  28. 24 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/EnableEnum.java
  29. 20 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysCsmUserRelationMapper.java
  30. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserMapper.java
  31. 0 73
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeDictController.java
  32. 0 46
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeFileController.java
  33. 0 111
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeMedicineController.java
  34. 0 108
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTeamController.java
  35. 0 326
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeTenantController.java
  36. 0 110
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/controller/OeUserController.java
  37. 0 126
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeMedicineRequest.java
  38. 0 73
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTeamRequest.java
  39. 0 321
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeTenantRequest.java
  40. 0 167
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/dto/OeUserRequest.java
  41. 0 37
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeDictItemVO.java
  42. 0 88
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeMedicineVO.java
  43. 0 47
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTeamVO.java
  44. 0 80
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTenantVO.java
  45. 0 72
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeTerminalVO.java
  46. 0 112
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/entity/vo/OeUserVO.java
  47. 0 10
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeDictService.java
  48. 0 4
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeTenantService.java
  49. 0 25
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/OeUserService.java
  50. 0 28
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeDictServiceImpl.java
  51. 0 15
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeTenantServiceImpl.java
  52. 0 40
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/oe/service/impl/OeUserServiceImpl.java
  53. 24 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysCsmUserRelationService.java
  54. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java
  55. 0 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/ReportExportServiceImpl.java
  56. 59 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysCsmUserRelationServiceImpl.java
  57. 55 11
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptServiceImpl.java
  58. 74 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java
  59. 44 8
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaAgentServiceImpl.java
  60. 4 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaDrugEntDrugtableServiceImpl.java
  61. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaDrugEntServiceImpl.java
  62. 3 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java
  63. 6 6
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptInvoiceRelationMapper.xml
  64. 32 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml
  65. 11 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaAgentMapper.xml
  66. 12 2
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDrugEntMapper.xml
  67. 15 9
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

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

@@ -0,0 +1,16 @@
+alter table sys_dept_csm
+    add user_id int null comment '用户id' after csm_name;
+
+
+create table sys_csm_user_relation
+(
+    user_id   int not null comment 'csm用户id',
+    parent_id int not null comment '父级用户id',
+    primary key (user_id, parent_id)
+)
+    comment 'csm用户关系表' charset = utf8mb4;
+
+
+alter table sys_log
+    add resp text null comment '响应信息' after params;
+

+ 3 - 2
hnqz-common/hnqz-common-log/src/main/java/com/qunzhixinxi/hnqz/common/log/aspect/SysLogAspect.java

@@ -47,13 +47,14 @@ public class SysLogAspect {
 	public Object around(ProceedingJoinPoint point, SysLog sysLog) {
 		String strClassName = point.getTarget().getClass().getName();
 		String strMethodName = point.getSignature().getName();
+		Object[] args = point.getArgs();
 		log.debug("[类名]:{},[方法]:{}", strClassName, strMethodName);
 
-		com.qunzhixinxi.hnqz.admin.api.entity.SysLog logVo = SysLogUtils.getSysLog();
-		logVo.setTitle(sysLog.value());
 		// 发送异步日志事件
 		Long startTime = System.currentTimeMillis();
 		Object obj = point.proceed();
+		com.qunzhixinxi.hnqz.admin.api.entity.SysLog logVo = SysLogUtils.getSysLog(args, obj);
+		logVo.setTitle(sysLog.value());
 		Long endTime = System.currentTimeMillis();
 		logVo.setTime(endTime - startTime);
 		publisher.publishEvent(new SysLogEvent(logVo));

+ 27 - 0
hnqz-common/hnqz-common-log/src/main/java/com/qunzhixinxi/hnqz/common/log/util/SysLogUtils.java

@@ -19,12 +19,15 @@
 
 package com.qunzhixinxi.hnqz.common.log.util;
 
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.URLUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysLog;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import lombok.experimental.UtilityClass;
+import org.springframework.http.HttpMethod;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.oauth2.provider.OAuth2Authentication;
@@ -57,6 +60,30 @@ public class SysLogUtils {
 		return sysLog;
 	}
 
+	/**
+	 * 获取SYS日志
+	 *
+	 * @param args 请求参数
+	 * @param obj  响应参数
+	 * @return {@link SysLog} 结果
+	 */
+	public SysLog getSysLog(Object[] args, Object obj) {
+		HttpServletRequest request = ((ServletRequestAttributes) Objects
+				.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+		SysLog sysLog = new SysLog();
+		sysLog.setCreateBy(Objects.requireNonNull(getUsername()));
+		sysLog.setType(CommonConstants.STATUS_NORMAL);
+		sysLog.setRemoteAddr(ServletUtil.getClientIP(request));
+		sysLog.setRequestUri(URLUtil.getPath(request.getRequestURI()));
+		sysLog.setMethod(request.getMethod());
+		sysLog.setUserAgent(request.getHeader("user-agent"));
+		Object o = ArrayUtil.get(args, 0);
+		sysLog.setParams(JSONUtil.toJsonStr(o));
+		sysLog.setResp(JSONUtil.toJsonStr(obj));
+		sysLog.setServiceId(getClientId());
+		return sysLog;
+	}
+
 	public SysLog getSysLog(HttpServletRequest request, String username) {
 		SysLog sysLog = new SysLog();
 		sysLog.setCreateBy(username);

+ 11 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserDTO.java

@@ -3,9 +3,9 @@ package com.qunzhixinxi.hnqz.admin.api.dto;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import rx.Subscription;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author hnqz
@@ -53,4 +53,14 @@ public class UserDTO extends SysUser {
 	 */
 	private List<Integer> userIdList;
 
+	/**
+	 * 上级主管
+	 */
+	private List<Integer> parentIdList;
+
+	/**
+	 * csm用户id
+	 */
+	private Set<Integer> csmUserIdList;
+
 }

+ 30 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysDept.java

@@ -79,7 +79,11 @@ public class SysDept extends Model<SysDept> {
 	@TableLogic
 	private String delFlag;
 
-
+	/**
+	 * 是否启用名称
+	 */
+	@TableField(exist = false)
+	private String delFlagName;
 
 	/**
 	 *
@@ -89,6 +93,13 @@ public class SysDept extends Model<SysDept> {
 	 * 级别
 	 */
 	private Integer level;
+
+	/**
+	 * 级别名称(企业类型)
+	 */
+	@TableField(exist = false)
+	private String levelName;
+
 	/**
 	 * 药企名称
 	 */
@@ -158,4 +169,22 @@ public class SysDept extends Model<SysDept> {
 	 */
 	private UpmsType.FinancialReviewType financialReviewType;
 
+	/**
+	 * csm负责人
+	 */
+	@TableField(exist = false)
+	private String csmNames;
+
+	/**
+	 * csm负责人用户id
+	 */
+	@TableField(exist = false)
+	private Integer[] csmUserIds;
+
+	/**
+	 * 上级企业名称
+	 */
+	@TableField(exist = false)
+	private String superDeptName;
+
 }

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

@@ -48,4 +48,9 @@ public class SysDeptCsm implements Serializable {
 	 * 客户成功姓名
 	 */
 	private String csmName;
+
+	/**
+	 * 用户id
+	 */
+	private Integer userId;
 }

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

@@ -80,6 +80,11 @@ public class SysLog implements Serializable {
 	 */
 	private String params;
 
+	/**
+	 * 响应信息
+	 */
+	private String resp;
+
 	/**
 	 * 执行时间
 	 */

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

@@ -234,4 +234,9 @@ public class UserVO implements Serializable {
 	@TableField(exist = false)
 	private List<WmQuizResultModel> quizResult;
 
+	/**
+	 * 上级主管
+	 */
+	private List<Integer> parentIdList;
+
 }

+ 10 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -12,6 +12,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.IdcardUtil;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
@@ -865,8 +866,15 @@ public class ApiController {
 			mapOne.put("deptName", sysDept.getName());
 
 			// 获取csm信息
-			SysDeptCsm deptCsm = deptCsmService.getOne(Wrappers.<SysDeptCsm>lambdaQuery().eq(SysDeptCsm::getDeptId, sysU.getDeptId()));
-			mapOne.put("csm", deptCsm);
+			List<SysDeptCsm> deptCsms = deptCsmService.list(Wrappers.<SysDeptCsm>lambdaQuery()
+					.eq(SysDeptCsm::getDeptId, sysU.getDeptId())
+					.isNotNull(SysDeptCsm::getCorpId)
+					.isNotNull(SysDeptCsm::getQrCodeId));
+			if (CollUtil.isNotEmpty(deptCsms)) {
+				// 如果有多个,随机获取一个
+				SysDeptCsm deptCsm = RandomUtil.randomEle(deptCsms);
+				mapOne.put("csm", deptCsm);
+			}
 
 			String management;
 			if (sysDept.getLevel() == 2) {

+ 14 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ReportExportController.java

@@ -76,7 +76,18 @@ public class ReportExportController {
 	private final RedisTemplate<String,String> redisTemplate;
 	private final RabbitMqClient rabbitMqClient;
 
+	/**
+	 * 报告导出--个人报告导出分页查询 用于BC
+	 *
+	 * @param page           分页对象
+	 * @param wmScorePackage 积分包
+	 * @return
+	 */
+	@GetMapping("/getExportPackageZbTotalListForBC")
+	public R getExportPackageZbTotalListForBC(Page page, WmScorePackage wmScorePackage) {
 
+		return reportExportService.getExportPackageZbTotalList(page,wmScorePackage);
+	}
 
 	/**
 	 * 报告导出--个人报告导出分页查询
@@ -87,6 +98,9 @@ public class ReportExportController {
 	 */
 	@GetMapping("/getExportPackageZbTotalList")
 	public R getExportPackageZbTotalList(Page page, WmScorePackage wmScorePackage) {
+
+		wmScorePackage.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
+
 		return reportExportService.getExportPackageZbTotalList(page,wmScorePackage);
 	}
 

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

@@ -1,14 +1,25 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 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.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
 import com.qunzhixinxi.hnqz.admin.entity.WmDeptRegulations;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.DeptLevelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptCsmMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
@@ -32,6 +43,9 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -56,6 +70,12 @@ public class SysDeptController {
 
 	private final WmDeptRegulationsService wmDeptRegulationsService;
 
+	private final SysDeptCsmMapper sysDeptCsmMapper;
+
+	private final SysUserMapper sysUserMapper;
+
+	private final SysDeptRelationMapper sysDeptRelationMapper;
+
 	/**
 	 * 获取登录用户企业的有效期
 	 *
@@ -475,12 +495,137 @@ public class SysDeptController {
 		return R.ok(list);
 	}
 
+	/**
+	 * 分页查询企业-用于BC总负责人
+	 *
+	 * @param name    企业名称
+	 * @param csmName 负责人
+	 * @param level   企业类型(2-药企,3-CSO,4-CSO,5-其他)
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@GetMapping("/page-dept-for-bc")
+	public R<IPage<SysDept>> pageDeptForCsm(Page<SysDept> page, String name, String csmName, Integer level) {
+		LambdaQueryWrapper<SysDept> queryWrapper = Wrappers.lambdaQuery();
+		if (StrUtil.isNotBlank(name)) {
+			queryWrapper.like(SysDept::getName, name);
+		}
+		if (StrUtil.isNotBlank(csmName)) {
+			List<SysUser> users = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
+					.eq(SysUser::getRealname, csmName));
+			if (CollUtil.isEmpty(users)) {
+				return R.ok(page);
+			}
+			Set<Integer> userIds = users.stream().map(SysUser::getUserId).collect(Collectors.toSet());
+			List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+					.in(SysDeptCsm::getUserId, userIds));
+			if (CollUtil.isEmpty(deptCsms)) {
+				return R.ok(page);
+			}
+			Set<Integer> deptIds = deptCsms.stream().map(SysDeptCsm::getDeptId).collect(Collectors.toSet());
+			queryWrapper.in(SysDept::getDeptId, deptIds);
+		}
+		if (level != null) {
+			queryWrapper.eq(SysDept::getLevel, level);
+		}
+
+		queryWrapper.ne(SysDept::getLevel, DeptLevelEnum.ADMIN.getVal());
+		sysDeptService.page(page, queryWrapper);
+
+		List<SysDept> records = page.getRecords();
+		if (CollUtil.isEmpty(records)) {
+			return R.ok(page);
+		}
+
+		records.forEach(record -> {
+			// 负责人
+			List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+					.eq(SysDeptCsm::getDeptId, record.getDeptId()));
+			if (CollUtil.isNotEmpty(deptCsms)) {
+				Set<Integer> userIds = deptCsms.stream().map(SysDeptCsm::getUserId).collect(Collectors.toSet());
+				List<SysUser> users = sysUserMapper.selectBatchIds(userIds);
+				record.setCsmNames(users.stream().map(SysUser::getRealname).collect(Collectors.joining(",")));
+				record.setCsmUserIds(userIds.toArray(new Integer[0]));
+			}
+			// 是否启用
+			if (StrUtil.isNotBlank(record.getDelFlag())) {
+				record.setDelFlagName(Objects.requireNonNull(EnableEnum.getByVal(record.getDelFlag())).getDesc());
+			}
+			// 企业类型
+			if (record.getLevel() != null) {
+				record.setLevelName(Objects.requireNonNull(DeptLevelEnum.getEnumByVal(record.getLevel())).getName());
+			}
+			// 上级企业
+			List<SysDeptRelation> deptRelations = sysDeptRelationMapper.selectList(Wrappers.<SysDeptRelation>lambdaQuery()
+					.eq(SysDeptRelation::getDescendant, record.getDeptId())
+					.notIn(SysDeptRelation::getAncestor, record.getDeptId(), 1));
+			if (CollUtil.isNotEmpty(deptRelations)) {
+				Set<Integer> superDeptIds = deptRelations.stream().map(SysDeptRelation::getAncestor).collect(Collectors.toSet());
+				List<SysDept> depts = sysDeptService.listByIds(superDeptIds);
+				record.setSuperDeptName(depts.stream().map(SysDept::getName).collect(Collectors.joining(",")));
+
+				// 根据上级企业获取上级企业的csm
+//				List<SysDeptCsm> csms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+//						.in(SysDeptCsm::getDeptId, superDeptIds));
+//				if (CollUtil.isNotEmpty(csms)) {
+//					Set<Integer> userIds = csms.stream().map(SysDeptCsm::getUserId).collect(Collectors.toSet());
+//					record.setCsmUserIds(ArrayUtil.addAll(userIds.toArray(new Integer[0]), record.getCsmUserIds()));
+//
+//					List<SysUser> users = sysUserMapper.selectBatchIds(userIds);
+//					if (record.getCsmNames() != null) {
+//						record.setCsmNames(StrUtil.join(",", users.stream().map(SysUser::getRealname).collect(Collectors.joining(",")), record.getCsmNames()));
+//					} else {
+//						record.setCsmNames(users.stream().map(SysUser::getRealname).collect(Collectors.joining(",")));
+//					}
+//				}
+			}
+		});
+
+		return R.ok(page);
+	}
+
+	/**
+	 * 将CMS分配给部门
+	 *
+	 * @param params 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("将CMS分配给部门")
+	@PostMapping("/assign-cms-to-dept")
+	public R<?> assignCmsToDept(@RequestBody Map<String, Object> params) {
+		List<Integer> cmsUserIds = (List<Integer>) params.get("userIds");
+		List<Integer> deptIds = (List<Integer>) params.get("deptIds");
+		if (CollUtil.isEmpty(cmsUserIds) || CollUtil.isEmpty(deptIds)) {
+			return R.failed("userIds和deptIds必填");
+		}
+
+		deptIds.forEach(deptId -> {
+			cmsUserIds.forEach(userId -> {
+				Integer count = sysDeptCsmMapper.selectCount(Wrappers.<SysDeptCsm>lambdaQuery()
+						.eq(SysDeptCsm::getDeptId, deptId)
+						.eq(SysDeptCsm::getUserId, userId));
+				if (count <= 0) {
+					SysUser user = sysUserMapper.selectById(userId);
+					SysDeptCsm insert = new SysDeptCsm();
+					insert.setDeptId(deptId);
+					insert.setUserId(userId);
+					insert.setCsmName(user.getRealname());
+					insert.setQrCodeId(" ");
+					insert.setCorpId(" ");
+					sysDeptCsmMapper.insert(insert);
+				}
+			});
+		});
+
+		return R.ok(Boolean.TRUE);
+	}
+
 	/**
 	 * 保存部门规章制度
 	 *
 	 * @param list 列表
 	 * @return {@link R}<{@link ?}>
 	 */
+	@SysLog("保存部门规章制度")
 	@PostMapping("/dept-regulations/save")
 	public R<?> saveDeptRegulations(@RequestBody List<WmDeptRegulations> list) {
 		if (CollUtil.isEmpty(list)) {
@@ -507,6 +652,7 @@ public class SysDeptController {
 	 * @param params 参数
 	 * @return {@link R}<{@link ?}> 结果
 	 */
+	@SysLog("更新企业截止时间")
 	@PostMapping("/update-expiry-date")
 	public R<?> updateExpiryDate(@RequestBody Map<String, Object> params) {
 		List<Integer> deptIds = (List<Integer>) params.get("deptIds");
@@ -522,7 +668,12 @@ public class SysDeptController {
 				update.setExpiryDate(LocalDate.parse(expiryDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")));
 			} else {
 				// 默认延长一年
-				update.setExpiryDate(LocalDate.now().plusYears(1L));
+				SysDept dept = sysDeptService.getById(deptId);
+				if (dept.getExpiryDate() != null) {
+					update.setExpiryDate(dept.getExpiryDate().plusYears(1L));
+				} else {
+					update.setExpiryDate(LocalDate.now().plusYears(1L));
+				}
 			}
 			sysDeptService.updateById(update);
 		}

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysRoleController.java

@@ -174,6 +174,8 @@ public class SysRoleController {
 			List<Integer> CROAdmin = Stream.of(7,9,10).collect(Collectors.toList());
 			List<Integer> HCPAdmin = Stream.of(7,11,13).collect(Collectors.toList());
 			List<Integer> CFOAdmin = Stream.of(7).collect(Collectors.toList());
+			List<Integer> bcLeaderAdmin = Stream.of(2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 34, 35).collect(Collectors.toList());
+			List<Integer> csmAdmin = Stream.of(3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 34).collect(Collectors.toList());
 
 			Set<Integer> queryRoleIdSet = new HashSet<>();
 
@@ -194,6 +196,12 @@ public class SysRoleController {
 					case 11:
 						queryRoleIdSet.addAll(HCPAdmin);
 						break;
+					case 19:
+						queryRoleIdSet.addAll(csmAdmin);
+						break;
+					case 35:
+						queryRoleIdSet.addAll(bcLeaderAdmin);
+						break;
 				}
 			});
 			if (CollUtil.isEmpty(queryRoleIdSet)) {

+ 39 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -24,6 +24,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUserRole;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPlatformQuizTestResult;
 import com.qunzhixinxi.hnqz.admin.api.model.WmQuizResultModel;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
+import com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CommonUserDTO;
@@ -88,6 +89,7 @@ public class SysUserController {
 	private final SysUserSubService sysUserSubService;
 	private final SysDictItemService sysDictItemService;
 	private final WmPlatformQuizTestResultService platformQuizTestResultService;
+	private final SysCsmUserRelationMapper sysCsmUserRelationMapper;
 
 
 	private boolean isZbOrDbUsers(Integer[] roles) {
@@ -96,7 +98,7 @@ public class SysUserController {
 		}
 
 		// 1-管理员,2-平台管理员,3-药企管理员,4-CSO管理员,7-财务管理员,9-CRO管理员,11-患教管理员,19-CMS,27-平台财务管理员,33-行政人员,
-		// 34-财务复核
+		// 34-财务复核, 35-BC总负责人
 		return Arrays.asList(roles).contains(1)
 				|| Arrays.asList(roles).contains(2)
 				|| Arrays.asList(roles).contains(3)
@@ -107,7 +109,8 @@ public class SysUserController {
 				|| Arrays.asList(roles).contains(19)
 				|| Arrays.asList(roles).contains(27)
 				|| Arrays.asList(roles).contains(33)
-				|| Arrays.asList(roles).contains(34);
+				|| Arrays.asList(roles).contains(34)
+				|| Arrays.asList(roles).contains(35);
 	}
 
 	/**
@@ -1070,6 +1073,14 @@ public class SysUserController {
 			locations = list.stream().map(item -> Enum.valueOf(SubjectLocation.class, item.getValue())).collect(Collectors.toList());
 		}
 
+		Map<Integer, List<SysCsmUserRelation>> csmParentUserMap = new HashMap<>();
+		if (CollUtil.isNotEmpty(userIds)) {
+			// 上级csm
+			List<SysCsmUserRelation> csmUserRelations = sysCsmUserRelationMapper.selectList(Wrappers.<SysCsmUserRelation>lambdaQuery()
+					.in(SysCsmUserRelation::getUserId, userIds));
+			csmParentUserMap.putAll(csmUserRelations.stream().collect(Collectors.groupingBy(SysCsmUserRelation::getUserId)));
+		}
+
 		userVosPage.getRecords().forEach(userVO -> {
 			// 查询所属企业渠道
 			SysDeptSub sysDeptSub = new SysDeptSub();
@@ -1131,6 +1142,11 @@ public class SysUserController {
 				}
 			}
 
+			// 上级csm
+			List<SysCsmUserRelation> csmUserRelations = csmParentUserMap.get(userVO.getUserId());
+			if (CollUtil.isNotEmpty(csmUserRelations)) {
+				userVO.setParentIdList(csmUserRelations.stream().map(SysCsmUserRelation::getParentId).collect(Collectors.toList()));
+			}
 		});
 
 		return R.ok(userVosPage);
@@ -1325,4 +1341,25 @@ public class SysUserController {
 		return R.ok(answerList);
 	}
 
+	/**
+	 * 查询CSM列表
+	 *
+	 * @return {@link R}<{@link ?}>
+	 */
+	@GetMapping("/list-csm")
+	public R<?> listCsm() {
+		UserDTO userDTO = new UserDTO();
+		userDTO.setRole(Stream.of(19).collect(Collectors.toList()));
+		List<UserVO> users = sysUserMapper.listUserByRole(userDTO);
+
+		List<Map<String, Object>> result = users.stream().map(user -> {
+			Map<String, Object> map = new HashMap<>();
+			map.put("userId", user.getUserId());
+			map.put("realname", user.getRealname());
+			return map;
+		}).collect(Collectors.toList());
+
+		return R.ok(result);
+	}
+
 }

+ 42 - 9
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaAgentController.java

@@ -17,12 +17,14 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.*;
@@ -40,9 +42,12 @@ import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
@@ -72,6 +77,8 @@ public class WmDaAgentController {
 	private final SysDeptRelationMapper sysDeptRelationMapper;
 	private final SysDeptMapper sysDeptMapper;
 	private final SysDeptRelationService sysDeptRelationService;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
+	private final SysDeptCsmMapper sysDeptCsmMapper;
 
 	/**
 	 * 分页查询
@@ -200,6 +207,8 @@ public class WmDaAgentController {
 	@PostMapping
 	@Transactional(rollbackFor = Exception.class)
 	public R save(@RequestBody WmDaAgent wmDaAgent) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+
 		WmDaAgent query = new WmDaAgent();
 		query.setGsmc(wmDaAgent.getGsmc());
 		List<WmDaAgent> list1 = wmDaAgentService.list(Wrappers.query(query));
@@ -209,7 +218,7 @@ public class WmDaAgentController {
 		List<WmDaAgent> list3 = wmDaAgentMapper.selectByGsmcList(query);
 		SysDeptRelation sysDeptRelation = new SysDeptRelation();
 		if (list3.size() > 0) {
-			sysDeptRelation.setAncestor(SecurityUtils.getUser().getDeptId());
+			sysDeptRelation.setAncestor(deptId);
 			sysDeptRelation.setDescendant(Integer.parseInt(list3.get(0).getDeptId()));
 		}
 		List<SysDeptRelation> list4 = sysDeptRelationMapper.selectDeptRelation(sysDeptRelation);
@@ -417,6 +426,23 @@ public class WmDaAgentController {
 			}
 		}
 
+		// 查询当前企业的csm维护人
+		List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+				.eq(SysDeptCsm::getDeptId, deptId));
+		if (CollUtil.isNotEmpty(deptCsms)) {
+			deptCsms.forEach(csm -> {
+				// CSM创建的企业,在创建cso时, 负责人默认是该CSM
+				SysUser user = sysUserMapper.selectById(csm.getUserId());
+				SysDeptCsm insert = new SysDeptCsm();
+				insert.setDeptId(Integer.valueOf(wmDaAgent.getDeptId()));
+				insert.setUserId(csm.getUserId());
+				insert.setCsmName(user.getRealname());
+				insert.setQrCodeId(" ");
+				insert.setCorpId(" ");
+				sysDeptCsmMapper.insert(insert);
+			});
+		}
+
 		return R.ok();
 	}
 
@@ -733,6 +759,14 @@ public class WmDaAgentController {
 	 */
 	@GetMapping("/page1")
 	public R getWmDaAgentPage1(Page page, WmDaAgent wmDaAgent) {
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的用户, 以及下属维护的企业下的用户
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			wmDaAgent.setCsmUserIdList(allUserIds);
+		}
+
 		return R.ok(wmDaAgentService.selectWmManagementList(page, wmDaAgent));
 	}
 
@@ -743,20 +777,19 @@ public class WmDaAgentController {
 	}
 
 	/**
-	 * 获取cso列表
+	 * 获取cso列表 (接包对象)
 	 *
 	 * @return cso列表 二期  业务平台
 	 */
 	@GetMapping("/listCso")
-	public R listCso(Integer id) {
-//		SysDept sysDept1 = new SysDept();
-//		sysDept1.setDeptId(SecurityUtils.getUser().getDeptId());
-//		SysDept sysDept = sysDeptMapper.selectDeptId(sysDept1);
+	public R listCso(Integer deptId) {
+
+		if (deptId == null) {
+			deptId = SecurityUtils.getUser().getDeptId();
+		}
 
-		SysDept sysDept = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
+		SysDept sysDept = sysDeptService.getById(deptId);
 
-		WmDaAgent anId = wmDaAgentService.selectByDeptId(sysDept.getDeptId());
-		WmDaDrugEnt drId = wmDaDrugEntService.selectByDeptId(sysDept.getDeptId());
 		List wmDaDrugEnts = null;
 		if (sysDept.getLevel() == 2) {
 			wmDaDrugEnts = wmDaAgentService.selectWmDaDrugEntByDeptId(sysDept.getDeptId());

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

@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserInfo;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptCsmMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskTypeEntRefMapper;
@@ -26,8 +28,10 @@ import org.springframework.web.bind.annotation.*;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
@@ -46,11 +50,12 @@ public class WmDaDrugEntController {
 	private final WmDaAgentService wmDaAgentService;
 	private final SysUserService userService;
 	private final SysDeptService sysDeptService;
-	private final SysDeptSubService sysDeptSubService;
 	private final WmTaskTypeEntRefMapper wmTaskTypeEntRefMapper;
 	private final WmTaskTypeMapper wmTaskTypeMapper;
 	private final SysDeptMapper sysDeptMapper;
 	private final SysUserMapper sysUserMapper;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
+	private final SysDeptCsmMapper sysDeptCsmMapper;
 	private final RedisTemplate redisTemplate;
 
 	/**
@@ -63,6 +68,14 @@ public class WmDaDrugEntController {
 	@GetMapping("/page")
 	@PreAuthorize("@pms.hasPermission('admin_wmdadrugent_view')")
 	public R getWmDaDrugEntPage(Page page, WmDaDrugEnt wmDaDrugEnt) {
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的用户, 以及下属维护的企业下的用户
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			wmDaDrugEnt.setCsmUserIdList(allUserIds);
+		}
+
 		return R.ok(wmDaDrugEntService.selectPage(page, wmDaDrugEnt));
 	}
 
@@ -183,6 +196,17 @@ public class WmDaDrugEntController {
 					}
 				}
 			}
+
+			// CSM创建的企业,负责人默认是该CSM
+			Integer userId = SecurityUtils.getUser().getId();
+			SysUser user = sysUserMapper.selectById(userId);
+			SysDeptCsm insert = new SysDeptCsm();
+			insert.setDeptId(Integer.valueOf(wmDaDrugEnt.getDeptId()));
+			insert.setUserId(userId);
+			insert.setCsmName(user.getRealname());
+			insert.setQrCodeId(" ");
+			insert.setCorpId(" ");
+			sysDeptCsmMapper.insert(insert);
 		}
 		wmDaDrugEnt.setCreateTime(LocalDateTime.now());
 
@@ -266,6 +290,9 @@ public class WmDaDrugEntController {
 			redisTemplate.delete(userNameKeys);
 		}
 
+		wmDaDrugEnt.setUpdateTime(LocalDateTime.now());
+		wmDaDrugEnt.setUpdateUser(SecurityUtils.getUser().getId());
+
 		return R.ok(wmDaDrugEntService.updateById(wmDaDrugEnt));
 	}
 

+ 19 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaDrugEntDrugtableController.java

@@ -27,9 +27,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
-import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.service.SysCsmUserRelationService;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
@@ -49,6 +49,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -68,6 +70,7 @@ public class WmDaDrugEntDrugtableController {
 	private final WmDaDrugEntService wmDaDrugEntService;
 	private final WmScorePackageService wmScorePackageService;
 	private final SysDictItemService sysDictItemService;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
 
 	/**
 	 * 分页查询
@@ -103,6 +106,17 @@ public class WmDaDrugEntDrugtableController {
 			wmDaDrugEntDrugtable.setDrugEntName(null);
 		}
 
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的数据, 以及下属维护的企业下的数据
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			queryWrapper.and(wrapper -> {
+				wrapper.in("create_user", allUserIds)
+						.or(wrapper2 -> wrapper2.isNull("create_user"));
+			});
+		}
+
 		wmDaDrugEntDrugtableService.page(page, queryWrapper);
 
 		if (CollUtil.isNotEmpty(page.getRecords())) {
@@ -190,6 +204,7 @@ public class WmDaDrugEntDrugtableController {
 
 
 		wmDaDrugEntDrugtable.setCreateTime(LocalDateTime.now());
+		wmDaDrugEntDrugtable.setCreateUser(SecurityUtils.getUser().getId());
 		return R.ok(wmDaDrugEntDrugtableService.save(wmDaDrugEntDrugtable));
 	}
 
@@ -222,6 +237,8 @@ public class WmDaDrugEntDrugtableController {
 //			}
 //		}
 
+		wmDaDrugEntDrugtable.setUpdateTime(LocalDateTime.now());
+		wmDaDrugEntDrugtable.setUpdateUser(SecurityUtils.getUser().getId());
 
 		return R.ok(wmDaDrugEntDrugtableService.updateById(wmDaDrugEntDrugtable));
 	}
@@ -274,7 +291,7 @@ public class WmDaDrugEntDrugtableController {
 	}
 
 
-	@SysLog("新增档案-药企药品")
+	@SysLog("药企药品-分配")
 	@PostMapping("/distribute")
 	public R distribute(@RequestBody WmDaDrugEntDrugtable wmDaDrugEntDrugtable) {
 		return wmDaDrugEntDrugtableService.distribute(wmDaDrugEntDrugtable);

+ 80 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -290,6 +290,23 @@ public class WmPayOffController {
 		return wmPayOffService.settleInfoByTaskIds(taskIds);
 	}
 
+	/**
+	 * 财务审核页面 用于BC
+	 *
+	 * @param page  分页信息
+	 * @param input 参数
+	 * @return 分页结果
+	 */
+	@SysLog("分页查询结算-用于BC")
+	@GetMapping("/listPackageSettleListForBC")
+	public R<?> listPackageSettleListForBC(Page<WmScorePackageSettleOutput> page, WmScorePackageSettleInput input) {
+
+		input.setPackageFinishStatus("1");
+		input.setTypeid("4,5");
+		input.setSettleFlag("1");
+		return R.ok(wmScorePackageService.listPackageSettleList(page, input));
+	}
+
 	/**
 	 * 财务审核页面
 	 *
@@ -308,6 +325,26 @@ public class WmPayOffController {
 		return R.ok(wmScorePackageService.listPackageSettleList(page, input));
 	}
 
+	/**
+	 * 财务审核页面-用于MAH结算-用于BC
+	 *
+	 * @param page  分页信息
+	 * @param input 参数
+	 * @return 分页结果
+	 */
+	@SysLog("分页查询结算")
+	@GetMapping("/listMahPackageSettleListForBC")
+	public R<?> listMAHPackageSettleListForBC(Page<WmScorePackageSettleOutput> page, WmScorePackageSettleInput input) {
+
+		input.setMahSettleStep(UpmsType.MahSettleStep.FINANCE);
+		input.setPackageFinishStatus("1");
+		input.setTypeid("4");
+		input.setSettleFlag("1");
+		Page<WmScorePackageSettleOutput> outputPage = wmScorePackageService.listPackageSettleList(page, input);
+		outputPage.getRecords().forEach(output -> output.setUserPhones(null));
+		return R.ok(outputPage);
+	}
+
 	/**
 	 * 财务审核页面-用于MAH结算
 	 *
@@ -329,6 +366,28 @@ public class WmPayOffController {
 		return R.ok(outputPage);
 	}
 
+	/**
+	 * 查询财务结算复核汇总数据 用于BC
+	 *
+	 * @param realname        姓名
+	 * @param subjectLocation 结算渠道
+	 * @param deptId          部门ID
+	 * @param reviewFlag      复核标记
+	 * @return {@link R}<{@link List}<{@link SettleFinancialReviewVO}>> 结果
+	 */
+	@GetMapping("/list-financial-review-for-bc")
+	public R<List<SettleFinancialReviewVO>> listFinancialReviewForBC(Integer deptId, String realname, SubjectLocation subjectLocation, Boolean reviewFlag) {
+
+		SettleFinancialReviewVO query = new SettleFinancialReviewVO();
+		query.setRealname(realname);
+		query.setSubjectLocation(subjectLocation);
+		query.setDeptId(deptId);
+		query.setReviewFlag(reviewFlag);
+		List<SettleFinancialReviewVO> voList = wmScorePackageMapper.listFinancialReview(query);
+
+		return R.ok(voList);
+	}
+
 	/**
 	 * 查询财务结算复核汇总数据
 	 *
@@ -422,10 +481,12 @@ public class WmPayOffController {
 	 */
 	@ResponseExcel(name = "exportPackageSettle", sheet = "积分包结算数据")
 	@SysLog("积分包结算导出")
-	@GetMapping("/exportPackageSettle")
+	@PostMapping("/exportPackageSettle")
 	public List<WmScorePackageSettleExcelModel> exportPackageSettle(WmScorePackageSettleInput input) {
 
-		input.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
+		if (input.getSendPackageDeptId() == null) {
+			input.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
+		}
 
 		return wmPayOffService.exportPackageSettle(input);
 	}
@@ -441,7 +502,9 @@ public class WmPayOffController {
 	@PostMapping("/exportPackageSettleByMAH")
 	public List<WmScorePackageSettleExcelModel> exportPackageSettleByMAH(WmScorePackageSettleInput input) {
 
-		input.setMahSettleDeptId(SecurityUtils.getUser().getDeptId());
+		if (input.getSendPackageDeptId() == null) {
+			input.setMahSettleDeptId(SecurityUtils.getUser().getDeptId());
+		}
 
 		return wmPayOffService.exportPackageSettleByMAH(input);
 	}
@@ -892,18 +955,27 @@ public class WmPayOffController {
 		// 查询结算中的数据
 		List<WmScorePackageSettleNote> settleNoteByidList = wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
 				.in(WmScorePackageSettleNote::getPackageId, packageIdList)
-				.eq(WmScorePackageSettleNote::getSettleNoteStatus, Integer.parseInt(SettleStatusEnum.SETTLE_STATUS_SUBMIT.getVal())));
-		log.info("结算信息查询:{}", settleNoteByidList);
+//				.eq(WmScorePackageSettleNote::getSettleNoteStatus, Integer.parseInt(SettleStatusEnum.SETTLE_STATUS_SUBMIT.getVal()))
+		);
+
 		if (CollUtil.isEmpty(settleNoteByidList)) {
-			throw new BizException("结算信息不存在或状态不是已提交: " + scorePackageName);
+			throw new BizException("结算信息不存在");
 		}
+		if (!settleNoteByidList.stream()
+				.allMatch(note -> SettleStatusEnum.SETTLE_STATUS_SUBMIT.getVal().equals(String.valueOf(note.getSettleNoteStatus())))) {
+			throw new BizException("存在结算状态不是已提交的数据");
+		}
+
+		List<WmScorePackageSettleNote> toUpdateList = settleNoteByidList.stream()
+				.filter(note -> SettleStatusEnum.SETTLE_STATUS_SUBMIT.getVal().equals(String.valueOf(note.getSettleNoteStatus())))
+				.collect(Collectors.toList());
 
-		settleNoteByidList.forEach(note -> {
+		toUpdateList.forEach(note -> {
 			// 更新结算数据
 			wmScorePackageSettleNoteService.updateSettleNoteById(note.getPackageId(), note.getId(), settleStatus, remark, notifyTime);
 		});
 
-
+		log.info("提交的结算数据个数{}, 实际操作成功的个数{}", packageIdList.size(), toUpdateList.size());
 		// 结束输出
 		log.info("===== 手工回调结束 =====");
 

+ 333 - 102
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -77,6 +77,7 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 /**
@@ -1385,17 +1386,113 @@ public class WmScorePackageController {
 	}
 
 	/**
-	 * 分页查询积分管理信息 二期   业务平台
+	 * 获取企业大包详细信息
+	 *
+	 * @param id 积分包id
+	 * @return {@link R}<{@link ?}> 积分包详情
 	 */
-	@GetMapping("/selectWmScorePackageLists")
-	public R<?> selectWmScorePackageList(@RequestParam(value = "current") Integer current,
+	@GetMapping("/get-big-package-detail")
+	public R<?> getBigPackageDetail(String id) {
+		WmScorePackage wmScorePackage = wmScorePackageMapper.selectById(id);
+
+		// 关联积分包
+		if (StrUtil.isBlank(wmScorePackage.getRelationScoreId())) {
+			wmScorePackage.setRelationScoreId("-1");
+			wmScorePackage.setRelationScoreName("无");
+		} else {
+			WmScorePackage relationPackage = wmScorePackageMapper.selectById(wmScorePackage.getRelationScoreId());
+			if (relationPackage != null) {
+				wmScorePackage.setRelationScoreName(relationPackage.getScorePackageName());
+			}
+		}
+
+		// 关联服务企业
+		if (StrUtil.isNotBlank(wmScorePackage.getRelatedService())) {
+			SysDept serviceDept = sysDeptService.getById(wmScorePackage.getRelatedService());
+			if (serviceDept != null) {
+				wmScorePackage.setRelatedServiceName(serviceDept.getName());
+			}
+		}
+
+		// 接包对象
+		if (StrUtil.isNotBlank(wmScorePackage.getAcceptSug())) {
+			// 此处暂认为drugEnt和agent不会出现相同的id
+			WmDaAgent daAgent = wmDaAgentMapper.selectById(wmScorePackage.getAcceptSug());
+			if (daAgent == null) {
+				WmDaDrugEnt daDrugEnt = wmDaDrugEntMapper.selectById(wmScorePackage.getAcceptSug());
+				if (daDrugEnt != null) {
+					wmScorePackage.setAcceptSug(daDrugEnt.getEntname());
+				}
+			} else {
+				wmScorePackage.setAcceptSugName(daAgent.getGsmc());
+			}
+		}
+
+		// 可分配积分值
+		List<WmScorePackage> scorePackagekfpjf =
+				wmScorePackageService.getScorePackagekfpjf(
+						null,
+						null,
+						new String[]{"0", "1", "2"},
+						new String[]{id});
+		if (CollUtil.isNotEmpty(scorePackagekfpjf)) {
+			wmScorePackage.setKfpjf(scorePackagekfpjf.get(0).getKfpjf());
+		}
+
+		// 推广药品
+		if (ArrayUtil.isNotEmpty(wmScorePackage.getDrugtable())) {
+			List<WmDaDrugEntDrugtable> drugtables = wmDaDrugEntDrugtableService.listByIds(Stream.of(wmScorePackage.getDrugtable()).collect(Collectors.toSet()));
+			if (CollUtil.isNotEmpty(drugtables)) {
+				String[] drugtableNames = drugtables.stream().map(WmDaDrugEntDrugtable::getDrugname).toArray(String[]::new);
+				wmScorePackage.setDrugtableName(drugtableNames);
+			}
+		}
+
+		// 积分包关联的有效任务类型
+		WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
+		wmScoreTaskType.setScoreId("-1".equals(wmScorePackage.getRelationScoreId()) ? wmScorePackage.getId() : wmScorePackage.getRelationScoreId());
+		List<WmScoreTaskType> taskTypeList = wmScoreTaskTypeMapper.listWmScoreTaskType(wmScoreTaskType);
+		Set<String> taskTypeSet = taskTypeList.stream().map(WmScoreTaskType::getTaskTypeId).collect(Collectors.toSet());
+		wmScorePackage.setTaskTypeSet(taskTypeSet);
+
+		// 查询关联的试卷
+		List<WmPkgQuizRelation> quizRelations = pkgQuizRelationService.listQuizRelationsByPkgIds(Collections.singletonList(Integer.parseInt(id)));
+
+		if (CollUtil.isNotEmpty(quizRelations)){
+			List<Integer> quizIds = quizRelations.stream().map(WmPkgQuizRelation::getQuizId).collect(Collectors.toList());
+			List<Integer> relIds = quizRelations.stream().map(WmPkgQuizRelation::getRelationId).collect(Collectors.toList());
+			wmScorePackage.setQuizIds(quizIds);
+			wmScorePackage.setQuizRelationIds(relIds);
+			wmScorePackage.setQuizNames(quizRelations.stream().map(WmPkgQuizRelation::getTitle).collect(Collectors.toList()));
+		}
+
+		wmScorePackage.setQuizRelations(quizRelations);
+
+		return R.ok(wmScorePackage);
+	}
+
+	/**
+	 * BC-企业承接任务
+	 *
+	 * @param current          当前页
+	 * @param size             每页大小
+	 * @param deptId           部门ID
+	 * @param scorePackageName 积分包名称
+	 * @param acceptSug        接包对象
+	 * @param allocationDate   分配日期
+	 * @param endLabelDate     结束标签日期
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@GetMapping("/selectWmScorePackageListsForBC")
+	public R<?> selectWmScorePackageListForBC(@RequestParam(value = "current") Integer current,
 										 @RequestParam(value = "size") Integer size,
+										 @RequestParam(value = "deptId") Integer deptId,
 										 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
 										 @RequestParam(value = "acceptSug", required = false) String acceptSug,
 										 @RequestParam(value = "allocationDate", required = false) LocalDate allocationDate,
 										 @RequestParam(value = "endLabelDate", required = false) LocalDate endLabelDate) {
 
-		Page<WmScorePackage> pageAnswer = wmScorePackageService.selectWmScorePackageLists(new Page<>(current, size),
+		Page<WmScorePackage> pageAnswer = wmScorePackageService.selectWmScorePackageLists(new Page<>(current, size), deptId,
 				scorePackageName, acceptSug, allocationDate, endLabelDate);
 
 		//根据积分包id查询计算完成积分值 已付积分值
@@ -1442,6 +1539,21 @@ public class WmScorePackageController {
 		return R.ok(pageAnswer);
 	}
 
+	/**
+	 * 分页查询积分管理信息 二期   业务平台
+	 */
+	@GetMapping("/selectWmScorePackageLists")
+	public R<?> selectWmScorePackageList(@RequestParam(value = "current") Integer current,
+										 @RequestParam(value = "size") Integer size,
+										 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+										 @RequestParam(value = "acceptSug", required = false) String acceptSug,
+										 @RequestParam(value = "allocationDate", required = false) LocalDate allocationDate,
+										 @RequestParam(value = "endLabelDate", required = false) LocalDate endLabelDate) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+
+		return this.selectWmScorePackageListForBC(current, size, deptId, scorePackageName, acceptSug, allocationDate, endLabelDate);
+	}
+
 	/**
 	 * 获取关联积分包名称 二期  业务平台
 	 *
@@ -1449,21 +1561,26 @@ public class WmScorePackageController {
 	 */
 	@GetMapping("/lists")
 	public R<?> listWmScorePackages(WmScorePackage wmScorePackage) {
+		// 当前企业deptId
+		String deptId = wmScorePackage.getDeptId();
+		if (StrUtil.isBlank(deptId)) {
+			deptId = String.valueOf(SecurityUtils.getUser().getDeptId());
+		}
+
 		wmScorePackage.setDelFlag("0");
 		wmScorePackage.setEnableFlag("0");
+		wmScorePackage.setDeptId(deptId);
 		List<WmScorePackage> list = wmScorePackageService.list(Wrappers.query(wmScorePackage));
-		SysDept wmId = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
+
+		SysDept dept = sysDeptService.getById(deptId);
 
 		List<Map<String, Object>> answerList = new ArrayList<>();
-		if (wmId.getLevel() == 3) {
-			int deptId = SecurityUtils.getUser().getDeptId();
+		if (dept.getLevel() == 3) {
 			for (WmScorePackage wmScorePackage1 : list) {
 				Map<String, Object> map1 = new HashMap<>();
-				if (StrUtil.isNotBlank(wmScorePackage1.getDeptId()) && deptId == Integer.parseInt(wmScorePackage1.getDeptId())) {
-					map1.put("relationScoreId", wmScorePackage1.getId());
-					map1.put("scorePackageName", wmScorePackage1.getScorePackageName());
-					answerList.add(map1);
-				}
+				map1.put("relationScoreId", wmScorePackage1.getId());
+				map1.put("scorePackageName", wmScorePackage1.getScorePackageName());
+				answerList.add(map1);
 			}
 
 		}
@@ -2519,9 +2636,11 @@ public class WmScorePackageController {
 	 *
 	 * @param acceptUser 接单对象,模糊查询
 	 */
-	@GetMapping("/getScorePackagePage")
-	public R<?> getScorePackagePage(@RequestParam(value = "current") Integer current,
+	@GetMapping("/getScorePackagePageForBC")
+	public R<?> getScorePackagePageForBC(@RequestParam(value = "current") Integer current,
 									@RequestParam(value = "size") Integer size,
+									@RequestParam(value = "deptId") Integer deptId,
+								 	Integer userId,
 									@RequestParam(value = "packageType1") Integer packageType1,
 									@RequestParam(value = "packageType2") Integer packageType2,
 									@RequestParam(value = "scorePackageName", required = false) String scorePackageName,
@@ -2532,11 +2651,10 @@ public class WmScorePackageController {
 									@RequestParam(value = "acceptUser", required = false) String acceptUser,
 									@RequestParam(value = "relationScoreId", required = false) String relationScoreId,
 									@RequestParam(value = "toApproval", required = false) Boolean toApproval,
-									@RequestParam(value = "packageUserScope", required = false) String packageUserScope
+									@RequestParam(value = "packageUserScope", required = false) String packageUserScope,
+									String sourceType
 	) {
 
-		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
-		Integer userId = SecurityUtils.getUser().getId();
 
 		LocalDateTime start = null;
 		LocalDateTime end = null;
@@ -2552,7 +2670,7 @@ public class WmScorePackageController {
 				.eq("p.package_type1", packageType1)
 				.eq("p.package_type2", packageType2)
 				.eq(scorePackageStatus != null, "p.score_package_status", scorePackageStatus)
-				.eq("p.send_package_dept_id", sendDeptId)
+				.eq("p.send_package_dept_id", deptId)
 				.between(start != null && end != null, "p.create_time", start, end);
 
 		if (StrUtil.isNotBlank(scorePackageName)) {
@@ -2571,32 +2689,37 @@ public class WmScorePackageController {
 			queryWrapper.eq("p.package_user_scope", packageUserScope);
 		}
 
-		boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
-				&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
-		boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
-				&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
-		if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
-			// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
-			List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
-					.eq(WmTeam::getDeptId, sendDeptId)
-					.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
-					.eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
-					.apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
-			if (CollectionUtil.isNotEmpty(teamList)) {
-				// 如果配置了,则只查询所在团队下发的积分包
-				List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
-				queryWrapper.in("p.package_user_scope", teamIdList);
+		// 用于问问的系统来源
+		if (StrUtil.isNotBlank(sourceType)) {
+			queryWrapper.eq("p.source_type", sourceType);
+		}
+
+		if (userId != null) {
+			boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
+					&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
+			boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
+					&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
+			if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
+				// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
+				List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
+						.eq(WmTeam::getDeptId, deptId)
+						.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
+						.eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
+						.apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
+				if (CollectionUtil.isNotEmpty(teamList)) {
+					// 如果配置了,则只查询所在团队下发的积分包
+					List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
+					queryWrapper.in("p.package_user_scope", teamIdList);
+				}
 			}
 		}
 
-		long startMillis = System.currentTimeMillis();
 		Page<WmScorePackage> wmScorePackagePage = wmScorePackageMapper.listScorePackage(new Page<>(current, size),
 				queryWrapper.orderByDesc("p.create_time"), acceptUser, relationScoreId, toApproval);
 
 		List<WmScorePackage> pageRecords = wmScorePackagePage.getRecords();
 
 		if (CollUtil.isNotEmpty(pageRecords)) {
-			long buildStartMillis = System.currentTimeMillis();
 
 			Set<String> packageIds = pageRecords.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
 
@@ -2659,26 +2782,54 @@ public class WmScorePackageController {
 	}
 
 	/**
-	 * 积分包列表-其他(用于MAH结算:药企查询下级提交的)
+	 * 分配积分列表查询--派工平台
 	 *
 	 * @param acceptUser 接单对象,模糊查询
 	 */
-	@GetMapping("/getScorePackagePageForMah")
-	public R getScorePackagePageForMah(@RequestParam(value = "current") Integer current,
-								 @RequestParam(value = "size") Integer size,
-								 @RequestParam(value = "packageType1") Integer packageType1,
-								 @RequestParam(value = "packageType2") Integer packageType2,
-								 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
-								 @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
-								 @RequestParam(value = "typeid", required = false) String typeId,
-								 @RequestParam(value = "monthStart", required = false) String monthStart,
-								 @RequestParam(value = "monthEnd", required = false) String monthEnd,
-								 @RequestParam(value = "acceptUser", required = false) String acceptUser,
-								 @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
-								 @RequestParam(value = "toApproval", required = false) Boolean toApproval
+	@GetMapping("/getScorePackagePage")
+	public R<?> getScorePackagePage(@RequestParam(value = "current") Integer current,
+									@RequestParam(value = "size") Integer size,
+									@RequestParam(value = "packageType1") Integer packageType1,
+									@RequestParam(value = "packageType2") Integer packageType2,
+									@RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+									@RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+									@RequestParam(value = "typeid", required = false) String typeId,
+									@RequestParam(value = "monthStart", required = false) String monthStart,
+									@RequestParam(value = "monthEnd", required = false) String monthEnd,
+									@RequestParam(value = "acceptUser", required = false) String acceptUser,
+									@RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+									@RequestParam(value = "toApproval", required = false) Boolean toApproval,
+									@RequestParam(value = "packageUserScope", required = false) String packageUserScope,
+									String sourceType
 	) {
 
 		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
+		Integer userId = SecurityUtils.getUser().getId();
+
+		return this.getScorePackagePageForBC(current, size, sendDeptId, userId, packageType1, packageType2, scorePackageName, scorePackageStatus,
+				typeId, monthStart, monthEnd, acceptUser, relationScoreId, toApproval, packageUserScope, sourceType);
+	}
+
+	/**
+	 * 积分包列表-其他(用于MAH结算:药企查询下级提交的) 用于BC
+	 *
+	 * @param acceptUser 接单对象,模糊查询
+	 */
+	@GetMapping("/getScorePackagePageForMahForBC")
+	public R getScorePackagePageForMahForBC(@RequestParam(value = "current") Integer current,
+									   @RequestParam(value = "size") Integer size,
+									   @RequestParam(value = "deptId") Integer deptId,
+									   @RequestParam(value = "packageType1") Integer packageType1,
+									   @RequestParam(value = "packageType2") Integer packageType2,
+									   @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+									   @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+									   @RequestParam(value = "typeid", required = false) String typeId,
+									   @RequestParam(value = "monthStart", required = false) String monthStart,
+									   @RequestParam(value = "monthEnd", required = false) String monthEnd,
+									   @RequestParam(value = "acceptUser", required = false) String acceptUser,
+									   @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+									   @RequestParam(value = "toApproval", required = false) Boolean toApproval
+	) {
 
 		LocalDateTime start = null;
 		LocalDateTime end = null;
@@ -2694,7 +2845,7 @@ public class WmScorePackageController {
 				.eq("p.package_type1", packageType1)
 				.eq("p.package_type2", packageType2)
 				.eq(scorePackageStatus != null, "p.score_package_status", scorePackageStatus)
-				.eq("p.mah_settle_dept_id", sendDeptId)
+				.eq("p.mah_settle_dept_id", deptId)
 				.in("p.mah_settle_step", UpmsType.MahSettleStep.BUSINESS.getType(), UpmsType.MahSettleStep.FINANCE.getType())
 				.between(start != null && end != null, "p.create_time", start, end);
 
@@ -2709,14 +2860,12 @@ public class WmScorePackageController {
 			queryWrapper.in("p.typeid", split);
 		}
 
-		long startMillis = System.currentTimeMillis();
 		Page<WmScorePackage> wmScorePackagePage = wmScorePackageMapper.listScorePackage(new Page<>(current, size),
 				queryWrapper.orderByDesc("p.settlement_date"), acceptUser, relationScoreId, toApproval);
 
 		List<WmScorePackage> pageRecords = wmScorePackagePage.getRecords();
 
 		if (CollUtil.isNotEmpty(pageRecords)) {
-			long buildStartMillis = System.currentTimeMillis();
 			Set<String> packageIds = pageRecords.stream().map(WmScorePackage::getId).collect(Collectors.toSet());
 
 			// 任务统计
@@ -2775,35 +2924,60 @@ public class WmScorePackageController {
 		}
 
 		// 个人承接-其他 标记已读提醒
-		wmBizReminderService.markRead(UpmsType.BizReminderType.ASSIGN_POINTS_OTHER_REMINDER, sendDeptId);
+		wmBizReminderService.markRead(UpmsType.BizReminderType.ASSIGN_POINTS_OTHER_REMINDER, deptId);
 
 		return R.ok(wmScorePackagePage);
 	}
 
 	/**
-	 * 个人承接积分值导出
+	 * 积分包列表-其他(用于MAH结算:药企查询下级提交的)
 	 *
 	 * @param acceptUser 接单对象,模糊查询
 	 */
-	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值导出")
-	@SysLog("个人承接积分值导出")
-	@GetMapping("/export-score-package")
-	public List<WmScorePackageExcelModel> exportScorePackage(
-															 @RequestParam(value = "packageType1") Integer packageType1,
-															 @RequestParam(value = "packageType2") Integer packageType2,
-															 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
-															 @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
-															 @RequestParam(value = "typeid", required = false) String typeId,
-															 @RequestParam(value = "monthStart", required = false) String monthStart,
-															 @RequestParam(value = "monthEnd", required = false) String monthEnd,
-															 @RequestParam(value = "acceptUser", required = false) String acceptUser,
-															 @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
-															 @RequestParam(value = "toApproval", required = false) Boolean toApproval,
-															 @RequestParam(value = "packageUserScope", required = false) String packageUserScope
+	@GetMapping("/getScorePackagePageForMah")
+	public R getScorePackagePageForMah(@RequestParam(value = "current") Integer current,
+								 @RequestParam(value = "size") Integer size,
+								 @RequestParam(value = "packageType1") Integer packageType1,
+								 @RequestParam(value = "packageType2") Integer packageType2,
+								 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+								 @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+								 @RequestParam(value = "typeid", required = false) String typeId,
+								 @RequestParam(value = "monthStart", required = false) String monthStart,
+								 @RequestParam(value = "monthEnd", required = false) String monthEnd,
+								 @RequestParam(value = "acceptUser", required = false) String acceptUser,
+								 @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+								 @RequestParam(value = "toApproval", required = false) Boolean toApproval
 	) {
 
 		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
-		Integer userId = SecurityUtils.getUser().getId();
+
+		return this.getScorePackagePageForMahForBC(current, size, sendDeptId, packageType1, packageType2, scorePackageName,
+				scorePackageStatus, typeId, monthStart, monthEnd, acceptUser, relationScoreId, toApproval);
+	}
+
+	/**
+	 * 个人承接积分值导出-用于BC
+	 *
+	 * @param acceptUser 接单对象,模糊查询
+	 */
+	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值导出")
+	@SysLog("个人承接积分值导出-用于BC")
+	@GetMapping("/export-score-package-for-bc")
+	public List<WmScorePackageExcelModel> exportScorePackageForBC(
+			@RequestParam(value = "packageType1") Integer packageType1,
+			@RequestParam(value = "packageType2") Integer packageType2,
+			@RequestParam(value = "deptId") Integer deptId,
+			Integer userId,
+			@RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+			@RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+			@RequestParam(value = "typeid", required = false) String typeId,
+			@RequestParam(value = "monthStart", required = false) String monthStart,
+			@RequestParam(value = "monthEnd", required = false) String monthEnd,
+			@RequestParam(value = "acceptUser", required = false) String acceptUser,
+			@RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+			@RequestParam(value = "toApproval", required = false) Boolean toApproval,
+			@RequestParam(value = "packageUserScope", required = false) String packageUserScope
+	) {
 
 		LocalDateTime start = null;
 		LocalDateTime end = null;
@@ -2819,7 +2993,7 @@ public class WmScorePackageController {
 				.eq("p.package_type1", packageType1)
 				.eq("p.package_type2", packageType2)
 				.eq(scorePackageStatus != null, "p.score_package_status", scorePackageStatus)
-				.eq("p.send_package_dept_id", sendDeptId)
+				.eq("p.send_package_dept_id", deptId)
 				.between(start != null && end != null, "p.create_time", start, end);
 
 		if (StrUtil.isNotBlank(scorePackageName)) {
@@ -2838,21 +3012,23 @@ public class WmScorePackageController {
 			queryWrapper.eq("p.package_user_scope", packageUserScope);
 		}
 
-		boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
-				&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
-		boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
-				&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
-		if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
-			// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
-			List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
-					.eq(WmTeam::getDeptId, sendDeptId)
-					.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
-					.eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
-					.apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
-			if (CollectionUtil.isNotEmpty(teamList)) {
-				// 如果配置了,则只查询所在团队下发的积分包
-				List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
-				queryWrapper.in("p.package_user_scope", teamIdList);
+		if (userId != null) {
+			boolean onePersonScorePackageFlag = PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(String.valueOf(packageType1))
+					&& PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(String.valueOf(packageType2));
+			boolean multiPersonScorePackageFlag = PackageTypeEnum.TYPE1_SCORE_AND_TASK_PACKAGE.val().equals(String.valueOf(packageType1))
+					&& PackageTypeEnum.TYPE2_SETTLE_PACKAGE.val().equals(String.valueOf(packageType2));
+			if (onePersonScorePackageFlag || multiPersonScorePackageFlag) {
+				// 如果是个人承接-按积分值/多人承接-按积分值,判断当前用户是否配置了团队负责人
+				List<WmTeam> teamList = wmTeamService.list(Wrappers.<WmTeam>lambdaQuery()
+						.eq(WmTeam::getDeptId, deptId)
+						.eq(WmTeam::getEnableFlag, EnableEnum.ENABLE.val())
+						.eq(WmTeam::getDelFlag, DelEnum.NOT_DEL.val())
+						.apply("FIND_IN_SET({0}, leader)", String.valueOf(userId)));
+				if (CollectionUtil.isNotEmpty(teamList)) {
+					// 如果配置了,则只查询所在团队下发的积分包
+					List<String> teamIdList = teamList.stream().map(wmTeam -> String.valueOf(wmTeam.getId())).collect(Collectors.toList());
+					queryWrapper.in("p.package_user_scope", teamIdList);
+				}
 			}
 		}
 
@@ -2956,27 +3132,55 @@ public class WmScorePackageController {
 	}
 
 	/**
-	 * 个人承接积分值-其他导出
+	 * 个人承接积分值导出
 	 *
 	 * @param acceptUser 接单对象,模糊查询
 	 */
-	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值-其他导出")
-	@SysLog("个人承接积分值-其他导出")
-	@GetMapping("/export-score-package-mah")
-	public List<WmScorePackageExcelModel> exportPackageSettleForMah(
-									   @RequestParam(value = "packageType1") Integer packageType1,
-									   @RequestParam(value = "packageType2") Integer packageType2,
-									   @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
-									   @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
-									   @RequestParam(value = "typeid", required = false) String typeId,
-									   @RequestParam(value = "monthStart", required = false) String monthStart,
-									   @RequestParam(value = "monthEnd", required = false) String monthEnd,
-									   @RequestParam(value = "acceptUser", required = false) String acceptUser,
-									   @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
-									   @RequestParam(value = "toApproval", required = false) Boolean toApproval
+	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值导出")
+	@SysLog("个人承接积分值导出")
+	@GetMapping("/export-score-package")
+	public List<WmScorePackageExcelModel> exportScorePackage(
+															 @RequestParam(value = "packageType1") Integer packageType1,
+															 @RequestParam(value = "packageType2") Integer packageType2,
+															 @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+															 @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+															 @RequestParam(value = "typeid", required = false) String typeId,
+															 @RequestParam(value = "monthStart", required = false) String monthStart,
+															 @RequestParam(value = "monthEnd", required = false) String monthEnd,
+															 @RequestParam(value = "acceptUser", required = false) String acceptUser,
+															 @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+															 @RequestParam(value = "toApproval", required = false) Boolean toApproval,
+															 @RequestParam(value = "packageUserScope", required = false) String packageUserScope
 	) {
 
 		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
+		Integer userId = SecurityUtils.getUser().getId();
+
+		return this.exportScorePackageForBC(packageType1, packageType2, sendDeptId, userId, scorePackageName,
+				scorePackageStatus, typeId, monthStart, monthEnd, acceptUser, relationScoreId, toApproval, packageUserScope);
+	}
+
+	/**
+	 * 个人承接积分值-其他导出-用于BC
+	 *
+	 * @param acceptUser 接单对象,模糊查询
+	 */
+	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值-其他导出")
+	@SysLog("个人承接积分值-其他导出-用于BC")
+	@GetMapping("/export-score-package-mah-for-bc")
+	public List<WmScorePackageExcelModel> exportPackageSettleForMahForBC(
+			@RequestParam(value = "packageType1") Integer packageType1,
+			@RequestParam(value = "packageType2") Integer packageType2,
+			@RequestParam(value = "deptId") Integer deptId,
+			@RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+			@RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+			@RequestParam(value = "typeid", required = false) String typeId,
+			@RequestParam(value = "monthStart", required = false) String monthStart,
+			@RequestParam(value = "monthEnd", required = false) String monthEnd,
+			@RequestParam(value = "acceptUser", required = false) String acceptUser,
+			@RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+			@RequestParam(value = "toApproval", required = false) Boolean toApproval
+	) {
 
 		LocalDateTime start = null;
 		LocalDateTime end = null;
@@ -2992,7 +3196,7 @@ public class WmScorePackageController {
 				.eq("p.package_type1", packageType1)
 				.eq("p.package_type2", packageType2)
 				.eq(scorePackageStatus != null, "p.score_package_status", scorePackageStatus)
-				.eq("p.mah_settle_dept_id", sendDeptId)
+				.eq("p.mah_settle_dept_id", deptId)
 				.in("p.mah_settle_step", UpmsType.MahSettleStep.BUSINESS.getType(), UpmsType.MahSettleStep.FINANCE.getType())
 				.between(start != null && end != null, "p.create_time", start, end);
 
@@ -3107,6 +3311,33 @@ public class WmScorePackageController {
 		return excelModelList;
 	}
 
+	/**
+	 * 个人承接积分值-其他导出
+	 *
+	 * @param acceptUser 接单对象,模糊查询
+	 */
+	@ResponseExcel(name = "exportPackageSettle", sheet = "个人承接积分值-其他导出")
+	@SysLog("个人承接积分值-其他导出")
+	@GetMapping("/export-score-package-mah")
+	public List<WmScorePackageExcelModel> exportPackageSettleForMah(
+									   @RequestParam(value = "packageType1") Integer packageType1,
+									   @RequestParam(value = "packageType2") Integer packageType2,
+									   @RequestParam(value = "scorePackageName", required = false) String scorePackageName,
+									   @RequestParam(value = "scorePackageStatus", required = false) Integer scorePackageStatus,
+									   @RequestParam(value = "typeid", required = false) String typeId,
+									   @RequestParam(value = "monthStart", required = false) String monthStart,
+									   @RequestParam(value = "monthEnd", required = false) String monthEnd,
+									   @RequestParam(value = "acceptUser", required = false) String acceptUser,
+									   @RequestParam(value = "relationScoreId", required = false) String relationScoreId,
+									   @RequestParam(value = "toApproval", required = false) Boolean toApproval
+	) {
+
+		Integer sendDeptId = SecurityUtils.getUser().getDeptId();
+
+		return this.exportPackageSettleForMahForBC(packageType1, packageType2, sendDeptId, scorePackageName, scorePackageStatus,
+				typeId, monthStart, monthEnd, acceptUser, relationScoreId, toApproval);
+	}
+
 	/**
 	 * 积分包列表(结算包管理列表、无团队限制)
 	 *

+ 25 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmWkAlbumController.java

@@ -1,16 +1,19 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEntDrugtable;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.service.SysCsmUserRelationService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.admin.entity.WmWkAlbum;
 import com.qunzhixinxi.hnqz.admin.service.WmWkAlbumService;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
@@ -18,7 +21,10 @@ import org.springframework.web.bind.annotation.*;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
@@ -34,6 +40,7 @@ public class WmWkAlbumController {
 
     private final  WmWkAlbumService wmWkAlbumService;
 	private final WmDaDrugEntDrugtableService wmDaDrugEntDrugtableService;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
 
     /**
      * 分页查询
@@ -43,13 +50,13 @@ public class WmWkAlbumController {
      */
     @GetMapping("/page" )
     @PreAuthorize("@pms.hasPermission('admin_wmwkalbum_view')" )
-    public R getWmWkAlbumPage(Page page, WmWkAlbum wmWkAlbum) {
+    public R<IPage<WmWkAlbum>> getWmWkAlbumPage(Page<WmWkAlbum> page, WmWkAlbum wmWkAlbum) {
 		OrderItem orderItem=new OrderItem();
 		orderItem.setColumn("create_time");
 		orderItem.setAsc(false);
 		page.addOrder(orderItem);
 
-		QueryWrapper queryWrapper=Wrappers.query();
+		QueryWrapper<WmWkAlbum> queryWrapper=Wrappers.query();
 		if(null!=wmWkAlbum.getXcmc())
 		{
 			queryWrapper.like(true,"xcmc",wmWkAlbum.getXcmc());
@@ -63,14 +70,24 @@ public class WmWkAlbumController {
 		queryWrapper.eq("del_flag", DelEnum.NOT_DEL.val());
 		queryWrapper.orderByDesc("create_time");
 
-    	Page pageAnswer =wmWkAlbumService.page(page, queryWrapper);
-    	List<WmWkAlbum> wmWkAlbumList=pageAnswer.getRecords();
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的数据, 以及下属维护的企业下的数据
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			queryWrapper.and(wrapper -> {
+				wrapper.in("create_user", allUserIds)
+						.or(wrapper2 -> wrapper2.isNull("create_user"));
+			});
+		}
+
+    	Page<WmWkAlbum> pageAnswer = wmWkAlbumService.page(page, queryWrapper);
+    	List<WmWkAlbum> wmWkAlbumList = pageAnswer.getRecords();
     	if(null!=wmWkAlbumList)
 		{
 			for (WmWkAlbum wmW :wmWkAlbumList) {
 				if(null!=wmW.getGlyp())
 				{
-					WmDaDrugEntDrugtable wmDaDrugEntDrugtable=new WmDaDrugEntDrugtable();
 //					if(wmW.getGlyp().contains(","))
 //					{
 						String [] ar=wmW.getGlyp().split(",");
@@ -120,6 +137,7 @@ public class WmWkAlbumController {
     public R save(@RequestBody WmWkAlbum wmWkAlbum) {
 		wmWkAlbum.setForwardNum(0);
 		wmWkAlbum.setCreateTime(LocalDateTime.now());
+		wmWkAlbum.setCreateUser(SecurityUtils.getUser().getId());
 //        return R.ok(wmWkAlbumService.save(wmWkAlbum));
 		wmWkAlbumService.saveWmWkAlbum(wmWkAlbum);
         return R.ok();
@@ -134,6 +152,8 @@ public class WmWkAlbumController {
     @PutMapping
     @PreAuthorize("@pms.hasPermission('admin_wmwkalbum_edit')" )
     public R updateById(@RequestBody WmWkAlbum wmWkAlbum) {
+		wmWkAlbum.setUpdateTime(LocalDateTime.now());
+		wmWkAlbum.setUpdateUser(SecurityUtils.getUser().getId());
 		wmWkAlbumService.updateWmWkAlbumById(wmWkAlbum);
         return R.ok();
     }

+ 20 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmWkArticleController.java

@@ -2,10 +2,13 @@ package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.entity.WmWkAlbum;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.service.SysCsmUserRelationService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.admin.entity.WmWkArticle;
@@ -17,6 +20,9 @@ import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
@@ -31,6 +37,7 @@ import java.time.LocalDateTime;
 public class WmWkArticleController {
 
 	private final WmWkArticleService wmWkArticleService;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
 
 	/**
 	 * 分页查询
@@ -41,7 +48,7 @@ public class WmWkArticleController {
 	 */
 	@GetMapping("/page")
 	@PreAuthorize("@pms.hasPermission('admin_wmwkarticle_view')")
-	public R getWmWkArticlePage(Page page, WmWkArticle wmWkArticle) {
+	public R<IPage<WmWkArticle>> getWmWkArticlePage(Page<WmWkArticle> page, WmWkArticle wmWkArticle) {
 
 		OrderItem orderItem = new OrderItem();
 		orderItem.setColumn("create_time");
@@ -50,7 +57,7 @@ public class WmWkArticleController {
 
 		LocalDateTime startTime = wmWkArticle.getCreateTime();
 		LocalDateTime endTime = wmWkArticle.getUpdateTime();
-		QueryWrapper wrappers = Wrappers.query();
+		QueryWrapper<WmWkArticle> wrappers = Wrappers.query();
 		if (null != startTime) {
 			wrappers.ge(true, "create_time", startTime);
 		}
@@ -79,6 +86,17 @@ public class WmWkArticleController {
 		wrappers.eq("del_flag", DelEnum.NOT_DEL.val());
 		wrappers.orderByDesc("create_time");
 
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的数据, 以及下属维护的企业下的数据
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			wrappers.and(wrapper -> {
+				wrapper.in("create_user", allUserIds)
+						.or(wrapper2 -> wrapper2.isNull("create_user"));
+			});
+		}
+
 		return R.ok(wmWkArticleService.page(page, wrappers));
 	}
 

+ 27 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysCsmUserRelation.java

@@ -0,0 +1,27 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * csm用户关系表
+ * @TableName sys_csm_user_relation
+ */
+@TableName(value ="sys_csm_user_relation")
+@Data
+public class SysCsmUserRelation extends Model<SysCsmUserRelation> {
+	private static final long serialVersionUID = 7840785954434505720L;
+	
+	/**
+     * csm用户id
+     */
+    private Integer userId;
+
+    /**
+     * 父级用户id
+     */
+    private Integer parentId;
+}

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaAgent.java

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
 
 import java.time.LocalDateTime;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 档案-代理商
@@ -169,4 +170,10 @@ public class WmDaAgent extends Model<WmDaAgent> {
 	 */
 	@TableField(exist = false)
 	private UpmsType.FinancialReviewType financialReviewType;
+
+	/**
+	 * csm用户id
+	 */
+	@TableField(exist = false)
+	private Set<Integer> csmUserIdList;
 }

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaDrugEnt.java

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
 
 import java.time.LocalDateTime;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 档案-药企
@@ -104,4 +105,10 @@ public class WmDaDrugEnt extends Model<WmDaDrugEnt> {
 	@TableField(exist = false)
 	private UpmsType.FinancialReviewType financialReviewType;
 
+	/**
+	 * csm用户id
+	 */
+	@TableField(exist = false)
+	private Set<Integer> csmUserIdList;
+
 }

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

@@ -121,8 +121,20 @@ public class WmScorePackage extends Model<WmScorePackage> {
 
 	private String relationScoreId;
 
+	/**
+	 * 关联积分包名称
+	 */
+	@TableField(exist = false)
+	private String relationScoreName;
+
 	private String relatedService;
 
+	/**
+	 * 关联服务企业名称
+	 */
+	@TableField(exist = false)
+	private String relatedServiceName;
+
 	private String scorePackageName;
 
 	private String packageIsConduct;
@@ -218,6 +230,12 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	 */
 	private String acceptSug;
 
+	/**
+	 * 接包对象名称
+	 */
+	@TableField(exist = false)
+	private String acceptSugName;
+
 	/**
 	 * 已完成百分比
 	 */
@@ -515,6 +533,12 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	 */
 	private String[] drugtable;
 
+	/**
+	 * 推广药品名称
+	 */
+	@TableField(exist = false)
+	private String[] drugtableName;
+
 	/**
 	 * 审核管理费比例(单位%)
 	 */
@@ -542,6 +566,12 @@ public class WmScorePackage extends Model<WmScorePackage> {
 	@TableField(exist = false)
 	private List<WmPkgQuizRelation> quizRelations;
 
+	/**
+	 * 积分包关联的试卷名称
+	 */
+	@TableField(exist = false)
+	private List<String> quizNames;
+
 	/**
 	 * 积分包关联的试卷列表
 	 */

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/NotifyByOneSelfDTO.java

@@ -16,7 +16,7 @@ public class NotifyByOneSelfDTO implements Serializable {
 	private static final long serialVersionUID = -1814430828743680757L;
 
 	/**
-	 * 积分包id
+	 * 积分包id(多个逗号拼接)
 	 */
 	private String packageId;
 

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

@@ -129,4 +129,8 @@ public class WmScorePackageSettleInput implements Serializable {
 	 */
 	private LocalDateTime[] notifyTime;
 
+	/**
+	 * 提交到零工时间(下发时间)
+	 */
+	private LocalDateTime[] subToGigTime;
 }

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

@@ -55,6 +55,11 @@ public class WmScorePackageSettleOutput {
 
 	private String scorePackageName;
 
+	/**
+	 * 关联积分包名称
+	 */
+	private String relationScoreName;
+
 	/**
 	 * 积分包编号
 	 */
@@ -112,6 +117,11 @@ public class WmScorePackageSettleOutput {
 	 */
 	private LocalDateTime subToGigTime;
 
+	/**
+	 * 回调时间(到账时间)
+	 */
+	private LocalDateTime notifyTime;
+
 	/**
 	 * 发票号码
 	 */

+ 24 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/EnableEnum.java

@@ -1,29 +1,48 @@
 package com.qunzhixinxi.hnqz.admin.enums;
 
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
 /**
  * 是否有效(是否禁用)状态枚举
  *
  * @author lixuesong
  * @date 2021年05月27日 11:06
  */
+@Getter
+@AllArgsConstructor
 public enum  EnableEnum {
 
 	/**
 	 * 有效(没有禁用)
 	 */
-	ENABLE("0"),
+	ENABLE("0", "启用"),
 	/**
 	 * 无效(禁用)
 	 */
-	DISABLE("1");
+	DISABLE("1", "停用");
 
 	private String val;
 
-	EnableEnum(String val) {
-		this.val = val;
-	}
+	private String desc;
 
 	public String val() {
 		return val;
 	}
+
+
+	/**
+	 * 获取 Val
+	 *
+	 * @param val 值
+	 * @return {@link EnableEnum}
+	 */
+	public static EnableEnum getByVal(String val) {
+		for (EnableEnum d : EnableEnum.values()) {
+			if (d.val.equals(val)) {
+				return d;
+			}
+		}
+		return null;
+	}
 }

+ 20 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysCsmUserRelationMapper.java

@@ -0,0 +1,20 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author li312
+* @description 针对表【sys_csm_user_relation(csm用户关系表)】的数据库操作Mapper
+* @createDate 2024-03-04 10:08:51
+* @Entity com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation
+*/
+@Mapper
+public interface SysCsmUserRelationMapper extends BaseMapper<SysCsmUserRelation> {
+
+}
+
+
+
+

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserMapper.java

@@ -116,4 +116,12 @@ public interface SysUserMapper extends DataScopeMapper<SysUser> {
 	 * @return 用户信息集合
 	 */
 	List<SysUser> listUserDetails(@Param(value = "userIds") List<Integer> userIds);
+
+	/**
+	 * 按角色查询用户
+	 *
+	 * @param userDTO 用户 DTO
+	 * @return {@link List}<{@link SysUser}> 结果
+	 */
+	List<UserVO> listUserByRole(@Param("query") UserDTO userDTO);
 }

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

@@ -1,73 +0,0 @@
-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);
-    }
-}

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

@@ -1,46 +0,0 @@
-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);
-    }
-}

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

@@ -1,111 +0,0 @@
-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);
-    }
-}

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

@@ -1,108 +0,0 @@
-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);
-    }
-}

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

@@ -1,326 +0,0 @@
-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);
-    }
-}

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

@@ -1,110 +0,0 @@
-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);
-    }
-
-}

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

@@ -1,126 +0,0 @@
-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;
-
-    }
-}

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

@@ -1,73 +0,0 @@
-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;
-    }
-}

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

@@ -1,321 +0,0 @@
-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;
-    }
-}

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

@@ -1,167 +0,0 @@
-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;
-    }
-}

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

@@ -1,37 +0,0 @@
-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;
-}

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

@@ -1,88 +0,0 @@
-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;
-}

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

@@ -1,47 +0,0 @@
-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;
-}

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

@@ -1,80 +0,0 @@
-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;
-}

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

@@ -1,72 +0,0 @@
-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;
-}

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

@@ -1,112 +0,0 @@
-package com.qunzhixinxi.hnqz.admin.oe.entity.vo;
-
-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;
-}

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

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

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

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

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

@@ -1,25 +0,0 @@
-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);
-}

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

@@ -1,28 +0,0 @@
-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()
-//    }
-}

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

@@ -1,15 +0,0 @@
-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 {
-}

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

@@ -1,40 +0,0 @@
-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;
-    }
-}

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

@@ -0,0 +1,24 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+* @author li312
+* @description 针对表【sys_csm_user_relation(csm用户关系表)】的数据库操作Service
+* @createDate 2024-03-04 10:08:51
+*/
+public interface SysCsmUserRelationService extends IService<SysCsmUserRelation> {
+
+	/**
+	 * 递归查询CSM所有下级的用户ID
+	 *
+	 * @param parentIds  父级ID
+	 * @param limitCount 递归次数限制
+	 * @return {@link Set}<{@link Integer}> 结果
+	 */
+	Set<Integer> recurseCsmLowerUserId(Set<Integer> parentIds, AtomicInteger limitCount);
+}

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

@@ -170,7 +170,7 @@ public interface WmScorePackageService extends IService<WmScorePackage> {
 	 */
 	IPage<WmDaDrugEntDrugtable> listDrugsByPackageId(Page page, Integer packageId, String drugName);
 
-	Page<WmScorePackage> selectWmScorePackageLists(Page<WmScorePackage> page, String scorePackageName, String acceptSug,
+	Page<WmScorePackage> selectWmScorePackageLists(Page<WmScorePackage> page, Integer deptId, String scorePackageName, String acceptSug,
 												   LocalDate allocationDate, LocalDate endLabelDate);
 
 	Future<WmScorePackage> finishRate(WmScorePackage wmScorePackage);

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

@@ -106,7 +106,6 @@ public class ReportExportServiceImpl implements ReportExportService {
 	 */
 	public R getExportPackageZbTotalList(Page page, WmScorePackage wmScorePackage) {
 
-		wmScorePackage.setSendPackageDeptId(SecurityUtils.getUser().getDeptId()+"");
 		wmScorePackage.setTypeid("4");
 		IPage pageAnswer = wmScorePackageService.getExportPackageTotalList1(page, wmScorePackage);
 		return R.ok(pageAnswer);

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

@@ -0,0 +1,59 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation;
+import com.qunzhixinxi.hnqz.admin.mapper.SysCsmUserRelationMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysCsmUserRelationService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+* @author li312
+* @description 针对表【sys_csm_user_relation(csm用户关系表)】的数据库操作Service实现
+* @createDate 2024-03-04 10:08:51
+*/
+@Service
+@AllArgsConstructor
+public class SysCsmUserRelationServiceImpl extends ServiceImpl<SysCsmUserRelationMapper, SysCsmUserRelation>
+    implements SysCsmUserRelationService {
+
+	private final SysCsmUserRelationMapper sysCsmUserRelationMapper;
+
+	/**
+	 * 递归查询CSM所有下级的用户ID
+	 *
+	 * @param parentIds  父级ID
+	 * @param limitCount 递归次数限制
+	 * @return {@link Set}<{@link Integer}> 结果
+	 */
+	@Override
+	public Set<Integer> recurseCsmLowerUserId(Set<Integer> parentIds, AtomicInteger limitCount) {
+		Set<Integer> allIds = new HashSet<>();
+		allIds.addAll(parentIds);
+		// 限制调用次数
+		if (limitCount.decrementAndGet() <= 0) {
+			return allIds;
+		}
+
+		List<SysCsmUserRelation> csmUserRelations = sysCsmUserRelationMapper.selectList(Wrappers.<SysCsmUserRelation>lambdaQuery()
+				.in(SysCsmUserRelation::getParentId, parentIds));
+		if (CollUtil.isNotEmpty(csmUserRelations)) {
+			Set<Integer> userIds = csmUserRelations.stream().map(SysCsmUserRelation::getUserId).collect(Collectors.toSet());
+			allIds.addAll(this.recurseCsmLowerUserId(userIds, limitCount));
+		}
+
+		return allIds;
+	}
+}
+
+
+
+

+ 55 - 11
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptServiceImpl.java

@@ -23,20 +23,23 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.dto.DeptTree;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
 import com.qunzhixinxi.hnqz.admin.api.vo.SysEnterpriseRelationVO;
 import com.qunzhixinxi.hnqz.admin.api.vo.TreeUtil;
 import com.qunzhixinxi.hnqz.admin.entity.base.HnqzPage;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.DeptLevelEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptCsmMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptRelationMapper;
-import com.qunzhixinxi.hnqz.admin.mapper.WmRelationMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysCsmUserRelationService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptRelationService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScope;
@@ -48,6 +51,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -65,12 +69,14 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 
 	private final SysDeptRelationService sysDeptRelationService;
 
-	private final WmRelationMapper wmRelationMapper;
-
 	private final SysDeptRelationMapper sysDeptRelationMapper;
 
 	private final SysDeptMapper deptMapper;
 
+	private final SysCsmUserRelationService sysCsmUserRelationService;
+
+	private final SysDeptCsmMapper sysDeptCsmMapper;
+
 	@Override
 	public List convertToName() {
 		return deptMapper.getDeptConvertToName();
@@ -163,7 +169,25 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 
 	@Override
 	public List<SysDept> listScope(SysDept sysDept) {
-		return deptMapper.selectListByScope(Wrappers.query(sysDept), new DataScope());
+		QueryWrapper<SysDept> queryWrapper = Wrappers.query(sysDept);
+
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的数据, 以及下属维护的企业下的数据
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			// 查询企业id
+			List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+					.in(SysDeptCsm::getUserId, allUserIds));
+			if (CollUtil.isEmpty(deptCsms)) {
+				return Collections.emptyList();
+			}
+
+			Set<Integer> deptIds = deptCsms.stream().map(SysDeptCsm::getDeptId).collect(Collectors.toSet());
+			queryWrapper.in("dept_id", deptIds);
+		}
+
+		return deptMapper.selectListByScope(queryWrapper, new DataScope());
 	}
 
 	@Override
@@ -470,13 +494,39 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 	 */
 	@Override
 	public Map<String, Object> listEntAndAgent(Page page, String deptName) {
-		// 药企
+		// 药企wrapper
 		LambdaQueryWrapper<SysDept> entWrapper = Wrappers.lambdaQuery();
 		entWrapper.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val());
 		entWrapper.eq(SysDept::getLevel, DeptLevelEnum.ENT.getVal());
 		if (StringUtils.isNotBlank(deptName)) {
 			entWrapper.like(SysDept::getName, deptName);
 		}
+
+		// CSO wrapper
+		LambdaQueryWrapper<SysDept> csoWrapper = Wrappers.lambdaQuery();
+		csoWrapper.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val());
+		csoWrapper.in(SysDept::getLevel, DeptLevelEnum.CSO_L1.getVal(), DeptLevelEnum.CSO_L2.getVal());
+		if (StringUtils.isNotBlank(deptName)) {
+			csoWrapper.like(SysDept::getName, deptName);
+		}
+
+		if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的用户, 以及下属维护的企业下的用户
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			// 查询企业id
+			List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+					.in(SysDeptCsm::getUserId, allUserIds));
+			if (CollUtil.isEmpty(deptCsms)) {
+				return new HashMap<>();
+			}
+
+			Set<Integer> deptIds = deptCsms.stream().map(SysDeptCsm::getDeptId).collect(Collectors.toSet());
+			entWrapper.in(SysDept::getDeptId, deptIds);
+			csoWrapper.in(SysDept::getDeptId, deptIds);
+		}
+
 		Page<SysDept> entPage = this.page(page, entWrapper);
 		List<Map<String, Object>> entMapList = entPage.getRecords().stream().map(sysDept -> {
 			Map<String, Object> deptMap = MapUtil.newHashMap(2);
@@ -488,12 +538,6 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 		entHnqzPage.setRecords(entMapList);
 
 		// CSO
-		LambdaQueryWrapper<SysDept> csoWrapper = Wrappers.lambdaQuery();
-		csoWrapper.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val());
-		csoWrapper.in(SysDept::getLevel, DeptLevelEnum.CSO_L1.getVal(), DeptLevelEnum.CSO_L2.getVal());
-		if (StringUtils.isNotBlank(deptName)) {
-			csoWrapper.like(SysDept::getName, deptName);
-		}
 		Page<SysDept> csoPage = this.page(page, csoWrapper);
 		List<Map<String, Object>> csoMapList = csoPage.getRecords().stream().map(sysDept -> {
 			Map<String, Object> deptMap = MapUtil.newHashMap(2);

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

@@ -21,6 +21,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.*;
 import com.qunzhixinxi.hnqz.admin.api.vo.MenuVO;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.entity.SysCertResultRecord;
+import com.qunzhixinxi.hnqz.admin.entity.SysCsmUserRelation;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CommonUserDTO;
@@ -71,7 +72,9 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author hnqz
@@ -112,6 +115,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
 	private final SysUserSubMapper sysUserSubMapper;
 
+	private final SysCsmUserRelationService sysCsmUserRelationService;
+
 	/**
 	 * @Modify: start
 	 * @Version: v2021.4.16
@@ -1033,7 +1038,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		}).collect(Collectors.toList());
 		System.out.println("-----" + userRoleList.size());
 		System.out.println("-------" + userRoleList.toString());
-		return sysUserRoleService.saveBatch(userRoleList);
+		sysUserRoleService.saveBatch(userRoleList);
+
+		// 关联上级主管
+		if (CollUtil.isNotEmpty(userDto.getParentIdList())) {
+			userDto.getParentIdList().forEach(pId -> {
+				SysCsmUserRelation csmUserRelation = new SysCsmUserRelation();
+				csmUserRelation.setUserId(sysUser.getUserId());
+				csmUserRelation.setParentId(pId);
+				sysCsmUserRelationService.save(csmUserRelation);
+			});
+		}
+
+		return Boolean.TRUE;
 	}
 
 	/**
@@ -1110,11 +1127,30 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			userDTO.setRljCertStatus(null);
 		}
 
-		if (SecurityUtils.getRoles().contains(1) || SecurityUtils.getRoles().contains(2)) {
+		if (SecurityUtils.getRoles().contains(1) || SecurityUtils.getRoles().contains(2) || SecurityUtils.getRoles().contains(35)) {
 			return baseMapper.getUserVosPage(page, userDTO, new DataScope());
 		} else if (SecurityUtils.getRoles().contains(19)) {
+			// CSM只能查看自己维护的企业下的用户, 以及下属维护的企业下的用户
+			Integer userId = SecurityUtils.getUser().getId();
+			// 递归查询下属关联的userId
+			Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+			userDTO.setCsmUserIdList(allUserIds);
 			return baseMapper.getUserVosPage(page, userDTO, new DataScope());
 		}
+//		else if (SecurityUtils.getRoles().contains(35)) {
+//			// BC总负责人数据权限
+//			List<Integer> bcRoles = Stream.of(3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 35).collect(Collectors.toList());
+//			if (CollUtil.isNotEmpty(userDTO.getRole())) {
+//				Collection<Integer> intersection = CollUtil.intersectionDistinct(bcRoles, userDTO.getRole());
+//				if (CollUtil.isEmpty(intersection)) {
+//					return page;
+//				}
+//				userDTO.setRole(new ArrayList<>(intersection));
+//			} else {
+//				userDTO.setRole(bcRoles);
+//			}
+//			return baseMapper.getUserVosPage(page, userDTO, new DataScope());
+//		}
 		Integer deptId = userDTO.getDeptId();
 //		if (null != userDTO.getDeptId()) {
 //			deptId = userDTO.getDeptId();
@@ -1181,6 +1217,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		return page1;
 	}
 
+
+	/**
+	 * 递归查询CSM所有下级的用户ID
+	 *
+	 * @param allIds     所有ID
+	 * @param parentIds  父级ID
+	 * @param limitCount 递归次数限制
+	 */
+	private void recurseCsmLowerUserId(Set<Integer> allIds, Set<Integer> parentIds, AtomicInteger limitCount) {
+		// 限制调用次数
+		if (limitCount.decrementAndGet() <= 0) {
+			return;
+		}
+
+		List<SysCsmUserRelation> csmUserRelations = sysCsmUserRelationService.list(Wrappers.<SysCsmUserRelation>lambdaQuery()
+				.in(SysCsmUserRelation::getParentId, parentIds));
+		if (CollUtil.isNotEmpty(csmUserRelations)) {
+			Set<Integer> userIds = csmUserRelations.stream().map(SysCsmUserRelation::getUserId).collect(Collectors.toSet());
+			this.recurseCsmLowerUserId(allIds, userIds, limitCount);
+			allIds.addAll(userIds);
+		}
+	}
+
 	/**
 	 * 通过ID查询用户信息
 	 *
@@ -1315,6 +1374,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			userRole.setRoleId(roleId);
 			userRole.insert();
 		});
+
+		// 关联上级主管
+		if (CollUtil.isNotEmpty(userDto.getParentIdList())) {
+			sysCsmUserRelationService.remove(Wrappers.<SysCsmUserRelation>lambdaUpdate()
+					.eq(SysCsmUserRelation::getUserId, sysUser.getUserId()));
+			userDto.getParentIdList().forEach(pId -> {
+				SysCsmUserRelation csmUserRelation = new SysCsmUserRelation();
+				csmUserRelation.setUserId(sysUser.getUserId());
+				csmUserRelation.setParentId(pId);
+				sysCsmUserRelationService.save(csmUserRelation);
+			});
+		}
+
 		return Boolean.TRUE;
 	}
 

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

@@ -25,6 +25,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptRelation;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.*;
@@ -46,12 +47,11 @@ import org.springframework.transaction.annotation.Transactional;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -64,7 +64,6 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent> implements WmDaAgentService {
 	private final SysDeptService sysDeptService;
-	private final SysUserService sysUserService;
 	private final SysUserMapper sysUserMapper;
 	private final WmDaAgentMapper wmDaAgentMapper;
 	private final WmDaDrugEntMapper wmDaDrugEntMapper;
@@ -79,6 +78,8 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 	private final SysDeptSubMapper sysDeptSubMapper;
 	private final WmTaskSubmissionRuleService taskSubmissionRuleService;
 	private final WmTaskSubmissionPercentRuleService taskSubmissionPercentRuleService;
+	private final SysCsmUserRelationService sysCsmUserRelationService;
+	private final SysDeptCsmMapper sysDeptCsmMapper;
 	private final RedisTemplate redisTemplate;
 
 	public String getDeptBuildName(String deptId) {
@@ -316,7 +317,6 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 		}
 		wmDaAgent.setTenantId(1);
 		wmDaAgent.setDelFlag(0 + "");
-		wmDaAgent.setCreateTime(LocalDateTime.now());
 		List<WmDaDrugEnt> listEnts = new ArrayList<>();
 		if (wmDaAgent.getExtDrugEnt() != null) {
 			String[] ents = wmDaAgent.getExtDrugEnt().split(",");
@@ -332,6 +332,7 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 		}
 		wmDaAgent.setTemp1(temp1);
 		wmDaAgent.setCreateTime(LocalDateTime.now());
+		wmDaAgent.setCreateUser(SecurityUtils.getUser().getId());
 		wmDaAgent.setManagement(String.valueOf(1));
 		wmDaAgent.setPgqx(1 + "");
 		super.save(wmDaAgent);
@@ -436,6 +437,18 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 		taskSubmissionPercentRuleService.initTaskTypeConfigRule(Collections.singleton(Integer.valueOf(wmDaAgent.getDeptId())));
 
 		this.updateById(wmDaAgent);
+
+		// CSM创建的企业,负责人默认是该CSM
+		Integer userId = SecurityUtils.getUser().getId();
+		SysUser user = sysUserMapper.selectById(userId);
+		SysDeptCsm insert = new SysDeptCsm();
+		insert.setDeptId(deptId);
+		insert.setUserId(userId);
+		insert.setCsmName(user.getRealname());
+		insert.setQrCodeId(" ");
+		insert.setCorpId(" ");
+		sysDeptCsmMapper.insert(insert);
+
 		List<WmRelation> newList = new ArrayList<>();
 		for (String upId : ids) {
 			WmRelation wmRelation = new WmRelation();
@@ -744,7 +757,7 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 //			wmDeptList.add(wmDept);
 //			return wmDeptList;
 //		}
-		if (SecurityUtils.getRoles().contains(1) || SecurityUtils.getRoles().contains(2)) {
+		if (SecurityUtils.getRoles().contains(1) || SecurityUtils.getRoles().contains(2) || SecurityUtils.getRoles().contains(35)) {
 			SysDept sysDept = new SysDept();
 			List<SysDept> sysDeptList = sysDeptMapper.selectListByDept(sysDept);
 			for (int i = 0; i < sysDeptList.size(); i++) {
@@ -755,9 +768,32 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 			}
 			return wmDeptList;
 		} else {
-			SysDeptRelation sysDeptRelation = new SysDeptRelation();
-			sysDeptRelation.setAncestor(SecurityUtils.getUser().getDeptId());
-			List<SysDeptRelation> sysDeptRelationList = sysDeptRelationMapper.selectDeptRelationsList(sysDeptRelation);
+
+			final List<SysDeptRelation> sysDeptRelationList = new ArrayList<>();
+			if (SecurityUtils.getRoles().contains(19)) {
+				// CSM只能查看自己维护的企业下的数据, 以及下属维护的企业下的数据
+				Integer userId = SecurityUtils.getUser().getId();
+				// 递归查询下属关联的userId
+				Set<Integer> allUserIds = sysCsmUserRelationService.recurseCsmLowerUserId(Collections.singleton(userId), new AtomicInteger(10));
+				// 查询企业id
+				List<SysDeptCsm> deptCsms = sysDeptCsmMapper.selectList(Wrappers.<SysDeptCsm>lambdaQuery()
+						.in(SysDeptCsm::getUserId, allUserIds));
+				if (CollUtil.isEmpty(deptCsms)) {
+					return Collections.emptyList();
+				}
+
+				deptCsms.forEach(deptCsm -> {
+					SysDeptRelation sysDeptRelation = new SysDeptRelation();
+					sysDeptRelation.setAncestor(deptCsm.getDeptId());
+					List<SysDeptRelation> relations = sysDeptRelationMapper.selectDeptRelationsList(sysDeptRelation);
+					sysDeptRelationList.addAll(relations);
+				});
+			} else {
+				SysDeptRelation sysDeptRelation = new SysDeptRelation();
+				sysDeptRelation.setAncestor(SecurityUtils.getUser().getDeptId());
+				sysDeptRelationList.addAll(sysDeptRelationMapper.selectDeptRelationsList(sysDeptRelation));
+			}
+
 			List<WmDaAgent> wmDaAgentList = new ArrayList<>();
 			List<WmDaDrugEnt> wmDaDrugEntList = new ArrayList<>();
 			List<SysDept> sysDeptList = new ArrayList<>();

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

@@ -37,11 +37,12 @@ import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -175,6 +176,8 @@ public class WmDaDrugEntDrugtableServiceImpl extends ServiceImpl<WmDaDrugEntDrug
 
 		updateEntity.setId(wmDaDrugEntDrugtable.getId());
 		updateEntity.setDrugEntNum(deptList.size());
+		updateEntity.setUpdateUser(SecurityUtils.getUser().getId());
+		updateEntity.setUpdateTime(LocalDateTime.now());
 		this.baseMapper.updateById(updateEntity);
 
 

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

@@ -142,6 +142,7 @@ public class WmDaDrugEntServiceImpl extends ServiceImpl<WmDaDrugEntMapper, WmDaD
 
 		entity.setDeptId(String.valueOf(System.currentTimeMillis() / 1000));
 		entity.setCreateTime(LocalDateTime.now());
+		entity.setCreateUser(SecurityUtils.getUser().getId());
 
 		if (super.save(entity)) {
 			SysDept sysDept = new SysDept();

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

@@ -1996,9 +1996,9 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 	}
 
 	@Override
-	public Page<WmScorePackage> selectWmScorePackageLists(Page<WmScorePackage> page, String scorePackageName, String acceptSug, LocalDate allocationDate, LocalDate endLabelDate) {
+	public Page<WmScorePackage> selectWmScorePackageLists(Page<WmScorePackage> page, Integer deptId, String scorePackageName,
+														  String acceptSug, LocalDate allocationDate, LocalDate endLabelDate) {
 
-		Integer deptId = SecurityUtils.getUser().getDeptId();
 		return wmScorePackageMapper.newSelectWmScorePackageLists(page, String.valueOf(deptId),
 				scorePackageName, acceptSug, allocationDate, endLabelDate);
 	}
@@ -3747,6 +3747,7 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 				LocalDateTime notifyTime = settleNote.getNotifyTime();
 				if (notifyTime != null) {
 					ouPut.setBelongDate(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(notifyTime));
+					ouPut.setNotifyTime(notifyTime);
 				}
 				if (ouPut.getInvoiceCategory() == null) {
 					ouPut.setInvoiceCategory(settleNote.getInvoiceType());

+ 6 - 6
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptInvoiceRelationMapper.xml

@@ -24,9 +24,9 @@
         FROM wm_score_package p
         LEFT JOIN sys_dept_invoice_relation r on r.package_id = p.id AND r.del_flag = '0'
         <where>
-            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4')
+            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4', '5')
                      AND (p.relation_score_id is null OR length(relation_score_id) = '')
-                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4')))
+                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4', '5')))
             AND p.send_package_dept_id IN
             <foreach collection="deptIdList" item="deptId" index="idx" separator="," open="(" close=")">
                 #{deptId}
@@ -52,9 +52,9 @@
         FROM wm_score_package p
         LEFT JOIN sys_dept_invoice_relation r on r.package_id = p.id AND r.del_flag = '0'
         <where>
-            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4')
+            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4', '5')
                     AND (p.relation_score_id is null OR length(relation_score_id) = '')
-                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4')))
+                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4', '5')))
             AND p.send_package_dept_id IN
             <foreach collection="deptIdList" item="deptId" index="idx" separator="," open="(" close=")">
                 #{deptId}
@@ -80,9 +80,9 @@
         FROM wm_score_package p
         LEFT JOIN sys_dept_invoice_relation r on r.package_id = p.id
         <where>
-            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4')
+            AND (p.package_type1 = '1' AND p.package_type2 = '1' AND p.score_package_status in ('4', '5') AND p.typeid in ('3', '4', '5')
                     AND (p.relation_score_id is null OR length(relation_score_id) = '')
-                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4')))
+                OR (p.old_package = '0' AND p.package_finish_status = '1' AND p.typeid not in ('3', '4', '5')))
             AND r.del_flag = '0'
             AND r.invoice_id = #{invoiceId}
         </where>

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

@@ -470,6 +470,9 @@
 		LEFT JOIN sys_user_role  ur ON ur.user_id = u.user_id
 		LEFT JOIN sys_role  r ON r.role_id = ur.role_id
 		LEFT JOIN sys_dept_sub s ON s.dept_id = u.dept_id and s.enable_flag = '1'
+		<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+			left join sys_dept_csm dc on dc.dept_id=u.dept_id
+		</if>
 		<where>
 			u.del_flag = '0'
 			<if test="query.username != null and query.username != ''">
@@ -525,6 +528,13 @@
 				</foreach>
 				)
 			</if>
+			<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+				and dc.user_id in (
+				<foreach collection="query.csmUserIdList" item="userId" index="index" separator=",">
+					#{userId}
+				</foreach>
+				)
+			</if>
 			AND <![CDATA[ u.username<>'admin']]>
 		</where>
 		ORDER BY u.create_time DESC
@@ -744,4 +754,26 @@
 		</where>
 
 	</select>
+
+	<select id="listUserByRole" resultMap="baseResultMap">
+		SELECT
+		distinct
+		u.user_id,
+		u.username,
+		u.realname
+		FROM
+		sys_user  u
+		LEFT JOIN sys_user_role  ur ON ur.user_id = u.user_id
+		<where>
+			u.del_flag = '0'
+			<if test="query.role != null and query.role.size()>0">
+				AND ur.role_id in (
+				<foreach collection="query.role" item="pid" index="index" separator=",">
+					#{pid}
+				</foreach>
+				)
+			</if>
+		</where>
+		ORDER BY u.create_time DESC
+	</select>
 </mapper>

+ 11 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaAgentMapper.xml

@@ -74,10 +74,13 @@
 
 	<!-- 分页查询派工企业 -->
 	<select id="selectWmManagementPage" resultMap="wmDaAgentMap">
-		SELECT
+		SELECT distinct
 		a.*, d.dept_permissions, d.level as dept_level, d.financial_review_type
 		FROM wm_da_agent a
 		LEFT JOIN sys_dept d ON d.dept_id = a.dept_id
+		<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+			left join sys_dept_csm dc on dc.dept_id = a.dept_id
+		</if>
 		<where>
 			AND d.dept_id IS NOT NULL
 			AND (d.level = 3 OR d.level = 4 OR d.level = 5)
@@ -117,6 +120,13 @@
 			<if test="query.qylx != null and query.qylx!=''">
 				AND qylx = #{query.qylx,jdbcType=VARCHAR}
 			</if>
+			<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+				and dc.user_id in (
+				<foreach collection="query.csmUserIdList" item="userId" index="index" separator=",">
+					#{userId}
+				</foreach>
+				)
+			</if>
 		</where>
 		ORDER BY id DESC
 	</select>

+ 12 - 2
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDrugEntMapper.xml

@@ -45,7 +45,7 @@
 
 	<!-- 分页查询 -->
 	<select id="selectPage" resultMap="wmDaDrugEntMap">
-		SELECT
+		SELECT distinct
 			e.id,
 			e.entname,
 			e.entcode,
@@ -66,7 +66,10 @@
 			e.subject_type,
 			d.dept_permissions,
 			d.financial_review_type
-		FROM wm_da_drug_ent e LEFT JOIN sys_dept d ON e.dept_id=d.dept_id
+		FROM wm_da_drug_ent e LEFT JOIN sys_dept d ON e.dept_id = d.dept_id
+		<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+			left join sys_dept_csm dc on dc.dept_id = e.dept_id
+		</if>
 		<where>
 			<if test="query.entname != null and query.entname != ''">
 				AND e.entname LIKE CONCAT('%', #{query.entname, jdbcType=VARCHAR}, '%')
@@ -74,6 +77,13 @@
 			<if test="query.entcode != null and query.entcode != ''">
 				AND e.entcode = #{query.entcode, jdbcType=VARCHAR}
 			</if>
+			<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+				and dc.user_id in (
+				<foreach collection="query.csmUserIdList" item="userId" index="index" separator=",">
+					#{userId}
+				</foreach>
+				)
+			</if>
 		</where>
 		ORDER BY e.create_time DESC
 	</select>

+ 15 - 9
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

@@ -812,16 +812,16 @@
 		from wm_score_package o
 		left join sys_dept u on u.dept_id = o.accept_sug
 		<where>
-			o.typeid not in ('3','4')
+			o.typeid not in ('3', '4', '5')
 			and o.old_package = '0'
 			AND o.send_package_dept_id = #{sendDeptId}
 			<if test="scorePackageName != null">
 				AND o.score_package_name like CONCAT('%',#{scorePackageName},'%')
 			</if>
-			<if test="allocationDate != null and endLabelDate != null">
+			<if test="allocationDate != null and allocationDate != '' and endLabelDate != null and endLabelDate != ''">
 				AND (o.allocation_date BETWEEN #{allocationDate} AND #{endLabelDate})
 			</if>
-			<if test="acceptSug != null">
+			<if test="acceptSug != null and acceptSug != ''">
 				AND o.accept_sug = #{acceptSug}
 			</if>
 		</where>
@@ -832,7 +832,7 @@
 		select o.*,u.name as acceptSug
 		from wm_score_package o
 		left join sys_dept u on u.dept_id=o.accept_sug
-		where 1 = 1 and o.typeid not in (3,4)
+		where 1 = 1 and o.typeid not in (3, 4, 5)
 		<if test="query.id != null">
 			AND o.id != #{query.id,jdbcType=INTEGER}
 		</if>
@@ -976,14 +976,14 @@
 		FROM wm_score_package
 		WHERE id != #{id,jdbcType=VARCHAR}
 		  AND enable_flag = '0'
-		  AND typeid NOT IN (3, 4)
+		  AND typeid NOT IN (3, 4, 5)
 		ORDER BY id DESC
 	</select>
 	<select id="selectByReRelatedService" resultMap="wmScorePackageMap" parameterType="java.lang.String">
 		select
 		*
 		from wm_score_package
-		where 1=1 and typeid not in(3,4) and enable_flag='0'
+		where 1=1 and typeid not in(3, 4, 5) and enable_flag='0'
 		<if test="sendPackageDeptId != null and sendPackageDeptId !=''">
 			AND send_package_dept_id = #{sendPackageDeptId,jdbcType=VARCHAR}
 		</if>
@@ -1500,13 +1500,16 @@
 			p.source_type,
 			p.oms_order_sn,
 			p.invoice_number,
-			p.invoice_file
-		FROM wm_score_package p left join sys_dept d on p.send_package_dept_id = d.dept_id
+			p.invoice_file,
+			p2.score_package_name as relation_score_name
+		FROM wm_score_package p
+			left join wm_score_package p2 on p.relation_score_id = p2.id
+		    left join sys_dept d on p.send_package_dept_id = d.dept_id
 		<if test="query.userNames != null">
 			left join wm_score_package_status ps on p.id = ps.package_id
 			left join sys_user su on ps.user_id = su.user_id
 		</if>
-		<if test="query.notifyTime != null and query.notifyTime.length == 2">
+		<if test="(query.notifyTime != null and query.notifyTime.length == 2) or (query.subToGigTime != null and query.subToGigTime.length == 2)">
 			left join wm_score_package_settle_note sn on p.id = sn.package_id
 		</if>
 		<where>
@@ -1567,6 +1570,9 @@
 			<if test="query.notifyTime != null and query.notifyTime.length == 2">
 				AND sn.notify_time between #{query.notifyTime[0]} and #{query.notifyTime[1]}
 			</if>
+			<if test="query.subToGigTime != null and query.subToGigTime.length == 2">
+				AND sn.sub_to_gig_time between #{query.subToGigTime[0]} and #{query.subToGigTime[1]}
+			</if>
 		</where>
 		ORDER BY
 		<if test="query.mahSettleStep != null">