Эх сурвалжийг харах

Merge branch 'feat-finemanage-20220118' into master

# Conflicts:
#	hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
Qutong 3 жил өмнө
parent
commit
dc1a6866b9
15 өөрчлөгдсөн 620 нэмэгдсэн , 15 устгасан
  1. 27 0
      db/v2.0/220118.sql
  2. 84 15
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  3. 140 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeTemplateController.java
  4. 82 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDeptTaskTypeTemplate.java
  5. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmUserSign.java
  6. 63 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmUserSignDetail.java
  7. 48 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/UserSignPurposeEnum.java
  8. 45 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/UserSignResultEnum.java
  9. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmDeptTaskTypeTemplateMapper.java
  10. 13 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmUserSignDetailMapper.java
  11. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDeptTaskTypeTemplateService.java
  12. 14 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmUserSignDetailService.java
  13. 32 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDeptTaskTypeTemplateServiceImpl.java
  14. 19 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignDetailServiceImpl.java
  15. 11 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

+ 27 - 0
db/v2.0/220118.sql

@@ -0,0 +1,27 @@
+-- 新增 部门任务类型模板
+CREATE TABLE `wm_dept_task_type_template`
+(
+    `id`           int(11) NOT NULL AUTO_INCREMENT,
+    `dept_id`      int(11) NOT NULL COMMENT '组织机构ID',
+    `task_type_id` int(11)     DEFAULT NULL COMMENT '任务类型id',
+    `template`     varchar(64) DEFAULT NULL COMMENT '模板',
+    `create_time`  datetime    DEFAULT NULL COMMENT '创建时间',
+    `create_user`  int(11)     DEFAULT NULL COMMENT '创建人',
+    `update_time`  datetime    DEFAULT NULL COMMENT '更新时间',
+    `update_user`  int(11)     DEFAULT NULL COMMENT '更新人',
+    PRIMARY KEY (`id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='部门任务类型模板';
+
+-- 新增 签到详情表
+CREATE TABLE `wm_user_sign_detail`
+(
+    `id`      INT         NOT NULL AUTO_INCREMENT,
+    `sign_id` INT         NOT NULL COMMENT '签到表id',
+    `drug`    text        NOT NULL COMMENT '推广药品',
+    `purpose` varchar(20) NOT NULL COMMENT '拜访目的',
+    `result`  CHAR(1)     NOT NULL COMMENT '拜访结果',
+    `remark`  VARCHAR(255) DEFAULT NULL COMMENT '备注',
+    PRIMARY KEY (`id`)
+) ENGINE = INNODB
+  DEFAULT CHARSET = utf8mb4 COMMENT = '用户签到详情';

+ 84 - 15
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -1,13 +1,11 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Assert;
-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.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -17,7 +15,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.zxing.WriterException;
-import com.logosdata.security.Common;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
@@ -27,17 +24,65 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.enums.SignatureStatusEnum;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
-import com.qunzhixinxi.hnqz.admin.entity.*;
+import com.qunzhixinxi.hnqz.admin.entity.SysCertResultRecord;
+import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDistribution;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEntDrugtable;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
+import com.qunzhixinxi.hnqz.admin.entity.WmFeedback;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
+import com.qunzhixinxi.hnqz.admin.entity.WmScoreTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskContentConfig;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskRule;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.WmUserSign;
+import com.qunzhixinxi.hnqz.admin.entity.WmUserSignDetail;
+import com.qunzhixinxi.hnqz.admin.entity.WmWkAlbum;
+import com.qunzhixinxi.hnqz.admin.entity.WmWkArticle;
+import com.qunzhixinxi.hnqz.admin.entity.WmWkArticleShare;
 import com.qunzhixinxi.hnqz.admin.entity.input.NoticeApiInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmWkAlbumApiInput;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
-import com.qunzhixinxi.hnqz.admin.enums.DisplayStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.UserSignPurposeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.UserSignResultEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCertResultRecordMapper;
-import com.qunzhixinxi.hnqz.admin.service.*;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
+import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
+import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
+import com.qunzhixinxi.hnqz.admin.service.SysFileService;
+import com.qunzhixinxi.hnqz.admin.service.SysPublicParamService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserService;
+import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
+import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
+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.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
+import com.qunzhixinxi.hnqz.admin.service.WmScoreTaskTypeService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskContentConfigService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskRuleService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.admin.service.WmUserSignDetailService;
+import com.qunzhixinxi.hnqz.admin.service.WmUserSignService;
+import com.qunzhixinxi.hnqz.admin.service.WmWkAlbumService;
+import com.qunzhixinxi.hnqz.admin.service.WmWkArticleService;
+import com.qunzhixinxi.hnqz.admin.service.WmWkArticleShareService;
 import com.qunzhixinxi.hnqz.admin.util.GetOpenIDUtil;
 import com.qunzhixinxi.hnqz.admin.util.Html2ImageByJsWrapper;
 import com.qunzhixinxi.hnqz.admin.util.QRCodeGenerator;
@@ -60,7 +105,6 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAddMemberRe
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
 import com.qunzhixinxi.hnqz.common.taxhelper.enums.TaxHelperCertStatus;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
-import io.opentracing.log.Fields;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -69,10 +113,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.data.redis.core.BoundValueOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.web.bind.annotation.*;
@@ -81,8 +123,13 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.imageio.ImageIO;
 import javax.imageio.stream.ImageOutputStream;
 import java.awt.image.BufferedImage;
-import java.io.*;
-import java.lang.reflect.Field;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.URI;
@@ -101,6 +148,7 @@ import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author hnqz
@@ -143,6 +191,8 @@ public class ApiController {
 	private final SysDeptSubService sysDeptSubService;
 	private final SysPublicParamService sysPublicParamService;
 	private final WmWkAlbumService wmWkAlbumService;
+	private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
+	private final WmUserSignDetailService wmUserSignDetailService;
 
 	@SysLog("通过任务类型获取表单配置")
 	@ApiOperation(value = "任务类型表单配置-通过任务类型获取表单配置", notes = "根据任务类型获取表单配置")
@@ -676,6 +726,9 @@ public class ApiController {
 						.collect(Collectors.toList());
 				mapOne.put("subList", subTypeList);
 
+				// 判断是否有配置医院拜访的任务类型模板
+				mapOne.put("checkHospitalTemplate", wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(sysU.getDeptId()));
+
 				list.add(mapOne);
 
 				roleList.addAll(roleIdList);
@@ -827,7 +880,7 @@ public class ApiController {
 		String taskTypeId = wmTaskContent.getTemp30();
 		R r = wmTaskContentService.saveTaskContent(wmTaskContent);
 
-		log.info("结果:{}, 草稿key:{}",r, draftKey);
+		log.info("结果:{}, 草稿key:{}", r, draftKey);
 		if (r.getCode() == CommonConstants.SUCCESS && StrUtil.isNotEmpty(draftKey)) {
 			HnqzUser user = SecurityUtils.getUser();
 			String key = String.format(CacheConstants.TASK_CONTENT_DRAFT, taskTypeId, user.getId());
@@ -893,7 +946,7 @@ public class ApiController {
 
 		// 生成草稿key
 		String draftKey = IdUtil.fastSimpleUUID();
-		log.info("草稿key:{}",draftKey);
+		log.info("草稿key:{}", draftKey);
 		wmTaskContent.setDraftKey(draftKey);
 
 		HnqzUser user = SecurityUtils.getUser();
@@ -2343,7 +2396,23 @@ public class ApiController {
 				if (null != wmTaskContent) {
 					if (null != wmTaskContent.getTemp3()) {
 						List<WmUserSign> wmUserSignList = new ArrayList<>();
-						wmUserSignList.add(wmUserSignService.getById(wmTaskContent.getTemp3()));
+						WmUserSign userSign = wmUserSignService.getById(wmTaskContent.getTemp3());
+						// 如果配置了医院拜访的任务类型模板,则关联保存签到详情
+						if (wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(Integer.valueOf(wmTask.getDeptId()))) {
+							WmUserSignDetail userSignDetail = wmUserSignDetailService.getOne(Wrappers.<WmUserSignDetail>lambdaQuery()
+									.eq(WmUserSignDetail::getSignId, userSign.getId()));
+							if (userSignDetail != null) {
+								if (ArrayUtil.isNotEmpty(userSignDetail.getPurpose())) {
+									String[] purposeNameArr = Stream.of(userSignDetail.getPurpose()).map(s -> UserSignPurposeEnum.resolve(s).getName()).toArray(String[]::new);
+									userSignDetail.setPurposeName(purposeNameArr);
+								}
+								if (StrUtil.isNotBlank(userSignDetail.getResult())) {
+									userSignDetail.setResultName(UserSignResultEnum.resolve(userSignDetail.getResult()).getName());
+								}
+								userSign.setUserSignDetail(userSignDetail);
+							}
+						}
+						wmUserSignList.add(userSign);
 						return R.ok(wmUserSignList);
 					}
 				}

+ 140 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDeptTaskTypeTemplateController.java

@@ -0,0 +1,140 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+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.entity.WmDeptTaskTypeTemplate;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeTemplateService;
+import com.qunzhixinxi.hnqz.admin.service.WmTaskTypeService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 部门任务类型模板控制层
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 11:59
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/dept-task-type-template")
+public class WmDeptTaskTypeTemplateController {
+
+	private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
+
+	private final WmTaskTypeService wmTaskTypeService;
+
+	/**
+	 * 查询任务类型模板配置列表
+	 *
+	 * @return
+	 */
+	@GetMapping("/list")
+	public R<?> listDeptTaskTypeTemplate(Page<WmDeptTaskTypeTemplate> page, @RequestParam(name = "deptId") Integer deptId) {
+		IPage<WmDeptTaskTypeTemplate> resultPage = wmDeptTaskTypeTemplateService.page(page, Wrappers.<WmDeptTaskTypeTemplate>lambdaQuery()
+				.eq(WmDeptTaskTypeTemplate::getDeptId, deptId));
+		if (CollUtil.isNotEmpty(resultPage.getRecords())) {
+			resultPage.getRecords().forEach(wmDeptTaskTypeTemplate -> {
+				WmTaskType taskType = wmTaskTypeService.getById(wmDeptTaskTypeTemplate.getTaskTypeId());
+				if (taskType != null) {
+					wmDeptTaskTypeTemplate.setTaskTypeName(taskType.getTaskTypeName());
+					wmDeptTaskTypeTemplate.setScore(taskType.getScore());
+				}
+			});
+		}
+		return R.ok(resultPage);
+	}
+
+	/**
+	 * 根据id查询任务类型模板配置
+	 *
+	 * @param id
+	 * @return
+	 */
+	@GetMapping("/{id}")
+	public R<WmDeptTaskTypeTemplate> getDeptTaskTypeTemplateById(@PathVariable("id") Integer id) {
+		WmDeptTaskTypeTemplate taskTypeTemplate = wmDeptTaskTypeTemplateService.getById(id);
+		if (taskTypeTemplate != null) {
+			WmTaskType taskType = wmTaskTypeService.getById(taskTypeTemplate.getTaskTypeId());
+			if (taskType != null) {
+				taskTypeTemplate.setTaskTypeName(taskType.getTaskTypeName());
+				taskTypeTemplate.setScore(taskType.getScore());
+			}
+		}
+		return R.ok(taskTypeTemplate);
+	}
+
+	/**
+	 * 保存
+	 *
+	 * @param wmDeptTaskTypeTemplate
+	 * @return
+	 */
+	@PostMapping
+	public R<?> saveDeptTaskTypeTemplate(@RequestBody @Validated({BaseEntity.Create.class}) WmDeptTaskTypeTemplate wmDeptTaskTypeTemplate) {
+		// 校验该企业下是否已存在该任务类型
+		int existCount = wmDeptTaskTypeTemplateService.count(Wrappers.<WmDeptTaskTypeTemplate>lambdaQuery()
+				.eq(WmDeptTaskTypeTemplate::getDeptId, wmDeptTaskTypeTemplate.getDeptId())
+				.eq(WmDeptTaskTypeTemplate::getTaskTypeId, wmDeptTaskTypeTemplate.getTaskTypeId()));
+		if (existCount > 0) {
+			return R.failed("任务类型已存在");
+		}
+		wmDeptTaskTypeTemplate.setCreateTime(LocalDateTime.now());
+		wmDeptTaskTypeTemplate.setCreateUser(SecurityUtils.getUser().getId());
+		wmDeptTaskTypeTemplate.setUpdateUser(null);
+		wmDeptTaskTypeTemplate.setUpdateTime(null);
+		wmDeptTaskTypeTemplateService.save(wmDeptTaskTypeTemplate);
+
+		return R.ok();
+	}
+
+	/**
+	 * 更新
+	 *
+	 * @param wmDeptTaskTypeTemplate
+	 * @return
+	 */
+	@PutMapping
+	public R<?> updateDeptTaskTypeTemplate(@RequestBody @Validated(BaseEntity.Update.class) WmDeptTaskTypeTemplate wmDeptTaskTypeTemplate) {
+		WmDeptTaskTypeTemplate update = new WmDeptTaskTypeTemplate();
+		update.setId(wmDeptTaskTypeTemplate.getId());
+		update.setTemplate(wmDeptTaskTypeTemplate.getTemplate());
+		update.setUpdateTime(LocalDateTime.now());
+		update.setUpdateUser(SecurityUtils.getUser().getId());
+		wmDeptTaskTypeTemplateService.updateById(update);
+
+		return R.ok();
+	}
+
+	/**
+	 * 根据id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping("/{id}")
+	public R<?> deleteDeptTaskTypeTemplate(@PathVariable("id") Integer id) {
+		wmDeptTaskTypeTemplateService.removeById(id);
+
+		return R.ok();
+	}
+}

+ 82 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDeptTaskTypeTemplate.java

@@ -0,0 +1,82 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.entity.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * 部门任务类型模板实体
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 11:53
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("wm_dept_task_type_template")
+public class WmDeptTaskTypeTemplate extends Model<WmDeptTaskTypeTemplate> {
+
+	/**
+	 * 主键id
+	 */
+	@TableId
+	@NotNull(message = "id不能为空", groups = BaseEntity.Update.class)
+	private Integer id;
+
+	/**
+	 * 部门id
+	 */
+	@NotNull(message = "部门id不能为空", groups = BaseEntity.Create.class)
+	private Integer deptId;
+
+	/**
+	 * 任务类型id
+	 */
+	@NotNull(message = "任务类型id不能为空", groups = BaseEntity.Create.class)
+	private String taskTypeId;
+
+	/**
+	 * 任务类型名称
+	 */
+	@TableField(exist = false)
+	private String taskTypeName;
+
+	/**
+	 * 任务积分
+	 */
+	@TableField(exist = false)
+	private Integer score;
+
+	/**
+	 * 模板
+	 */
+	@NotBlank(message = "模板不能为空", groups = {BaseEntity.Create.class, BaseEntity.Update.class})
+	private String template;
+
+	/**
+	 * 创建时间
+	 */
+	private LocalDateTime createTime;
+
+	/**
+	 * 创建人
+	 */
+	private Integer createUser;
+
+	/**
+	 * 更新时间
+	 */
+	private LocalDateTime updateTime;
+
+	/**
+	 * 更新人
+	 */
+	private Integer updateUser;
+}

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmUserSign.java

@@ -95,4 +95,10 @@ public class WmUserSign extends Model<WmUserSign> {
 	@TableField(exist = false)
 	private String packageId;
 
+	/**
+	 * 签到详情
+	 */
+	@TableField(exist = false)
+	private WmUserSignDetail userSignDetail;
+
 }

+ 63 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmUserSignDetail.java

@@ -0,0 +1,63 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 用户签到详情实体
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 17:45
+ */
+@Data
+@TableName("wm_user_sign_detail")
+@EqualsAndHashCode(callSuper = true)
+public class WmUserSignDetail extends Model<WmUserSignDetail> {
+
+	/**
+	 * 主键id
+	 */
+	@TableId
+	private Integer id;
+
+	/**
+	 * 签到表id
+	 */
+	private Integer signId;
+
+	/**
+	 * 推广药品
+	 */
+	private String[] drug;
+
+	/**
+	 * 拜访目的
+	 */
+	private String[] purpose;
+
+	/**
+	 * 拜访目的名称
+	 */
+	@TableField(exist = false)
+	private String[] purposeName;
+
+	/**
+	 * 拜访结果
+	 */
+	private String result;
+
+	/**
+	 * 拜访结果名称
+	 */
+	@TableField(exist = false)
+	private String resultName;
+
+	/**
+	 * 备注
+	 */
+	private String remark;
+}

+ 48 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/UserSignPurposeEnum.java

@@ -0,0 +1,48 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 打卡详情-拜访目的
+ *
+ * @author lixuesong
+ * @date 2022年01月21日 11:45
+ */
+@Getter
+@AllArgsConstructor
+public enum UserSignPurposeEnum {
+
+	// 拜访目的
+	PURPOSE0("0", "传递医药产品信息"),
+	PURPOSE1("1", "收集反馈药品临床使用情况"),
+	PURPOSE2("2", "收集反馈医院需求信息"),
+	PURPOSE3("3", "处理异议"),
+	PURPOSE4("4", "推广活动"),
+	PURPOSE5("5", "相关信息收集");
+
+	/**
+	 * 值
+	 */
+	private String val;
+
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	/**
+	 * 根据val查询
+	 *
+	 * @param val
+	 * @return
+	 */
+	public static UserSignPurposeEnum resolve(String val) {
+		for (UserSignPurposeEnum purposeEnum: UserSignPurposeEnum.values()){
+			if (purposeEnum.val.equals(val)){
+				return purposeEnum;
+			}
+		}
+		return null;
+	}
+}

+ 45 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/UserSignResultEnum.java

@@ -0,0 +1,45 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 打卡详情-拜访结果
+ *
+ * @author lixuesong
+ * @date 2022年01月21日 13:31
+ */
+@Getter
+@AllArgsConstructor
+public enum UserSignResultEnum {
+
+	// 拜访结果
+	RESULT1("0", "完成"),
+	RESULT2("1", "部分完成"),
+	RESULT3("2", "未完成");
+
+	/**
+	 * 值
+	 */
+	private String val;
+
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	/**
+	 * 根据val查询
+	 *
+	 * @param val
+	 * @return
+	 */
+	public static UserSignResultEnum resolve(String val) {
+		for (UserSignResultEnum resultEnum: UserSignResultEnum.values()){
+			if (resultEnum.val.equals(val)){
+				return resultEnum;
+			}
+		}
+		return null;
+	}
+}

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

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 部门任务类型模板Mapper
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 11:57
+ */
+@Mapper
+public interface WmDeptTaskTypeTemplateMapper extends BaseMapper<WmDeptTaskTypeTemplate> {
+}

+ 13 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmUserSignDetailMapper.java

@@ -0,0 +1,13 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.WmUserSignDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author lixuesong
+ * @date 2022年01月18日 18:19
+ */
+@Mapper
+public interface WmUserSignDetailMapper extends BaseMapper<WmUserSignDetail> {
+}

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

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeTemplate;
+
+/**
+ * 部门任务类型模板服务层
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 11:55
+ */
+public interface WmDeptTaskTypeTemplateService extends IService<WmDeptTaskTypeTemplate> {
+
+	/**
+	 * 查询企业是否配置了医院拜访的任务类型模板
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	boolean checkDeptIdHospitalTemplate(Integer deptId);
+}

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

@@ -0,0 +1,14 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.WmUserSignDetail;
+
+/**
+ * 用户签到详情服务
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 17:53
+ */
+public interface WmUserSignDetailService extends IService<WmUserSignDetail> {
+
+}

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

@@ -0,0 +1,32 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.WmDeptTaskTypeTemplate;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDeptTaskTypeTemplateMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmDeptTaskTypeTemplateService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author lixuesong
+ * @date 2022年01月18日 11:57
+ */
+@Service
+@AllArgsConstructor
+public class WmDeptTaskTypeTemplateServiceImpl extends ServiceImpl<WmDeptTaskTypeTemplateMapper, WmDeptTaskTypeTemplate> implements WmDeptTaskTypeTemplateService {
+
+	/**
+	 * 查询企业是否配置了医院拜访的任务类型模板
+	 *
+	 * @param deptId
+	 * @return
+	 */
+	@Override
+	public boolean checkDeptIdHospitalTemplate(Integer deptId) {
+		int count = this.count(Wrappers.<WmDeptTaskTypeTemplate>lambdaQuery()
+				.eq(WmDeptTaskTypeTemplate::getDeptId, deptId)
+				.eq(WmDeptTaskTypeTemplate::getTaskTypeId, "5"));
+		return count > 0;
+	}
+}

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

@@ -0,0 +1,19 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.WmUserSignDetail;
+import com.qunzhixinxi.hnqz.admin.mapper.WmUserSignDetailMapper;
+import com.qunzhixinxi.hnqz.admin.service.WmUserSignDetailService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 用户签到详情服务
+ *
+ * @author lixuesong
+ * @date 2022年01月18日 17:57
+ */
+@Service
+@AllArgsConstructor
+public class WmUserSignDetailServiceImpl extends ServiceImpl<WmUserSignDetailMapper, WmUserSignDetail> implements WmUserSignDetailService {
+}

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

@@ -58,6 +58,8 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 	private final SysRoleService sysRoleService;
 	private final WmTaskRuleService wmTaskRuleService;
 	private final SysPublicParamService sysPublicParamService;
+	private final WmDeptTaskTypeTemplateService wmDeptTaskTypeTemplateService;
+	private final WmUserSignDetailService wmUserSignDetailService;
 
 	@Override
 	public R saveWmUserSign(WmUserSign wmUserSign) {
@@ -256,6 +258,15 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 				}
 				updatePke.setIsConduct("1");
 				wmScorePackageService.updateById(updatePke);
+
+				// 如果配置了医院拜访的任务类型模板,则关联保存签到详情
+				if (wmDeptTaskTypeTemplateService.checkDeptIdHospitalTemplate(sysU.getDeptId())) {
+					WmUserSignDetail userSignDetail = wmUserSign.getUserSignDetail();
+					if (userSignDetail != null) {
+						userSignDetail.setSignId(wmUserSign.getId());
+						wmUserSignDetailService.save(userSignDetail);
+					}
+				}
 				return R.ok(wmTask);
 			}
 		}