Ver Fonte

feat: 小程序签署平台协议

shc há 1 ano atrás
pai
commit
0c32f0a456

+ 31 - 0
doc/db/19sys_user_agr_his.sql

@@ -0,0 +1,31 @@
+USE `cnbg_20240511_001`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_user_agr_his
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_agr_his`;
+CREATE TABLE `sys_user_agr_his`
+(
+    `his_id`      BIGINT AUTO_INCREMENT COMMENT '主键ID',
+    `agr_name`    VARCHAR(128)                       NOT NULL COMMENT '协议名称',
+    `agr_ver`     VARCHAR(128)                       NOT NULL COMMENT '协议版本号',
+    `create_by`   VARCHAR(64)                        NOT NULL COMMENT '创建人',
+    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
+    PRIMARY KEY `pk_id` (`his_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = DYNAMIC COMMENT ='用户协议签署表';
+
+
+-- ----------------------------
+-- Records of sys_user_agr_his
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 22 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/SysUserDTO.java

@@ -0,0 +1,22 @@
+package com.qunzhixinxi.hnqz.admin.api.dto;
+
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@NoArgsConstructor(access = AccessLevel.NONE)
+public final class SysUserDTO {
+
+    @Data
+    public static class OnPltUserAgreementSign{
+
+        @NotBlank(message = "协议名称必填")
+        private String agreementName;
+
+        @NotBlank(message = "协议版本必填")
+        private String agreementVersion;
+
+    }
+}

+ 28 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUserAgreementHistory.java

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName(value = "sys_user_agr_his")
+public class SysUserAgreementHistory {
+
+    @TableId(value = "his_id", type = IdType.AUTO)
+    private Long historyId;
+
+    @TableField(value = "agr_name")
+    private String agreementName;
+
+    @TableField(value = "agr_ver")
+    private String version;
+
+    private String createBy;
+
+    private LocalDateTime createTime;
+
+}

+ 3 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/UserVO.java

@@ -156,9 +156,11 @@ public class UserVO implements Serializable {
      */
     private String w1;
 
+    /**
+     * 个性签名
+     */
     private String userSign;
 
-
     /**
      * 小程序签署协议信息
      */

+ 62 - 156
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -10,7 +10,6 @@ import cn.hutool.core.lang.Assert;
 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;
@@ -24,16 +23,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.zxing.WriterException;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
+import com.qunzhixinxi.hnqz.admin.api.dto.SysUserDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserBusinessCardDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmPkgDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmQuizDTO;
 import com.qunzhixinxi.hnqz.admin.api.dto.WmTaskDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
-import com.qunzhixinxi.hnqz.admin.api.entity.SysDeptCsm;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysRole;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserAgreementHistory;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmAdRecord;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPkgQuizRelation;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmPlatformQuizTestResult;
@@ -86,10 +86,10 @@ import com.qunzhixinxi.hnqz.admin.api.constant.enums.UserSignResultEnum;
 import com.qunzhixinxi.hnqz.admin.event.TaskInfoImgEvent;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScoreTaskTypeMapper;
 import com.qunzhixinxi.hnqz.admin.service.MedicalEquipmentService;
-import com.qunzhixinxi.hnqz.admin.service.SysDeptCsmService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserAgreementHistoryService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserExtRecordService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
@@ -100,7 +100,6 @@ import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntDrugtableService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
-import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeTemplateService;
 import com.qunzhixinxi.hnqz.admin.service.WmFeedbackService;
 import com.qunzhixinxi.hnqz.admin.service.WmPkgQuizRelationService;
 import com.qunzhixinxi.hnqz.admin.service.WmPlatformQuizTestResultService;
@@ -140,7 +139,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -237,14 +235,12 @@ public class ApiController {
     private final RedisTemplate<String, Object> redisTemplate;
     private final UpmsConfig upmsConfig;
     private final WmWkAlbumService wmWkAlbumService;
-    private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
     private final WmUserSignDetailService wmUserSignDetailService;
     private final WmAdRecordService adRecordService;
     private final SysUserExtRecordService sysUserExtRecordService;
     private final SysUserSubService sysUserSubService;
     private final WmTaskSubmissionRuleService taskSubmissionRuleService;
     private final WmTaskSubmissionPercentRuleService wmTaskSubmissionPercentRuleService;
-    private final SysDeptCsmService deptCsmService;
     private final MedicalEquipmentService medicalEquipmentService;
     private final Sequence taskSequence;
     private final WmPkgQuizRelationService quizRelationService;
@@ -253,6 +249,7 @@ public class ApiController {
     private final WmUserSignService wmUserSignService;
     private final WmPlatformQuizTestResultService platformQuizTestResultService;
     private final ApplicationEventPublisher applicationEventPublisher;
+    private final SysUserAgreementHistoryService userAgreementHistoryService;
 
     /**
      * 通过任务类型获取表单配置
@@ -796,20 +793,20 @@ public class ApiController {
     /**
      * 更新用户信息(openId 和头像)
      *
-     * @param uId      用户ID
+     * @param uId    用户ID
      * @param openId openId
-     * @param avatar   头像
+     * @param avatar 头像
      */
     private void updateUserOpenIdAndAvatar(Integer uId, String openId, String avatar) {
         SysUser u = sysUserService.getById(uId);
 
         SysUser updateU = new SysUser();
         updateU.setUserId(uId);
-        if (StrUtil.isBlank(u.getWxOpenid()) || "null".equals(u.getWxOpenid())){
+        if (StrUtil.isBlank(u.getWxOpenid()) || "null".equals(u.getWxOpenid())) {
             updateU.setWxOpenid(openId);
         }
 
-        if (StrUtil.isBlank(u.getAvatar())){
+        if (StrUtil.isBlank(u.getAvatar())) {
             updateU.setAvatar(avatar);
         }
 
@@ -828,7 +825,7 @@ public class ApiController {
     public R<Map<String, Object>> getUserInfo(String code, String avatar) {
         Map<String, Object> result = new HashMap<>();
 
-        //获取用户基本信息
+        // 获取用户基本信息
         HnqzUser hnqzUser = SecurityUtils.getUser();
         UserDTO userDTO = new UserDTO();
         userDTO.setPlatId(hnqzUser.getPlatId());
@@ -854,67 +851,22 @@ public class ApiController {
             mapOne.put("userSign", sysU.getUserSign());
             mapOne.put("reSignedAgreement", sysU.getReSignedAgreement());
 
-            // 获取会员已结算信息和和待结算信息
-            List<WmScorePackageStatus> packageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
-                    .eq(WmScorePackageStatus::getUserId, sysU.getUserId())
-                    .eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val()));
-
-            List<String> ids = packageStatuses.stream().map(WmScorePackageStatus::getPackageId).collect(Collectors.toList());
-
-
-            int paid = 0;
-            int unpaid = 0;
-            if (CollUtil.isNotEmpty(ids)) {
-                List<WmScorePackage> packages = wmScorePackageService.listByIds(ids);
-
-                // 已结算
-                paid = packages.stream()
-                        .filter(pkg -> PersonalScoreRecordVO.PersonalScoreRecordStatus.PAID.getSettleStatus().equals(String.valueOf(pkg.getSettleStatus())))
-                        .map(WmScorePackage::getScore)
-                        .reduce(0, Integer::sum);
-                // 待结算
-                unpaid = packages.stream()
-                        .filter(pkg -> !PersonalScoreRecordVO.PersonalScoreRecordStatus.PAID.getSettleStatus().equals(String.valueOf(pkg.getSettleStatus())))
-                        .filter(pkg -> StrUtil.split(PersonalScoreRecordVO.PersonalScoreRecordStatus.UNPAID.getScorePackageStatus(), StrUtil.COMMA).contains(pkg.getScorePackageStatus()))
-                        .map(WmScorePackage::getScore)
-                        .reduce(0, Integer::sum);
-
-            }
-            mapOne.put("paid", paid);
-            mapOne.put("unpaid", unpaid);
-
-            if (Boolean.TRUE.equals(redisTemplate.hasKey(CacheConstants.USER_NOTICE_KEY + sysU.getUserId()))) {
-                mapOne.put("notice", true);
-            }
-            if (Boolean.TRUE.equals(redisTemplate.hasKey(CacheConstants.USER_ADD_NOTICE_KEY + sysU.getUserId()))) {
-                mapOne.put("userNewFlag", true);
-            }
-
+            // 设置头像
             if (StrUtil.isBlank(sysU.getAvatar())) {
-                mapOne.put("avatar", avatar);
-                SysUser sysUser2 = sysUserService.getById(sysU.getUserId());
-                sysUser2.setAvatar(avatar);
-                sysUserService.updateById(sysUser2);
+                SysUser u = new SysUser();
+                u.setUserId(sysU.getUserId());
+                u.setAvatar(avatar);
+                sysUserService.updateById(u);
             } else {
-                mapOne.put("avatar", sysU.getAvatar());
+                avatar = sysU.getAvatar();
             }
+            mapOne.put("avatar", avatar);
 
             // 获取部门信息
             SysDept sysDept = sysDeptService.getById(sysU.getDeptId());
             mapOne.put("deptId", sysDept.getDeptId().toString());
             mapOne.put("deptName", sysDept.getName());
 
-            // 获取csm信息
-            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) {
                 WmDaDrugEnt drugEnt = wmDaDrugEntService.selectByDeptId(sysDept.getDeptId());
@@ -976,53 +928,10 @@ public class ApiController {
             mapOne.put("packageList", listMap);
             mapOne.put("waitApprove", String.valueOf(waitApprove));
             mapOne.put("onTheWay", String.valueOf(onTheWay));
-            mapOne.put("jumpFlag", "0");
-
-            // 查询配置了任务类型模板的任务类型
-            mapOne.put("hasTaskTypeTemplate", wmDeptTaskTypeTemplateService.listTaskTypeByDeptId(sysU.getDeptId()));
-
-            mapOne.put("existEidResult", false);
 
             // 签署协议信息
-            Set<String> agreementSet = sysUserList.stream()
-                    .filter(userVO -> JSONUtil.isJsonArray(userVO.getSignAgreement()))
-                    .flatMap(userVO -> JSONUtil.parseArray(userVO.getSignAgreement()).stream())
-                    .map(o -> JSONUtil.parseObj(o).getStr("agreementType"))
-                    .collect(Collectors.toSet());
-            mapOne.put("signedAgreement", agreementSet);
-
-            // 超60周岁是否提醒
-            Map<String, String> checkResult = sysUserService.checkSixtyYearsOld(sysU);
-
-            if (CollUtil.isNotEmpty(checkResult)) {
-                mapOne.put("ageReminderInfo", CollUtil.get(checkResult.values(), 0));
-                // 超60周岁限制
-                mapOne.put("ageLimit", checkResult.containsKey("OVER"));
-                // 超60周岁提示
-                mapOne.put("ageReminder", Boolean.TRUE.equals(sysU.getAgeReminder()) && checkResult.containsKey("HALF_YEAR"));
-            } else {
-                mapOne.put("ageLimit", false);
-                mapOne.put("ageReminder", false);
-                mapOne.put("ageReminderInfo", null);
-            }
-
-            // 获取发起认证的令牌
-            String randomStr;
-
-            // 获取操作员
-            HnqzUser finaAdmin = SecurityUtils.getUser();
-            final String token = String.format("%d:batch_channel_cert:%d:token", finaAdmin.getTenantId(), finaAdmin.getId());
-
-            // 返回缓存生成好的
-            if (Boolean.TRUE.equals(redisTemplate.hasKey(token))) {
-                randomStr = (String) redisTemplate.opsForValue().get(token);
-            } else {
-                // 生成缓存key,将token缓存到redis
-                do {
-                    randomStr = RandomStringUtils.randomNumeric(6);
-                } while (Boolean.FALSE.equals(redisTemplate.opsForValue().setIfAbsent(token, randomStr)));
-            }
-            mapOne.put("certToken", randomStr);
+            List<SysUserAgreementHistory> histories = userAgreementHistoryService.list(Wrappers.<SysUserAgreementHistory>lambdaQuery().eq(SysUserAgreementHistory::getCreateBy, sysU.getUsername()));
+            mapOne.put("signedAgreement", histories);
 
             list.add(mapOne);
 
@@ -1033,11 +942,6 @@ public class ApiController {
         result.put("userInfo", list);
         result.put("roles", roleList);
 
-
-        result.put("completedCount", 0);
-        result.put("sumCount", 0);
-        result.put("taskProgress", 0);
-
         return R.ok(result);
     }
 
@@ -1573,7 +1477,7 @@ public class ApiController {
     @GetMapping("/getAlbumPage")
     public R<?> getWmWkAlbumPage(Page<WmWkAlbum> page, WmWkAlbum wmWkAlbum, String shareUserId) {
 
-        //查询当前登录人药企的
+        // 查询当前登录人药企的
         System.out.println(shareUserId);
         if (StringUtils.isNotEmpty(shareUserId)) {
             WmWkAlbumApiInput input = new WmWkAlbumApiInput();
@@ -1618,7 +1522,7 @@ public class ApiController {
     @GetMapping("/getAlbumPageNew")
     public R<?> getAlbumPageNew(Page page, WmWkAlbum wmWkAlbum, String shareUserId) {
 
-        //查询当前登录人药企的
+        // 查询当前登录人药企的
         System.out.println(shareUserId);
         if (StringUtils.isNotEmpty(shareUserId)) {
             WmWkAlbumApiInput input = new WmWkAlbumApiInput();
@@ -1973,9 +1877,9 @@ public class ApiController {
                 Map<String, List<WmScorePackageSettleNote>> settelMap = new HashMap<>();
                 if (CollUtil.isNotEmpty(scorePackageIds)) {
                     // todo
-                    //List<WmScorePackageSettleNote> settleNotes = wmScorePackageSettleNoteMapper.selectList(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+                    // List<WmScorePackageSettleNote> settleNotes = wmScorePackageSettleNoteMapper.selectList(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
                     //		.in(WmScorePackageSettleNote::getPackageId, scorePackageIds));
-                    //if (CollUtil.isNotEmpty(settleNotes)) {
+                    // if (CollUtil.isNotEmpty(settleNotes)) {
                     //	settelMap = settleNotes.stream()
                     //			.collect(Collectors.groupingBy(WmScorePackageSettleNote::getPackageId));
                     //}
@@ -2332,9 +2236,9 @@ public class ApiController {
                 return R.ok(1, "该积分包需要认证成功后才能领取,请点击“去认证”完成认证");
             }
             //// 该企业下只要有一个渠道是 “已核身/已认证”就可以领包
-            //boolean certNoMatch = userSubList.stream().noneMatch(userSub -> Arrays.asList(1, 15).contains(userSub.getCertStatus())
+            // boolean certNoMatch = userSubList.stream().noneMatch(userSub -> Arrays.asList(1, 15).contains(userSub.getCertStatus())
             //		|| (userSub.getCertStatus().equals(2) && GigCallBackStatus.IN_PROGRESS.equals(userSub.getCallbackStatus())));
-            //if (certNoMatch) {
+            // if (certNoMatch) {
             //	return R.ok(1, "该积分包需要认证成功后才能领取,请点击“去认证”完成认证");
             //}
         }
@@ -2472,15 +2376,15 @@ public class ApiController {
                 wmTaskRule.setRuleMonth(wmTask.getTaskRuleId());
                 wmTaskRule.setDrugentId(userVO.getDrugEntId());
                 List<WmTaskRule> wmTaskRuleList = wmTaskRuleService.list(Wrappers.query(wmTaskRule));
-                if (wmTaskRuleList.size() > 0) {
+                if (CollUtil.isNotEmpty(wmTaskRuleList)) {
                     if (num == 0) {
                         queryWrapper.and(
-                                Wrapper -> Wrapper.eq(WmTask::getTaskRuleId, wmTaskRuleList.get(0).getId() + "")
+                                Wrapper -> Wrapper.eq(WmTask::getTaskRuleId, wmTaskRuleList.get(0).getId())
                                         .eq(WmTask::getTaskUserId, userVO.getUserId() + "")
                         );
                     } else {
                         queryWrapper.or(
-                                Wrapper -> Wrapper.eq(WmTask::getTaskRuleId, wmTaskRuleList.get(0).getId() + "")
+                                Wrapper -> Wrapper.eq(WmTask::getTaskRuleId, wmTaskRuleList.get(0).getId())
                                         .eq(WmTask::getTaskUserId, userVO.getUserId() + "")
                         );
                     }
@@ -2746,7 +2650,7 @@ public class ApiController {
 
         // 获取更新操作的用户角色
         List<Integer> roles = SecurityUtils.getRoles();
-        Integer ageByIdCard;
+        int ageByIdCard;
         // 如果角色中包含全职和兼职就需要校验身份证年龄
         if (roles.contains(5) || roles.contains(6)) {
             // 校验身份证上的年龄
@@ -2808,11 +2712,11 @@ public class ApiController {
 
                     WmTask wmTask = new WmTask();
                     wmTask.setTaskFrom("1");
-                    wmTask.setTaskUserId(sysU.getUserId() + "");  //任务提交人
-                    wmTask.setLookintoDate(LocalDateTime.now());       //调研时间
+                    wmTask.setTaskUserId(sysU.getUserId() + "");  // 任务提交人
+                    wmTask.setLookintoDate(LocalDateTime.now());       // 调研时间
                     wmTask.setTaskStatus("1");
                     wmTask.setSubmitStatus("0");
-                    wmTask.setDrugEntId(sysU.getDrugEntId());//任务状态
+                    wmTask.setDrugEntId(sysU.getDrugEntId());// 任务状态
                     wmTask.setTaskTypeId("7");
                     wmTask.setShareImgUrl(imgUrl);
 
@@ -2846,7 +2750,7 @@ public class ApiController {
                     }
                     System.out.println("获取积分包ID:" + tWmScorePackage);
                     if (null == tWmScorePackage) {
-                        //return R.failed("获取积分包失败");
+                        // return R.failed("获取积分包失败");
                     } else {
                         wmTask.setScorePackageId(tWmScorePackage.getId());
                         wmTask.setTaskRuleId(tWmScorePackage.getTaskRuleId());
@@ -2867,9 +2771,9 @@ public class ApiController {
                     wmTask.setDeptId(sysU.getDeptId() + "");
                     wmTask.setSubmitStatus("0");
                     wmTask.setTaskNumber(taskSequence.nextNo());
-                    boolean isSave = wmTaskService.save(wmTask);   //保存任务
+                    boolean isSave = wmTaskService.save(wmTask);   // 保存任务
 
-                    //判断任务是否完成
+                    // 判断任务是否完成
                     if (isSave && null != tWmScorePackage) {
                         WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
                         if (null != wmScorePackage1) {
@@ -3128,7 +3032,7 @@ public class ApiController {
         if (StringUtils.isEmpty(type) || albumId == null) {
             return R.failed("参数异常,请求失败");
         }
-        //获取用户基本信息
+        // 获取用户基本信息
         if (null == SecurityUtils.getUser().getId()) {
             return R.failed("请求失败");
         }
@@ -3141,7 +3045,7 @@ public class ApiController {
         WmDaDrugEntDrugtable daDrugEntDrugtable = wmDaDrugEntDrugtableService.getById(album.getGlyp());
         // 获取关联药品的生产企业
         String drugProducer = daDrugEntDrugtable.getDrugEntName();
-        //筛选积分包
+        // 筛选积分包
         WmScorePackageStatus wmScorePackageStatus = new WmScorePackageStatus();
         wmScorePackageStatus.setUserId(sysUser.getUserId() + "");
         wmScorePackageStatus.setTaskAddFlag("1");
@@ -3203,20 +3107,6 @@ public class ApiController {
         return R.ok(listMap);
     }
 
-    ///**
-    // * 获取阅读人openid
-    // *
-    // * @param authCode 授权code
-    // * @return 获取结果
-    // */
-    //private String getReaderOpenId(String authCode) {
-    //    //获取小程序openid
-    //    log.info("小程序登录AUTH_CODE:{}", authCode);
-    //    Map<String, Object> resultMap = GetOpenIDUtil.oauth2GetOpenid(authCode.trim(), upmsConfig.getWechatEnv());
-    //    log.warn("小程序登录结果信息:{}", resultMap);
-    //    return (String) resultMap.get("openid");
-    //}
-
     /**
      * 分享阅读任务方法
      *
@@ -3456,8 +3346,8 @@ public class ApiController {
                 wmWkArticleShareService.save(wmWkArticleShare);
 
                 wmTask.setTaskFrom("1");
-                wmTask.setTaskUserId(String.valueOf(userVO.getUserId()));  //任务提交人
-                wmTask.setLookintoDate(now);       //调研时间
+                wmTask.setTaskUserId(String.valueOf(userVO.getUserId()));  // 任务提交人
+                wmTask.setLookintoDate(now);       // 调研时间
                 wmTask.setUpdateTime(now);
                 wmTask.setDrugEntId(userVO.getDrugEntId());
                 wmTask.setShareImgUrl(sharePicUrl);
@@ -3488,16 +3378,16 @@ public class ApiController {
                 // 校验结果为0积分的自动审核不通过
                 boolean autoRejectFlag = wmTask.getScore() == 0;
 
-                wmTask.setTaskStatus(autoRejectFlag ? "4" : "2"); //任务状态
+                wmTask.setTaskStatus(autoRejectFlag ? "4" : "2"); // 任务状态
                 wmTask.setSubmitStatus(autoRejectFlag ? "1" : "0");
                 wmTask.setTaskNumber(taskSequence.nextNo());
-                boolean isSave = wmTaskService.save(wmTask);   //保存任务
+                boolean isSave = wmTaskService.save(wmTask);   // 保存任务
 
 
-                //判断任务是否完成
+                // 判断任务是否完成
                 if (isSave) {
                     WmScorePackage wmScorePackage1 = wmScorePackageService.getById(tWmScorePackage.getId());
-                    //判断任务是否完成
+                    // 判断任务是否完成
                     if (null != wmScorePackage1) {
                         // 查询出 审核通过和审核中的任务
                         List<WmTask> wmTaskList = wmTaskService.list(Wrappers.<WmTask>lambdaQuery()
@@ -3667,8 +3557,8 @@ public class ApiController {
         int maxShareTimes = upmsConfig.getMaxShareTimes();
         if (CollUtil.isNotEmpty(rules)) {
             // 获取限制
-            for (int i = 0, size = rules.size(); i < size; i++) {
-                Map<String, Object> map = (Map<String, Object>) rules.get(i);
+            for (WmTaskSubmissionRule.SubmissionRule rule : rules) {
+                Map<String, Object> map = (Map<String, Object>) rule;
                 WmTaskSubmissionRule.SubmissionRule r = BeanUtil.mapToBean(map, WmTaskSubmissionRule.SubmissionRule.class, true, new CopyOptions());
 
                 if ("同一个人对同一个相册的转发上限".equals(r.getManual())) {
@@ -3725,8 +3615,8 @@ public class ApiController {
         int maxShareTimes = upmsConfig.getMaxShareTimes();
         if (CollUtil.isNotEmpty(rules)) {
             // 获取限制
-            for (int i = 0, size = rules.size(); i < size; i++) {
-                Map<String, Object> map = (Map<String, Object>) rules.get(i);
+            for (WmTaskSubmissionRule.SubmissionRule rule : rules) {
+                Map<String, Object> map = (Map<String, Object>) rule;
                 WmTaskSubmissionRule.SubmissionRule r = BeanUtil.mapToBean(map, WmTaskSubmissionRule.SubmissionRule.class, true, new CopyOptions());
 
                 if ("同一个人对同一篇文章的转发上限".equals(r.getManual())) {
@@ -4130,6 +4020,22 @@ public class ApiController {
         return R.ok(Collections.emptyList());
     }
 
+
+    @SysLog(value = "平台用户信息签署")
+    @PostMapping("/plt/user/agr/sign")
+    public R<Boolean> signUserAgreement(@Validated @RequestBody SysUserDTO.OnPltUserAgreementSign resource) {
+        HnqzUser user = SecurityUtils.getUser();
+
+        if (userAgreementHistoryService.checkSigned(resource.getAgreementName(), resource.getAgreementVersion(), user)) {
+            return R.failed(false, String.format("协议【%s(%s)】已签署,请勿重复签署", resource.getAgreementName(), resource.getAgreementVersion()));
+        }
+
+
+        return R.ok(userAgreementHistoryService.doSign(resource, user));
+
+
+    }
+
     /**
      * 小程序签署协议
      *

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserAgreementHistoryMapper.java

@@ -0,0 +1,9 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserAgreementHistory;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysUserAgreementHistoryMapper extends BaseMapper<SysUserAgreementHistory> {
+}

+ 14 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserAgreementHistoryService.java

@@ -0,0 +1,14 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.dto.SysUserDTO;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserAgreementHistory;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+
+public interface SysUserAgreementHistoryService extends IService<SysUserAgreementHistory> {
+
+
+    Boolean doSign(SysUserDTO.OnPltUserAgreementSign resource, HnqzUser user);
+
+    boolean checkSigned(String agreementName, String agreementVersion, HnqzUser user);
+}

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

@@ -0,0 +1,40 @@
+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.api.dto.SysUserDTO;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserAgreementHistory;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserAgreementHistoryMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysUserAgreementHistoryService;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+public class SysUserAgreementHistoryImpl extends ServiceImpl<SysUserAgreementHistoryMapper, SysUserAgreementHistory> implements SysUserAgreementHistoryService {
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean doSign(SysUserDTO.OnPltUserAgreementSign resource, HnqzUser user) {
+        SysUserAgreementHistory history = new SysUserAgreementHistory();
+        history.setAgreementName(resource.getAgreementName());
+        history.setVersion(resource.getAgreementVersion());
+        history.setCreateBy(user.getUsername());
+        history.setCreateTime(LocalDateTime.now());
+        return this.save(history);
+    }
+
+    @Override
+    public boolean checkSigned(String agreementName, String agreementVersion, HnqzUser user) {
+        return CollUtil.isNotEmpty(this.list(Wrappers.<SysUserAgreementHistory>lambdaQuery()
+                .eq(SysUserAgreementHistory::getCreateBy, user.getUsername())
+                .eq(SysUserAgreementHistory::getAgreementName, agreementName)
+                .eq(SysUserAgreementHistory::getVersion, agreementName)));
+    }
+}