zhaowenxuan
7 天以前 0892d843cd394f383ff50f480f7f22f2ec3829bc
ltkj-admin/src/main/java/com/ltkj/web/controller/lis/LisApiMethod.java
@@ -1,10 +1,359 @@
package com.ltkj.web.controller.lis;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ltkj.common.core.domain.AjaxResult;
import com.ltkj.common.utils.AgeResult;
import com.ltkj.common.utils.DateUtils;
import com.ltkj.hosp.idutil.IdUtils;
import com.ltkj.hosp.domain.*;
import com.ltkj.hosp.hisDto.OutpintestapplyDetailsDto;
import com.ltkj.hosp.lisDto.LisSaveSqdxxDto;
import com.ltkj.hosp.lisDto.LisSaveSqdxxJyxmlistDto;
import com.ltkj.hosp.mapper.TbTransitionMapper;
import com.ltkj.hosp.service.*;
import com.ltkj.system.service.ISysConfigService;
import com.ltkj.system.service.ISysDeptService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Component
@Slf4j
public class LisApiMethod {
    @Autowired
    private LisApiMethodService lisApiMethodService;
    @Autowired
    private ISysDeptService deptService;
    @Autowired
    private ITjProjectService projectService;
    @Autowired
    private LtkjJfzhglmxjfxmzdService ltkjJfzhglmxjfxmzdService;
    @Autowired
    private LtkjMxjfxmzdService ltkjMxjfxmzdService;
    @Autowired
    private LtkjEjjfxmzdService ltkjEjjfxmzdService;
    @Autowired
    private LtkjJianchajianyanTreeService ltkjJianchajianyanTreeService;
    @Autowired
    private LtkjJfzhgljyxmzdService ltkjJfzhgljyxmzdService;
    @Autowired
    private LtkjJyxmzdService ltkjJyxmzdService;
    @Autowired
    private LtkjJfxmgljyxmzdService ltkjJfxmgljyxmzdService;
    @Autowired
    private LtkjJyxmzdService jyxmzdService;
    @Autowired
    private IdUtils idUtils;
    @Autowired
    private ISysConfigService configService;
    @Autowired
    private ITjOrderService orderService;
    @Autowired
    private ITjCustomerService customerService;
    @Autowired
    private TbTransitionMapper tbTransitionMapper;
    @Autowired
    private ITjSamplingService tjSamplingService;
    public Boolean save(TjSampling sampling,TjOrder tjOrder,TjCustomer tjCustomer){
        String dept = configService.selectConfigByKey("request_default_dept");
        String ysbm = configService.selectConfigByKey("request_default_ysbm");
        AtomicInteger xh = new AtomicInteger();
        LisSaveSqdxxDto lisSaveSqdxxDto = new LisSaveSqdxxDto();
//        String jyxh = idUtils.generateLisID();
        lisSaveSqdxxDto.setJyxh(sampling.getJyxh());
        lisSaveSqdxxDto.setBah(tjOrder.getCardId());
        lisSaveSqdxxDto.setBrxm(tjCustomer.getCusName());
        lisSaveSqdxxDto.setBrdm(PinyinUtil.getFirstLetter(tjCustomer.getCusName(), ""));
        lisSaveSqdxxDto.setXb(tjCustomer.getCusSex() == 1 ? "2" : "1");
        lisSaveSqdxxDto.setCsrq(DateFormatUtils.format(tjCustomer.getCusBrithday(), "yyyy-MM-dd"));
        AgeResult ageResult = DateUtils.calculateAge(tjCustomer.getCusBrithday());
        lisSaveSqdxxDto.setNl(String.valueOf(ageResult.getAge()));
        lisSaveSqdxxDto.setNldw(String.valueOf(ageResult.getUnit()));
        lisSaveSqdxxDto.setSfzh(tjCustomer.getCusIdcard());
        lisSaveSqdxxDto.setLxdh(tjCustomer.getCusPhone());
        lisSaveSqdxxDto.setJtzz("");
        Date date = new Date();
        lisSaveSqdxxDto.setSqrq(DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));
        lisSaveSqdxxDto.setCyrq("");
        lisSaveSqdxxDto.setLczd("");
        lisSaveSqdxxDto.setBz("");
        lisSaveSqdxxDto.setKsbm(dept);
        lisSaveSqdxxDto.setSqys(ysbm);
        lisSaveSqdxxDto.setKfbz("1");
        List<OutpintestapplyDetailsDto> detailsDtos = new ArrayList<>();
        ArrayList<LisSaveSqdxxJyxmlistDto> dtos = new ArrayList<>();
        BigDecimal allPrice;
        if (sampling.getProId().contains(",")){
            allPrice = tbTransitionMapper.getLisPriceByTjNumAndInParentProId(tjOrder.getTjNumber(), Arrays.asList(sampling.getProId().split(",")));
        }else {
            allPrice = tbTransitionMapper.getLisPriceByTjNumAndParentProId(tjOrder.getTjNumber(), sampling.getProId());
        }
        lisSaveSqdxxDto.setFyje(allPrice.toString());
//        lisSaveSqdxxDto.setYbbm(sampling.getSpecimenTypeCode());
        lisSaveSqdxxDto.setYbbm(sampling.getYb());
        if (sampling.getIsMerge() == 1){
            LambdaQueryWrapper<TjSampling> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(TjSampling::getParentId, sampling.getId());
            List<TjSampling> list = tjSamplingService.list(wrapper);
            for (TjSampling tjSampling : list) {
                TjProject project = projectService.getById(tjSampling.getProId());
                if (StrUtil.isBlank(tjSampling.getJyxmdm())){
                    LambdaQueryWrapper<TjProject> wrapper1 = new LambdaQueryWrapper<>();
                    wrapper1.eq(TjProject::getProParentId,project.getProId());
                    List<TjProject> projects = projectService.list(wrapper1);
                    for (TjProject tjProject : projects) {
                        LisSaveSqdxxJyxmlistDto dto = new LisSaveSqdxxJyxmlistDto();
                        dto.setXh(String.valueOf(xh.getAndIncrement() + 1));
                        dto.setJyxm(tjProject.getLisXmbm());
                        dto.setXmmc(tjProject.getProName());
                        dtos.add(dto);
                    }
                }else {
                    LisSaveSqdxxJyxmlistDto dto = new LisSaveSqdxxJyxmlistDto();
                    dto.setXh(String.valueOf(xh.getAndIncrement() + 1));
                    dto.setJyxm(tjSampling.getJyxmdm());
                    dto.setXmmc(tjSampling.getProName());
                    dtos.add(dto);
                }
                OutpintestapplyDetailsDto detailsDto = new OutpintestapplyDetailsDto();
                detailsDto.setMxfyxmbm(project.getHisXmbm());
                if (project.getSfzhfy().equals("Y")) {
                    detailsDto.setSfzhfy("1");
                } else {
                    detailsDto.setSfzhfy("0");
                }
                detailsDto.setSl(project.getSl());
                detailsDto.setProjg(project.getProPrice());
                detailsDtos.add(detailsDto);
            }
        }else {
            TjProject project = projectService.getById(sampling.getProId());
            if (StrUtil.isBlank(sampling.getJyxmdm())){
                LambdaQueryWrapper<TjProject> wrapper1 = new LambdaQueryWrapper<>();
                wrapper1.eq(TjProject::getProParentId,project.getProId());
                List<TjProject> projects = projectService.list(wrapper1);
                for (TjProject tjProject : projects) {
                    LisSaveSqdxxJyxmlistDto dto = new LisSaveSqdxxJyxmlistDto();
                    dto.setXh(String.valueOf(xh.getAndIncrement() + 1));
                    dto.setJyxm(tjProject.getLisXmbm());
                    dto.setXmmc(tjProject.getProName());
                    dtos.add(dto);
                }
            }else {
                LisSaveSqdxxJyxmlistDto dto = new LisSaveSqdxxJyxmlistDto();
                dto.setXh(String.valueOf(xh.getAndIncrement() + 1));
                dto.setJyxm(sampling.getJyxmdm());
                dto.setXmmc(sampling.getProName());
                dtos.add(dto);
            }
            OutpintestapplyDetailsDto detailsDto = new OutpintestapplyDetailsDto();
            detailsDto.setMxfyxmbm(project.getHisXmbm());
            if (project.getSfzhfy().equals("Y")) {
                detailsDto.setSfzhfy("1");
            } else {
                detailsDto.setSfzhfy("0");
            }
            detailsDto.setSl(project.getSl());
            detailsDto.setProjg(project.getProPrice());
            detailsDtos.add(detailsDto);
        }
        lisSaveSqdxxDto.setJyxmlist(dtos);
        log.info("检验申请参数 ->{}", JSONUtil.toJsonStr(lisSaveSqdxxDto));
//        if (true)
//            return true;
        AjaxResult ajaxResult = lisApiMethodService.saveSqdxx(lisSaveSqdxxDto);
        // Lis请求返回 ->{"msg":"操作失败","code":500,"result":{"Response":{"ResultContent":"成功","ResultData":null,"ResultCode":"1"}}}
        // {"msg":"操作成功","code":200,"data":{"ResultContent":"成功","ResultData":null,"ResultCode":"1"}}
        log.info("Lis请求返回 ->{}", JSONUtil.toJsonStr(ajaxResult));
        String result = ajaxResult.get("data").toString();
        JSONObject object = JSONUtil.parseObj(result);
        String code = object.getStr("ResultCode");
        if (code.equals("1")) {
            for (OutpintestapplyDetailsDto detail : detailsDtos) {
                LtkjJianchajianyanTree tree = new LtkjJianchajianyanTree();
                tree.setCardId(tjOrder.getCardId());
                tree.setPationid(tjCustomer.getPationId());
                tree.setSqdh(sampling.getJyxh());
                tree.setFyhj(allPrice.toString());
                String mxfyxmbm = detail.getMxfyxmbm();
                tree.setHisXmdm(mxfyxmbm);
                tree.setType("检验");
                tree.setService("lis");
                tree.setTjPrice(String.valueOf(detail.getProjg()));
                LambdaQueryWrapper<LtkjJfzhglmxjfxmzd> wrapper1 = new LambdaQueryWrapper<>();
                if (detail.getSfzhfy().equals("1"))
                    wrapper1.eq(LtkjJfzhglmxjfxmzd::getZhxmdm, mxfyxmbm);
                else wrapper1.eq(LtkjJfzhglmxjfxmzd::getXmdm, mxfyxmbm);
                List<LtkjJfzhglmxjfxmzd> ltkjJfzhglmxjfxmzds = ltkjJfzhglmxjfxmzdService.list(wrapper1);
                if (ltkjJfzhglmxjfxmzds != null && !ltkjJfzhglmxjfxmzds.isEmpty()) {
                    String xmdm = ltkjJfzhglmxjfxmzds.get(0).getXmdm();
                    LambdaQueryWrapper<LtkjMxjfxmzd> wrapper3 = new LambdaQueryWrapper<>();
                    wrapper3.eq(LtkjMxjfxmzd::getXmdm, xmdm);
                    LtkjMxjfxmzd mxjfxmzd = ltkjMxjfxmzdService.getOne(wrapper3);
                    LambdaQueryWrapper<LtkjEjjfxmzd> wrapper4 = new LambdaQueryWrapper<>();
                    wrapper4.eq(LtkjEjjfxmzd::getEjkmdm, mxjfxmzd.getEjkmdm());
                    LtkjEjjfxmzd ejjfxmzd = ltkjEjjfxmzdService.getOne(wrapper4);
                    tree.setXmfl(ejjfxmzd.getYjkmdm());
                }
                tree.setCreateTime(DateUtil.date());
                tree.setJxbz(sampling.getJxbz());
                ltkjJianchajianyanTreeService.save(tree);
            }
            return true;
        } else {
            log.error("请求失败 ->{}", lisSaveSqdxxDto);
            return false;
        }
    }
    public Boolean save(Map<String, List<TjProject>> listMap,TjOrder tjOrder,TjCustomer tjCustomer){
        boolean flag = true;
        for (Map.Entry<String, List<TjProject>> entry : listMap.entrySet()) {
            String jyxh = idUtils.generateLisID(configService.selectConfigByKey("make_lis_tmh_prefix"));
            String dept = configService.selectConfigByKey("request_default_dept");
            String ysbm = configService.selectConfigByKey("request_default_ysbm");
            AtomicInteger xh = new AtomicInteger();
            LisSaveSqdxxDto lisSaveSqdxxDto = new LisSaveSqdxxDto();
            lisSaveSqdxxDto.setJyxh(jyxh);
            lisSaveSqdxxDto.setBah(tjOrder.getCardId());
            lisSaveSqdxxDto.setBrxm(tjCustomer.getCusName());
            lisSaveSqdxxDto.setBrdm(PinyinUtil.getFirstLetter(tjCustomer.getCusName(), ""));
            lisSaveSqdxxDto.setXb(tjCustomer.getCusSex() == 1 ? "2" : "1");
            lisSaveSqdxxDto.setCsrq(DateFormatUtils.format(tjCustomer.getCusBrithday(), "yyyy-MM-dd"));
            AgeResult ageResult = DateUtils.calculateAge(tjCustomer.getCusBrithday());
            lisSaveSqdxxDto.setNl(String.valueOf(ageResult.getAge()));
            lisSaveSqdxxDto.setNldw(String.valueOf(ageResult.getUnit()));
            lisSaveSqdxxDto.setSfzh(tjCustomer.getCusIdcard());
            lisSaveSqdxxDto.setLxdh(tjCustomer.getCusPhone());
            lisSaveSqdxxDto.setJtzz("");
            Date date = new Date();
            lisSaveSqdxxDto.setSqrq(DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));
            lisSaveSqdxxDto.setCyrq("");
            lisSaveSqdxxDto.setLczd("");
            lisSaveSqdxxDto.setBz("");
            lisSaveSqdxxDto.setKsbm(dept);
            lisSaveSqdxxDto.setSqys(ysbm);
            lisSaveSqdxxDto.setKfbz("1");
            List<OutpintestapplyDetailsDto> detailsDtos = new ArrayList<>();
            ArrayList<LisSaveSqdxxJyxmlistDto> dtos = new ArrayList<>();
            BigDecimal allPrice = tbTransitionMapper.getLisPriceByTjNumAndInProId(tjOrder.getTjNumber(), entry.getValue().stream().map(TjProject::getProId).collect(Collectors.toList()));
            lisSaveSqdxxDto.setFyje(allPrice.toString());
//            lisSaveSqdxxDto.setYbbm(entry.getKey());
            String s = entry.getKey();
            lisSaveSqdxxDto.setYbbm(s.substring(s.indexOf("_") + 1));
            for (TjProject tjProject : entry.getValue()) {
                LisSaveSqdxxJyxmlistDto dto = new LisSaveSqdxxJyxmlistDto();
                dto.setXh(String.valueOf(xh.getAndIncrement() + 1));
                dto.setJyxm(tjProject.getLisXmbm());
                dto.setXmmc(tjProject.getProName());
                dtos.add(dto);
            }
            lisSaveSqdxxDto.setJyxmlist(dtos);
            log.info("检验申请参数 ->{}", JSONUtil.toJsonStr(lisSaveSqdxxDto));
            AjaxResult ajaxResult = lisApiMethodService.saveSqdxx(lisSaveSqdxxDto);
            log.info("Lis请求返回 ->{}", JSONUtil.toJsonStr(ajaxResult));
            String result = ajaxResult.get("data").toString();
            JSONObject object = JSONUtil.parseObj(result);
            String code = object.getStr("ResultCode");
            if (!code.equals("1")) {
                log.error("请求失败 ->{}", lisSaveSqdxxDto);
                flag = false;
                break;
            }
        }
        return flag;
    }
    /**
     * 获取检验结果
     * @param cardId
     * @return
     */
    public AjaxResult getJyJg(String cardId){
        return lisApiMethodService.getJyjg(cardId);
    }
    /**
     * 作废申请单
     * @param jyxh
     * @param cardId
     * @param cusName
     * @return
     */
    public AjaxResult cancel(String jyxh,String cardId,String cusName){
        return lisApiMethodService.updateSqdxx(cardId,jyxh,cusName);
    }
    public LtkjJyxmzd getJyxmzd(TjProject project) {
        String jyxmdm = "";
        if (project.getSfzhfy().equals("Y")){
            LambdaQueryWrapper<LtkjJfzhgljyxmzd> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(LtkjJfzhgljyxmzd::getZhxmdm, project.getHisXmbm());
            LtkjJfzhgljyxmzd jfzhgljyxmzd = ltkjJfzhgljyxmzdService.getOne(wrapper);
            if (jfzhgljyxmzd != null) jyxmdm = jfzhgljyxmzd.getJyxmdm();
        } else {
            LambdaQueryWrapper<LtkjJfxmgljyxmzd> wrapper1 = new LambdaQueryWrapper<>();
            wrapper1.eq(LtkjJfxmgljyxmzd::getXmdm, project.getHisXmbm());
            LtkjJfxmgljyxmzd jfxmgljyxmzd = ltkjJfxmgljyxmzdService.getOne(wrapper1);
            if (jfxmgljyxmzd != null) jyxmdm = jfxmgljyxmzd.getJyxmdm();
        }
        LambdaQueryWrapper<LtkjJyxmzd> wrapper2 = new LambdaQueryWrapper<>();
        wrapper2.eq(LtkjJyxmzd::getJyxmdm,jyxmdm);
        LtkjJyxmzd jyxmzd = jyxmzdService.getOne(wrapper2);
        if (jyxmzd != null) return jyxmzd;
        return null;
    }
    /**
     * 根据体检类型判断是否需要直接从Lis、pacs直接申请
     */
    public Boolean isUseLisAndPacsRegister(TjOrder tjOrder) {
        try {
            String useLisAndPacsRegisterDictTeam = configService.selectConfigByKey("use_lis_and_pacs_register_dict_team");
            log.info("根据体检类型判断是否需要直接从Lis、pacs直接申请 :"+tjOrder.getTjType()+"_"+useLisAndPacsRegisterDictTeam);
            String[] split = useLisAndPacsRegisterDictTeam.split(",|,|。|:|:");
            List<String> list = Arrays.asList(split);
            log.info("参数配置里面的值为 list :"+list);
            return list.contains(tjOrder.getTjType());
        } catch (Exception e) {
            log.error("isUseLisAndPacsRegister"+e.getMessage());
            return false;
        }
    }
    /**
     * 检验项目字典的检验分类代码不能存在于该接口返回中,如果存在则不能合并
     * 获取检验分类合并信息字典 存在才能合并发送 不存在则只能单次发送
     * @return
     */
    public AjaxResult getJyFlHb(){
        return lisApiMethodService.getJyflhbxx();
    }
}