|
@@ -17,6 +17,7 @@
|
|
|
package com.qunzhixinxi.hnqz.admin.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
@@ -36,6 +37,7 @@ 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.SysUser;
|
|
|
+import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.MonitoringIndicator;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
|
|
@@ -77,6 +79,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmScoreTaskTypeService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
|
|
|
import com.qunzhixinxi.hnqz.admin.util.RegUtils;
|
|
|
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
|
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
|
import com.qunzhixinxi.hnqz.common.data.datascope.DataScope;
|
|
|
import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
|
|
@@ -85,13 +88,22 @@ import com.qunzhixinxi.hnqz.common.taxhelper.enums.InvoiceInfo;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.io.IOUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
+import java.lang.reflect.Field;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.net.URI;
|
|
|
+import java.net.URISyntaxException;
|
|
|
+import java.security.MessageDigest;
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
import java.sql.Timestamp;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDate;
|
|
@@ -136,6 +148,8 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
private WmDaHospitalService wmDaHospitalService;
|
|
|
private WmDaPharmacyService wmDaPharmacyService;
|
|
|
private WmDaDistributionService wmDaDistributionService;
|
|
|
+ private final RedisTemplate redisTemplate;
|
|
|
+ private final UpmsConfig upmsConfig;
|
|
|
|
|
|
@Autowired
|
|
|
public void setWmDaHospitalService(WmDaHospitalService wmDaHospitalService) {
|
|
@@ -2485,4 +2499,216 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
public Long countMeetingTask(List<String> taskTypeList, String taskUserId, LocalDateTime startTime, LocalDateTime endTime) {
|
|
|
return wmTaskMapper.countMeetingTask(taskTypeList, taskUserId, startTime, endTime);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 个人承接积分值-任务复审
|
|
|
+ *
|
|
|
+ * @param id 任务id
|
|
|
+ * @param taskStatus 审核状态(3-通过,4-不通过)
|
|
|
+ * @param taskStatusInfo 审批说明
|
|
|
+ * @return 复审结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean reviewTask(String id, String taskStatus, String taskStatusInfo) {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ boolean approved = TaskStatusEnum.APPROVED.val().equals(taskStatus);
|
|
|
+ // 查询这条任务
|
|
|
+ WmTask queryTask = this.getById(id);
|
|
|
+ if (queryTask == null) {
|
|
|
+ throw new RuntimeException("任务不存在");
|
|
|
+ }
|
|
|
+ if (queryTask.getReviewTaskCount() > 0) {
|
|
|
+ throw new RuntimeException("不能重复审核");
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP1:更新task状态
|
|
|
+ String realFlag = approved ? CommonConstants.STATUS_NORMAL : CommonConstants.STATUS_DEL;
|
|
|
+ LambdaUpdateWrapper<WmTask> taskUpdateWrapper = Wrappers.<WmTask>lambdaUpdate()
|
|
|
+ .eq(WmTask::getId, id)
|
|
|
+ .eq(WmTask::getUpdateTime, queryTask.getUpdateTime())
|
|
|
+ .set(WmTask::getTaskStatus, taskStatus)
|
|
|
+ .set(WmTask::getRealFlag, realFlag)
|
|
|
+ .set(WmTask::getTaskStatusInfo, taskStatusInfo)
|
|
|
+ .set(WmTask::getReviewTaskCount, 1)
|
|
|
+ .set(WmTask::getUpdateTime, now);
|
|
|
+ log.info("task更新参数:条件id={},updateTime={},更新项taskStatus={},realFlag={},taskStatusInfo={},updateTime={}",
|
|
|
+ id, queryTask.getUpdateTime(), taskStatus, realFlag, taskStatusInfo, now);
|
|
|
+ boolean taskUpdate = this.update(taskUpdateWrapper);
|
|
|
+ if (!taskUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询积分包
|
|
|
+ String scorePackageId = queryTask.getScorePackageId();
|
|
|
+ WmScorePackage wmScorePackage = wmScorePackageMapper.selectById(scorePackageId);
|
|
|
+ // 查询积分包下审核通过和审核中的任务
|
|
|
+ List<WmTask> wmTaskList = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getScorePackageId, scorePackageId)
|
|
|
+ .ne(WmTask::getTaskStatus, TaskStatusEnum.FAIL_APPROVED.val())
|
|
|
+ .eq(WmTask::getRealFlag, "0"));
|
|
|
+ int totalCount = wmTaskList.stream().map(WmTask::getScore).reduce(0, Integer::sum);
|
|
|
+ // 标记任务总积分 是否超过积分包的值
|
|
|
+ boolean taskAddFlag = totalCount >= wmScorePackage.getScore();
|
|
|
+ String taskAddFlagStr = taskAddFlag ? "0" : "1";
|
|
|
+ // 查询领包记录
|
|
|
+ List<WmScorePackageStatus> packageStatusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
|
+ .eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val())
|
|
|
+ .eq(WmScorePackageStatus::getPackageId, wmScorePackage.getId()));
|
|
|
+ if (CollUtil.isNotEmpty(packageStatusList)) {
|
|
|
+ // STEP2:修改领包记录状态
|
|
|
+ packageStatusList.forEach(packageStatus -> {
|
|
|
+ LambdaUpdateWrapper<WmScorePackageStatus> updateWrapper = Wrappers.<WmScorePackageStatus>lambdaUpdate()
|
|
|
+ .eq(WmScorePackageStatus::getId, packageStatus.getId())
|
|
|
+ .eq(WmScorePackageStatus::getUpdateTime, packageStatus.getUpdateTime())
|
|
|
+ .set(WmScorePackageStatus::getTaskAddFlag, taskAddFlagStr)
|
|
|
+ .set(WmScorePackageStatus::getUpdateTime, now);
|
|
|
+ log.info("pacakgeStatus更新参数:条件id={},updateTime={},更新项taskAddFlag={},updateTime={}",
|
|
|
+ packageStatus.getId(), packageStatus.getUpdateTime(), taskAddFlagStr, now);
|
|
|
+ boolean pacakgeStatusUpdate = wmScorePackageStatusService.update(updateWrapper);
|
|
|
+ if (!pacakgeStatusUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP3:修改积分包状态
|
|
|
+ String packageFinishStatus = totalCount >= wmScorePackage.getScore() ?
|
|
|
+ PackageFinishStatusEnum.NOT_COMPLETE.val() : PackageFinishStatusEnum.COMPLETED.val();
|
|
|
+ LambdaUpdateWrapper<WmScorePackage> scorePackageUpdateWrapper = Wrappers.<WmScorePackage>lambdaUpdate()
|
|
|
+ .eq(WmScorePackage::getId, scorePackageId)
|
|
|
+ .eq(WmScorePackage::getUpdateTime, wmScorePackage.getUpdateTime())
|
|
|
+ // 积分包完成状态
|
|
|
+ .set(WmScorePackage::getPackageFinishStatus, packageFinishStatus)
|
|
|
+ // 是否可以做任务:已完成不可以做任务
|
|
|
+ .set(WmScorePackage::getTaskAddFlag, taskAddFlagStr);
|
|
|
+ if (!taskAddFlag) {
|
|
|
+ // 积分包完成时间
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getPackageFinishTime, now);
|
|
|
+ // 积分包状态:有关联积分包,则设置为‘已完成待审批’;没有关联积分包,则直接设置为‘已完成待结算’
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getScorePackageStatus, StringUtils.isNotBlank(wmScorePackage.getRelationScoreId()) ?
|
|
|
+ ScorePackageStatusEnum.TO_BE_APPROVAL.val() : ScorePackageStatusEnum.TO_BE_SETTLED.val());
|
|
|
+ } else {
|
|
|
+ scorePackageUpdateWrapper.set(WmScorePackage::getScorePackageStatus, ScorePackageStatusEnum.IN_PROGRESS.val());
|
|
|
+ }
|
|
|
+ log.info("scorePackage更新参数:条件id={},updateTime={},更新项packageFinishStatus={},taskAddFlag={}",
|
|
|
+ scorePackageId, wmScorePackage.getUpdateTime(), packageFinishStatus, taskAddFlagStr);
|
|
|
+ boolean packageUpdate = wmScorePackageService.update(scorePackageUpdateWrapper);
|
|
|
+ if (!packageUpdate) {
|
|
|
+ throw new RuntimeException("操作失败,请重试");
|
|
|
+ }
|
|
|
+
|
|
|
+ // STEP4: 如果是源头积分包,则判断是否审核入库调查信息
|
|
|
+ if (StringUtils.isBlank(wmScorePackage.getRelationScoreId())) {
|
|
|
+ this.task15_30_16_18(queryTask, taskStatus, taskStatusInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 移除图片缓存
|
|
|
+ this.removePicCache(queryTask);
|
|
|
+
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新调查信息数据
|
|
|
+ *
|
|
|
+ * @param task 任务信息
|
|
|
+ * @param taskStatus 审核状态
|
|
|
+ * @param taskStatusInfo 审批说明
|
|
|
+ */
|
|
|
+ private void task15_30_16_18(WmTask task, String taskStatus, String taskStatusInfo) {
|
|
|
+ if (!StrUtil.equals(taskStatus, TaskStatusEnum.FAIL_APPROVED.val())) {
|
|
|
+ // 复审不通过,则回退调查信息数据 TODO
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 调查信息审核(15、30-医院 16-商业公司 18-药店)
|
|
|
+ String approvalOpinion = taskStatus.equals(TaskStatusEnum.APPROVED.val()) ? "1" : "2";
|
|
|
+ if ("15".equals(task.getTaskTypeId()) || "30".equals(task.getTaskTypeId())) {
|
|
|
+ Map<String, Object> data = (Map<String, Object>) wmDaHospitalService.approvalHospital(task.getId()).getData();
|
|
|
+ WmTask _wmTask = (WmTask) data.get("wmTask");
|
|
|
+ Map<String, String> paramMap = BeanUtil.toBean(data.get("newinfo"), Map.class);
|
|
|
+ paramMap.put("approvalInfo", taskStatusInfo);
|
|
|
+ paramMap.put("approvalOpinion", approvalOpinion);
|
|
|
+ paramMap.put("compareResult", _wmTask.getCompareResult());
|
|
|
+ paramMap.put("taskId", task.getId());
|
|
|
+ wmDaHospitalService.updateByApproval(paramMap);
|
|
|
+ } else if ("16".equals(task.getTaskTypeId())) {
|
|
|
+ Map<String, Object> data = (Map<String, Object>) wmDaDistributionService.approvalDistribution(task.getId()).getData();
|
|
|
+ WmTask _wmTask = (WmTask) data.get("wmTask");
|
|
|
+ Map<String, String> paramMap = BeanUtil.toBean(data.get("newinfo"), Map.class);
|
|
|
+ paramMap.put("approvalInfo", taskStatusInfo);
|
|
|
+ paramMap.put("approvalOpinion", approvalOpinion);
|
|
|
+ paramMap.put("compareResult", _wmTask.getCompareResult());
|
|
|
+ paramMap.put("taskId", task.getId());
|
|
|
+ wmDaDistributionService.updateByApproval(paramMap);
|
|
|
+ } else if ("18".equals(task.getTaskTypeId())) {
|
|
|
+ Map<String, Object> data = (Map<String, Object>) wmDaPharmacyService.approvalPharmacy(task.getId()).getData();
|
|
|
+ WmTask _wmTask = (WmTask) data.get("_wmTask");
|
|
|
+ WmDaPharmacy info = (WmDaPharmacy) data.get("info");
|
|
|
+ Map<String, String> paramMap = MapUtil.newHashMap(4);
|
|
|
+ paramMap.put("infoId", info.getId());
|
|
|
+ paramMap.put("approvalInfo", taskStatusInfo);
|
|
|
+ paramMap.put("approvalOpinion", approvalOpinion);
|
|
|
+ paramMap.put("compareResult", _wmTask.getCompareResult());
|
|
|
+ paramMap.put("taskId", task.getId());
|
|
|
+ wmDaPharmacyService.updateByapproval(paramMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 移除图片缓存
|
|
|
+ *
|
|
|
+ * @param t 任务对象
|
|
|
+ */
|
|
|
+ private void removePicCache(WmTask t) {
|
|
|
+ String userId = t.getTaskUserId();
|
|
|
+
|
|
|
+ WmTaskContent content = wmTaskContentMapper.selectById(t.getTaskContentId());
|
|
|
+
|
|
|
+ if (content == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Field[] fields = content.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fields) {
|
|
|
+
|
|
|
+ field.setAccessible(true);
|
|
|
+
|
|
|
+ try {
|
|
|
+ String fieldVal = (String) field.get(content);
|
|
|
+
|
|
|
+ if (fieldVal.startsWith("/admin/sys-file/wmkj")) {
|
|
|
+
|
|
|
+ List<String> split = StrUtil.split(fieldVal, StrUtil.COMMA);
|
|
|
+
|
|
|
+ List<String> IMG_EXT_NAME = Arrays.asList("png", "jpg", "gif", "jpeg", "tif", "bmp");
|
|
|
+
|
|
|
+ split.forEach(item -> {
|
|
|
+ List<String> temp = StrUtil.split(item, StrUtil.DOT);
|
|
|
+ String extName = temp.get(temp.size() - 1);
|
|
|
+
|
|
|
+ if (IMG_EXT_NAME.contains(extName.toLowerCase())) {
|
|
|
+ // 文件md5
|
|
|
+ try {
|
|
|
+ log.info("图片地址:{}", upmsConfig.getClientUrl() + item);
|
|
|
+ byte[] bytes = IOUtils.toByteArray(new URI(upmsConfig.getClientUrl() + item));
|
|
|
+ MessageDigest md5 = MessageDigest.getInstance("MD5");
|
|
|
+ byte[] digest = md5.digest(bytes);
|
|
|
+ String hash = new BigInteger(1, digest).toString(16);
|
|
|
+ log.info("图片md5:{}", hash);
|
|
|
+ String key = String.format("%s:%s", userId, hash);
|
|
|
+ log.info("key:{}", key);
|
|
|
+ redisTemplate.delete(key);
|
|
|
+ } catch (IOException | URISyntaxException | NoSuchAlgorithmException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ log.error("", ignored);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|