소스 검색

feat: 小程序增加个人名片2

lixuesong 1 년 전
부모
커밋
f2c1390f01

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

@@ -6,7 +6,7 @@ import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
- * 保存个人名片DTO
+ * 个人名片DTO
  *
  * @author lixuesong
  * @date 2024/02/01

+ 86 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/vo/UserBusinessCardVO.java

@@ -0,0 +1,86 @@
+package com.qunzhixinxi.hnqz.admin.api.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 个人名片VO
+ *
+ * @author lixuesong
+ * @date 2024/02/02
+ */
+@Data
+public class UserBusinessCardVO implements Serializable {
+	private static final long serialVersionUID = -1760227396901578806L;
+
+	/**
+	 * 用户id
+	 */
+	private Integer userId;
+
+	/**
+	 * 姓名
+	 */
+	private String realname;
+
+	/**
+	 * 手机号
+	 */
+	private String username;
+
+	/**
+	 * 年龄
+	 */
+	private Integer age;
+
+	/**
+	 * 性别,1男,2女,0未知
+	 */
+	private String gender;
+
+	/**
+	 * 学历
+	 */
+	private String degree;
+
+	/**
+	 * 医药代表资质备案号
+	 */
+	private String qualificationRecordNumber;
+
+	/**
+	 * 资质证书url
+	 */
+	private String[] qualificationsUrl;
+
+	/**
+	 * 身份证号
+	 */
+	private String idCardNumber;
+
+	/**
+	 * 服务企业
+	 */
+	private String serviceDeptName;
+
+	/**
+	 * 服务时长
+	 */
+	private String serviceDuration;
+
+	/**
+	 * 完成任务量
+	 */
+	private Integer finishTaskCount;
+
+	/**
+	 * 通过任务量
+	 */
+	private Integer approvedTaskCount;
+
+	/**
+	 * 审核通过率
+	 */
+	private String approvedTaskRate;
+}

+ 56 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -42,6 +42,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.WmQuiz;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionPercentRule;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmTaskSubmissionRule;
 import com.qunzhixinxi.hnqz.admin.api.vo.PersonalScoreRecordVO;
+import com.qunzhixinxi.hnqz.admin.api.vo.UserBusinessCardVO;
 import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.api.vo.WmQuizVO;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
@@ -187,6 +188,7 @@ import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -4300,14 +4302,64 @@ public class ApiController {
 			updateUser.setIdCardNumber(resource.getIdCardNumber());
 		}
 		updateUser.setDegree(resource.getDegree());
+		updateUser.setQualificationRecordNumber(resource.getQualificationRecordNumber());
+		updateUser.setQualificationsUrl(resource.getQualificationsUrl());
 		sysUserService.updateById(updateUser);
 
 		return R.ok();
 	}
 
-	@GetMapping("/get-personal-business-card")
-	public R<?> getPersonalBusinessCard() {
-		// TODO
-		return null;
+	/**
+	 * 查询个人名片
+	 *
+	 * @param userId 用户id
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@GetMapping("/get-personal-business-card/{userId}")
+	public R<?> getPersonalBusinessCard(@PathVariable("userId") Integer userId) {
+		SysUser user = sysUserService.getById(userId);
+		SysDept dept = sysDeptService.getById(user.getDeptId());
+
+		UserBusinessCardVO cardVO = new UserBusinessCardVO();
+		// 基本信息
+		cardVO.setUserId(userId);
+		cardVO.setRealname(user.getRealname());
+		cardVO.setGender(user.getGender());
+		cardVO.setIdCardNumber(user.getIdCardNumber());
+		cardVO.setUsername(user.getUsername());
+		if (IdcardUtil.isValidCard(user.getIdCardNumber())) {
+			// 根据身份证号计算年龄
+			cardVO.setAge(IdcardUtil.getAgeByIdCard(user.getIdCardNumber()));
+		}
+		cardVO.setDegree(user.getDegree());
+
+		// 平台经历
+		cardVO.setServiceDeptName(dept.getName());
+		// 服务时长 = 当前时间 - 用户创建时间
+		long monthDifference = ChronoUnit.MONTHS.between(user.getCreateTime(), LocalDateTime.now());
+		cardVO.setServiceDuration(String.format("%s个月", monthDifference));
+		// 完成任务量
+		int finishTaskCount = wmTaskService.count(Wrappers.<WmTask>lambdaQuery()
+				.eq(WmTask::getTaskUserId, userId)
+				.eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTask::getRealFlag, "0")
+				.ne(WmTask::getTaskStatus, TaskStatusEnum.INIT.val())
+				.gt(WmTask::getScore, 0));
+		// 审核通过任务量
+		int approvedTaskCount = wmTaskService.count(Wrappers.<WmTask>lambdaQuery()
+				.eq(WmTask::getTaskUserId, userId)
+				.eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
+				.eq(WmTask::getRealFlag, "0")
+				.eq(WmTask::getTaskStatus, TaskStatusEnum.APPROVED.val())
+				.gt(WmTask::getScore, 0));
+		cardVO.setFinishTaskCount(finishTaskCount);
+		cardVO.setApprovedTaskCount(approvedTaskCount);
+		cardVO.setApprovedTaskRate(String.format("%.0f%%", approvedTaskCount * 100.00 / finishTaskCount));
+
+		// 专业技能
+		cardVO.setQualificationRecordNumber(user.getQualificationRecordNumber());
+		cardVO.setQualificationsUrl(user.getQualificationsUrl());
+
+		return R.ok(cardVO);
 	}
 }