CaseAnalysisService.java 4.98 KB
package com.ash.service;

import com.ash.base.AshErrorCode;
import com.ash.base.AshException;
import com.ash.entity.Case;
import com.ash.entity.CaseAnalysis;
import com.ash.entity.dao.CaseAnalysisMapper;
import com.ash.enums.ConformStatusEnum;
import com.ash.enums.ReviewStatusEnum;
import com.ash.util.UUIDGenerator;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Slf4j
@Service
public class CaseAnalysisService {

    @Resource
    private CaseAnalysisMapper caseAnalysisMapper;

    @Resource
    private CaseService caseService;

    public static Map<String, String> codeAreaMap = new HashMap<>();

    static {
        codeAreaMap.put("A3401", "合肥");
        codeAreaMap.put("A3402", "芜湖");
        codeAreaMap.put("A3403", "蚌埠");
        codeAreaMap.put("A3404", "淮南");
        codeAreaMap.put("A3405", "马鞍山");
        codeAreaMap.put("A3406", "淮北");
        codeAreaMap.put("A3407", "铜陵");
        codeAreaMap.put("A3408", "安庆");
        codeAreaMap.put("A3410", "黄山");
        codeAreaMap.put("A3411", "滁州");
        codeAreaMap.put("A3412", "阜阳");
        codeAreaMap.put("A3413", "宿州");
        codeAreaMap.put("A3415", "六安");
        codeAreaMap.put("A3416", "亳州");
        codeAreaMap.put("A3417", "池州");
        codeAreaMap.put("A3418", "宣城");
    }

    public Boolean save(CaseAnalysis data) {
        String uuid = UUIDGenerator.uuid();
        data.setId(uuid);
        if (data.getConformStatus() == null) {
            data.setConformStatus(ConformStatusEnum.UNCONFIRMED);
        }

        if (StringUtils.isBlank(data.getCaseId())) {
            throw new AshException(AshErrorCode.ILLEGAL_PARAM, "caseId is empty!");
        }

        Case caseInfo = caseService.load(data.getCaseId());
        setArea(caseInfo.getCode(), data);

        int insert = caseAnalysisMapper.insert(data);
        return insert > 0;
    }

    public CaseAnalysis load(String id) {
        return caseAnalysisMapper.selectById(id);
    }

    public void update(CaseAnalysis data) {
        String id = data.getId();
        if (StringUtils.isBlank(id)) {
            throw new AshException(AshErrorCode.ILLEGAL_PARAM, "id is empty!");
        }
        CaseAnalysis oldData = caseAnalysisMapper.selectById(id);
        if (oldData == null) {
            throw new AshException(AshErrorCode.DATA_NOT_EXIST);
        }

        Case caseInfo = caseService.load(data.getCaseId());
        if (caseInfo == null) {
            throw new AshException(AshErrorCode.DATA_NOT_EXIST, "can't find case!,id:" + data.getCaseId());
        }
        setArea(null, data);
        caseInfo.setArea(data.getArea());
        caseService.update(caseInfo);

        caseAnalysisMapper.updateById(data);
    }

    private void setArea(String caseCode, CaseAnalysis data) {
        if (data != null && StringUtils.isNotBlank(caseCode) && caseCode.length() >= 4) {
            String area = codeAreaMap.get(caseCode.substring(0, 5));
            if (StringUtils.isNotBlank(area)) {
                data.setArea(area);
            } else {
                data.setArea("未知");
            }
        }
    }

    public Map<String, CaseAnalysis> listByCaseId(List<String> caseIds) {
        QueryWrapper<CaseAnalysis> queryWrapper = new QueryWrapper<>();
        LambdaQueryWrapper<CaseAnalysis> lambda = queryWrapper.lambda();
        lambda.in(CaseAnalysis::getCaseId, caseIds);
        List<CaseAnalysis> warningInstanceAnalyses = caseAnalysisMapper.selectList(queryWrapper);
        if (CollectionUtils.isNotEmpty(warningInstanceAnalyses)) {
            return warningInstanceAnalyses.stream()
                    .collect(Collectors.toMap(CaseAnalysis::getCaseId, Function.identity()));
        }
        return new HashMap<>();
    }

    @Transactional
    public Boolean conform(CaseAnalysis data) {
        Boolean result = true;
        data.setConformStatus(ConformStatusEnum.CONFIRMED);
        update(data);
        Case caseInfo = caseService.load(data.getCaseId());
        caseInfo.setReviewStatus(ReviewStatusEnum.AUDITED);
        caseService.update(caseInfo);
        return result;
    }


    @Transactional
    public Boolean cancelConform(CaseAnalysis data) {
        Boolean result = true;
        CaseAnalysis wa = load(data.getId());
        wa.setConformStatus(ConformStatusEnum.UNCONFIRMED);
        update(wa);
        Case caseInfo = caseService.load(wa.getCaseId());
        caseInfo.setReviewStatus(ReviewStatusEnum.UNAUDITED);
        caseService.update(caseInfo);
        return result;
    }
}