zjh
2025-06-10 246d78931aa779d0ea2ae6a262cd23494476e80b
zjh20250610
15个文件已修改
4个文件已添加
1134 ■■■■ 已修改文件
ltkj-admin/src/main/java/com/ltkj/web/controller/system/DictCompController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysConfigController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjProjectController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/ZhiYeController.java 796 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/DictComp.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjBzPro.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjOrder.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjReservation.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjBzProMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjOrderRemarkMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjProjectMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjOrderRemarkService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjProjectService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjBzProService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjBzProServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjOrderRemarkServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjProjectServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-hosp/src/main/resources/mapper/DictCompMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/DictCompController.java
@@ -63,6 +63,15 @@
        return getDataTable(list);
    }
    @GetMapping("/getZybCompList")
    @ApiOperation(value = "获取职业病单位信息集合接口")
    public AjaxResult getZybCompList() {
        LambdaQueryWrapper<DictComp> wq = new LambdaQueryWrapper<>();
        wq.eq(DictComp::getDwlx,"1");
        return AjaxResult.success(dictCompService.list(wq));
    }
    /**
     * 导出体检单位信息维护列表
     */
ltkj-admin/src/main/java/com/ltkj/web/controller/system/SysConfigController.java
@@ -446,7 +446,7 @@
                    String[] split = jcsqd.getJgzt().replaceAll("\n", "").split("。|;|;|,|,");
                    for (String jg : split) {
                        if(StringUtil.isNotBlank(jg) && !jg.contains("未见异常")
                                && !jg.contains("未见明显异常") && !jg.contains("未见占位")
                                && !jg.contains("未见明显异常") && !jg.contains("未见占位")  && !jg.contains("无异常")
                                && !jg.contains("未见明显")&& !jg.contains("正常")&& !jg.contains("双侧椎间孔无狭窄")&& !jg.contains("无殊")){
                            TjJcycxm jcycxm=new TjJcycxm();
                            jcycxm.setTjh(s);
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjCheckController.java
@@ -13,6 +13,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ltkj.common.annotation.RepeatSubmit;
import com.ltkj.common.core.domain.AjaxResult;
import com.ltkj.common.core.domain.entity.SysDept;
import com.ltkj.common.core.domain.entity.SysUser;
import com.ltkj.common.core.redis.RedisCache;
import com.ltkj.common.enums.DataSourceType;
@@ -2093,4 +2094,36 @@
        return AjaxResult.success(list);
    }
    @GetMapping("/csymxmxzqtyybcjk")
    @ApiOperation(value = "初审页面项目选择其他原因保存接口")
    @Transactional
    public AjaxResult csymxmxzqtyybcjk(@RequestParam @ApiParam("体检号") String tjNum,@RequestParam @ApiParam("项目ID") String proId,
                                       @RequestParam @ApiParam("原因") String yy) {
        try {
            String czydm = SecurityUtils.getUsername();
            String czy = SecurityUtils.getLoginUser().getUser().getNickName();
            TjProject tjProject = projectService.getById(proId);
            if(null !=  tjProject){
                SysDept dept = deptService.getById(tjProject.getDeptId());
                LambdaQueryWrapper<TjOrderRemark> wq = new LambdaQueryWrapper<>();
                wq.eq(TjOrderRemark::getTjNumber, tjNum);
                wq.eq(TjOrderRemark::getProId, proId);
                TjOrderRemark remark = orderRemarkService.getOne(wq);
                remark.setType(1);
                if (orderRemarkService.updateById(remark)) {
                    orderRemarkService.csymxmxzqtyybcjk(tjNum,proId,yy,dept.getOrgType(),czy,czydm);
                    return AjaxResult.success();
                }
            }
        } catch (Exception ex) {
            log.error(ex.getMessage());
            throw new RuntimeException(ex);
        }
        return AjaxResult.error();
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjProjectController.java
@@ -72,6 +72,8 @@
    private RedisCache redisCache;
    @Autowired
    private TjProjectXgjlService xgjlService;
    @Autowired
    private TjBzProService bzProService;
    @GetMapping("/getTjHyBgList")
@@ -805,4 +807,62 @@
//        }
//    }
    @PostMapping("/addOrupdateProByBz")
    @ApiOperation(value = "新增或修改所选项目的对应病种信息")
    @Transactional
    public AjaxResult addOrupdateProByBz(@ApiParam(value = "项目ID集合")@RequestParam(required = false) List<String> proIds,
                                         @ApiParam(value = "病种ID")@RequestParam(required = false)String bz) {
        try {
            if(null !=  proIds && !proIds.isEmpty()){
                bzProService.remove(new LambdaQueryWrapper<>(TjBzPro.class).eq(TjBzPro::getBzId,bz));
                for (String proId : proIds) {
                    TjBzPro bzPro=new TjBzPro();
                    bzPro.setBzId(Long.valueOf(bz));
                    bzPro.setProId(Long.valueOf(proId));
                    bzProService.save(bzPro);
                }
            }
            return AjaxResult.success();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @GetMapping("/getProByBz")
    @ApiOperation(value = "查询病种对应项目")
    public AjaxResult getProByBz(@ApiParam(value = "病种ID")@RequestParam(required = false)String bz) {
        try {
            LambdaQueryWrapper<TjBzPro> tjBzProLambdaQueryWrapper = new LambdaQueryWrapper<>(TjBzPro.class);
            if(StringUtil.isNotBlank(bz)){
                tjBzProLambdaQueryWrapper.eq(TjBzPro::getBzId, bz);
                List<TjBzPro> list = bzProService.list(tjBzProLambdaQueryWrapper);
                for (TjBzPro bzPro : list) {
                    TjProject tjProject = tjProjectService.getById(bzPro.getProId());
                    if(null != tjProject)bzPro.setProName(tjProject.getProName());
                }
                return AjaxResult.success(list);
            }else {
                List<TjProject> list = tjProjectService.selectTjProjectListByBz();
                return AjaxResult.success(list);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @DeleteMapping("/delProByBz")
    @ApiOperation(value = "删除病种对应项目")
    public AjaxResult delProByBz(@ApiParam(value = "病种ID")@RequestParam(required = false)String bz,
                                 @ApiParam(value = "项目ID")@RequestParam(required = false)String proId) {
        try {
            bzProService.remove(new LambdaQueryWrapper<>(TjBzPro.class).eq(TjBzPro::getBzId,bz).eq(TjBzPro::getProId,proId));
            return AjaxResult.success();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/ZhiYeController.java
@@ -1,7 +1,9 @@
package com.ltkj.web.controller.system;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
@@ -9,11 +11,19 @@
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.base.Joiner;
import com.ltkj.common.annotation.RepeatSubmit;
import com.ltkj.common.core.domain.AjaxResult;
import com.ltkj.common.core.domain.entity.SysDept;
import com.ltkj.common.core.domain.entity.SysDictData;
import com.ltkj.common.core.domain.entity.SysUser;
import com.ltkj.common.excelConfig.ExcelUtils;
import com.ltkj.common.task.TaskService;
import com.ltkj.common.utils.SecurityUtils;
import com.ltkj.common.utils.StringUtils;
import com.ltkj.framework.config.MatchUtils;
import com.ltkj.hosp.domain.*;
import com.ltkj.hosp.dto.ConfirmDto;
import com.ltkj.hosp.idutil.IdUtils;
import com.ltkj.hosp.mapper.TjSamplingMapper;
import com.ltkj.hosp.service.*;
@@ -27,34 +37,36 @@
import com.ltkj.system.service.ISysDeptService;
import com.ltkj.system.service.ISysDictDataService;
import com.ltkj.system.service.ISysUserService;
import com.ltkj.web.config.pdfutils.PDFBinaryUtil;
import com.ltkj.web.config.task.TjReservationTask;
import com.ltkj.web.controller.his.HisApiMethod;
import com.ltkj.web.controller.his.HisApiMethodService;
import com.ltkj.web.controller.lis.LisApiMethod;
import com.ltkj.web.wxUtils.HttpClientUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.NoTransactionException;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
/**
 * @Company: 西安路泰科技有限公司
@@ -64,6 +76,7 @@
@Slf4j
@RestController
@RequestMapping("/zhiye/order")
@Api(tags = "职业病相关接口")
public class ZhiYeController {
    @Autowired
    private ISysUserService userService;
@@ -71,16 +84,28 @@
    private ITjCustomerService tjCustomerService;
    @Autowired
    private ITjReservationService tjReservationService;
    @Resource
    private ITjDwGroupingService dwGroupingService;
    @Resource
    private ITjGroupingProService groupingProService;
    @Autowired
    private IMallOrderService mallOrderService;
    @Autowired
    private ITjDwGroupingService dwGroupingService;
    @Autowired
    private ITbTransitionService transitionService;
    @Autowired
    private ITjOrderService tjOrderService;
    @Autowired
    private ISysConfigService configService;
    @Resource
    private IDictCompService compService;
    @Resource
    private ITjDwDeptService dwDeptService;
    @Resource
    private TjAsyncService asyncService;
    @Resource
    private ITjCompPayService compPayService;
    @Resource
    private ITjTeamSelectRecordService selectRecordService;
    @Autowired
    private IdUtils idUtils;
    @Autowired
@@ -121,6 +146,10 @@
    private ISysDeptService sysDeptService;
    @Autowired
    private TjFlowingWaterHisService tjFlowingWaterHisService;
    @Autowired
    private ISysDictDataService dictDataService;
    @Autowired
    private TaskService taskService;
    ReentrantLock lock = new ReentrantLock();
@@ -135,6 +164,7 @@
        wq.eq(TjCustomer::getCusId, tjOrder.getUserId());
        TjCustomer tjCustomer = tjCustomerService.getOne(wq);
        if (tjCustomer == null) return AjaxResult.error("该客户未登记");
        TjFlowingWater tjFlowingWater = new TjFlowingWater();
        LambdaQueryWrapper<TjReservation> wq1 = new LambdaQueryWrapper<>();
        wq1.eq(TjReservation::getIdCard, tjCustomer.getCusIdcard());
@@ -156,6 +186,21 @@
            if (null != tjReservation.getJobNo()) tjOrder.setFirmWorkId(tjReservation.getJobNo());
            if (null != tjReservation.getPacId()) tjOrder.setPacId(tjReservation.getPacId());
            if (null != tjReservation.getTjCategory()) tjOrder.setTjCategory(tjReservation.getTjCategory());
            if (null != tjReservation.getZhiyeJhgln()) tjOrder.setZhiyeJhgln(tjReservation.getZhiyeJhgln());
            if (null != tjReservation.getZhiyeJhgly()) tjOrder.setZhiyeJhgly(tjReservation.getZhiyeJhgly());
            if (null != tjReservation.getZhiyeKsjhrq()) tjOrder.setZhiyeKsjhrq(tjReservation.getZhiyeKsjhrq());
            if (null != tjReservation.getZhiyeGh()) tjOrder.setZhiyeGh(tjReservation.getZhiyeGh());
            if (null != tjReservation.getZhiyeGz()) tjOrder.setZhiyeGz(tjReservation.getZhiyeGz());
            if (null != tjReservation.getZhiyeZgln()) tjOrder.setZhiyeZgln(tjReservation.getZhiyeZgln());
            if (null != tjReservation.getZhiyeZgly()) tjOrder.setZhiyeZgly(tjReservation.getZhiyeZgly());
            if (null != tjReservation.getZhiyeJhys()) tjOrder.setZhiyeJhys(tjReservation.getZhiyeJhys());
            if (null != tjReservation.getZhiyeRzsj()) tjOrder.setZhiyeRzsj(tjReservation.getZhiyeRzsj());
            if (null != tjReservation.getZhiyeScdw()) tjOrder.setZhiyeScdw(tjReservation.getZhiyeScdw());
            if (null != tjReservation.getZhiyeZysksrq()) tjOrder.setZhiyeZysksrq(tjReservation.getZhiyeZysksrq());
            if (null != tjReservation.getZhiyeZysjsrq()) tjOrder.setZhiyeZysjsrq(tjReservation.getZhiyeZysjsrq());
            if (null != tjReservation.getZhiyeZysszdw()) tjOrder.setZhiyeZysszdw(tjReservation.getZhiyeZysszdw());
            if (null != tjReservation.getGroupingId()) {
                TjDwGrouping dwGrouping = dwGroupingService.getById(tjReservation.getGroupingId());
                tjOrder.setGroupId(tjReservation.getGroupingId());
@@ -163,7 +208,7 @@
            }
            tjReservation.setIsExpire(1);
            tjReservationService.updateById(tjReservation);
            if (null != tjReservation.getTeamNo()) {
            if (null != tjReservation.getTeamNo() && tjOrder.getTjType().equals("1")) {
                tjOrder.setTjType("1");
            } else if (tjOrder.getTjType().equals("2")) {
                tjOrder.setTjType("2");
@@ -213,7 +258,8 @@
            }
        }catch (Exception e){
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            log.error(String.valueOf(e));
            log.error(String.valueOf(e),e.getMessage());
            e.printStackTrace();
        }
        finally {
            lock.unlock();
@@ -221,15 +267,12 @@
        return AjaxResult.error();
    }
    @Transactional(propagation = Propagation.REQUIRED) // 共享事务
    @Transactional(propagation = Propagation.REQUIRED)
    public AjaxResult processOrderWithTransaction(TjOrder tjOrder, TjCustomer tjCustomer, TjReservation tjReservation, TjFlowingWater tjFlowingWater, MallOrder mallOrder, SysUser sysUser) {
        //获取拼接前缀
        String sfkqtjhqz = configService.selectConfigByKey("sfkqtjhqz");
        String makeLisTmhPrefix = "";
        if(sfkqtjhqz.equalsIgnoreCase("Y")){
            makeLisTmhPrefix = configService.selectConfigByKey("make_lis_tmh_prefix");
        }
        //生成体检号
        String makeLisTmhPrefix = configService.selectConfigByKey("make_lis_tmh_prefix");
        String tjNumber = null;
        int a =0;
        while (tjNumber ==null){
@@ -252,12 +295,14 @@
                }
            } catch (Exception e) {
                log.error(e.getMessage());
                throw new IllegalStateException();
            }finally {
                a++;
            }
        }
        if(StringUtil.isBlank(tjNumber)) return AjaxResult.error("登记失败 重新操作");
        tjOrder.setTjNumber(tjNumber);
        BigDecimal discount = BigDecimal.valueOf(Double.parseDouble(tjOrder.getTjFlowingWater().getDiscount()));
        tjOrder.setDiscount(discount.toString());
        if (tjOrderService.save(tjOrder)) {
@@ -346,38 +391,27 @@
            /*调用his接口*/
            String config = configService.selectConfigByKey("sfkqdyhis");
            if (null != config && config.equals("Y")) {
                if(tjCustomer.getPationId().equals("0")){
                    AjaxResult result = controller.Outpincreateapply(tjCustomer);
                    String result1 = getAjaxResult(result);
                    JSONObject object = getJSONObject(result1);
                    String code = object.getStr("ResultCode");
                    if (code.equals("0")) {
                        JSONArray resultDatass = object.getJSONArray("ResultData");
                        Map<String, Object> resultData = (Map<String, Object>) resultDatass.get(0);
                        if (null != resultData && !resultData.isEmpty()) {
                            String pationid = resultData.get("PationId").toString();
                            if (null != pationid) {
                                tjCustomer.setPationId(pationid);
                                tjCustomerService.updateById(tjCustomer);
                            }
                AjaxResult result = null;
                try {
                    result = hisApiMethod.HisApiMethods(tjCustomer, tjOrder);
                    if (!result.get("code").toString().equals("200")) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        Object jzh = result.get("jzh");
                        if (null != jzh && null != jzh.toString()) {
                            hisApiMethod.ZfHisApiMethod(jzh.toString());
                        }
                        log.info("该登记人挂号失败, 就诊号为: " + tjOrder.getCardId());
                        return AjaxResult.error("挂号失败!" + result.get("msg").toString());
                    }
                } catch (NoTransactionException e) {
                    log.error(e.getMessage());
                    throw new RuntimeException(e);
                }
                AjaxResult result = hisApiMethod.HisApiMethods(tjCustomer, tjOrder);
                if (!result.get("code").toString().equals("200")) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    Object jzh = result.get("jzh");
                    if (null != jzh && null != jzh.toString()) {
                        hisApiMethod.ZfHisApiMethod(jzh.toString());
                    }
                    log.info("该登记人挂号失败, 就诊号为: " + tjOrder.getCardId());
                    throw new IllegalStateException("挂号失败!" + result.get("msg").toString());
                }
                log.info("该登记人的his就诊号是: " + tjOrder.getCardId());
                // 查询 对接Lis、Pacs申请如果类型包含在配置内则使用对接lis、pacs
                try {
                    if (lisApiMethod.isUseLisAndPacsRegister(tjOrder)) {
                        log.info("调用his开启 进入不收费方法 该体检人员不收费:"+tjOrder.getTjNumber());
                        // 这是上面个人方法引入数据
                        tjFlowingWater.setPayStasus(1L);
                        newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
@@ -388,24 +422,17 @@
                        remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString());
                        List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber());
                        xdPictureService.saveBatch(xdPictureList);
                        List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
                        addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
                        log.info("调用his开启 进入不收费方法 该方法执行完毕");
                    } else {
                        log.info("调用his开启 进入收费方法 该体检人员收费:"+tjOrder.getTjNumber());
                        newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
                        List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
                        addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
                        String isUseMx = configService.selectConfigByKey("jcxhis_is_use_mx");
                        if (isUseMx.equalsIgnoreCase("Y"))
                            hisApiMethod.tijianshenqing(tjCustomer, DateUtil.format(date1, "yyyy-MM-dd HH:mm:ss"), tjOrder.getCardId());
                        else hisApiMethod.tijianshenqingJinchuanNew(tjCustomer, DateUtil.format(date1, "yyyy-MM-dd HH:mm:ss"), tjOrder.getCardId());
                        hisApiMethod.tijianshenqing(tjCustomer, DateUtil.format(date1, "yyyy-MM-dd HH:mm:ss"), tjOrder.getCardId());
                    }
                    return AjaxResult.success(tjNumber);
                } catch (Exception e) {
                    log.error(e.getMessage());
                    throw new IllegalStateException();
                    throw new RuntimeException(e);
                }
                return AjaxResult.success(tjNumber);
            } else {
                tjCustomer.setCardId(tjOrder.getTjNumber());
                tjCustomerService.updateById(tjCustomer);
@@ -413,45 +440,38 @@
                tjOrder.setCardId(tjOrder.getTjNumber());
                tjOrderService.updateById(tjOrder);
            }
            String drrysfsf = configService.selectConfigByKey("drrysfsf");
            try {
                if (lisApiMethod.isUseLisAndPacsRegister(tjOrder)) {
                    if(StringUtil.isNotBlank(drrysfsf) && drrysfsf.equalsIgnoreCase("Y")){
                        if(null != tjReservation){
                            return isUseLisAndPacsRegister(tjOrder, tjCustomer, tjReservation, tjFlowingWater, sysUser, discount, tjNumber);
                        }else {
                            newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
                            AjaxResult error = isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater);
                            if (error != null) return error;
            // 查询 对接Lis、Pacs申请如果类型包含在配置内则使用对接lis、pacs
            log.info("签到登记接口该人员: "+tjOrder.getTjNumber()+" 的体检类型是:"+tjOrder.getTjType());
            if (lisApiMethod.isUseLisAndPacsRegister(tjOrder)) {
                try {
                    log.info(tjOrder.getTjNumber()+"签到登记进入未收费方法");
                    // 这是上面个人方法引入数据
                    tjFlowingWater.setPayStasus(1L);
                            return AjaxResult.success(tjNumber);
                        }
                    }
                    return isUseLisAndPacsRegister(tjOrder, tjCustomer, tjReservation, tjFlowingWater, sysUser, discount, tjNumber);
                } else {
                    newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
                    tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()),
                            sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber()));
                    remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString());
                    List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber());
                    xdPictureService.saveBatch(xdPictureList);
                    List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
                    log.info(tjOrder.getTjNumber()+"签到登记:采样数据查询个数"+detailList.size());
                    addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
                    return AjaxResult.success(tjNumber);
                } catch (Exception e) {
                    log.error(e.getMessage());
                    throw new IllegalStateException(e);
                    AjaxResult error = isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater);
                    if (error != null) return error;
                }
            } else {
                try {
                    log.info(tjOrder.getTjNumber()+"else签到登记进入收费方法");
                    newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
                    isRequestCommonHisApi(tjOrder, tjCustomer, tjFlowingWater);
                } catch (Exception e) {
                    log.error("processOrderWithTransaction 方法异常"+e.getMessage());
                    throw new RuntimeException("调用公共方法失败 强制触发回滚");
                }
            } catch (Exception e) {
                log.error(e.getMessage());
                throw new RuntimeException(e);
            }
            return AjaxResult.success(tjNumber);
        }
        throw new RuntimeException("体检记录保存失败 强制触发回滚");
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        return AjaxResult.error();
    }
    @Transactional(propagation = Propagation.REQUIRED) // 共享事务
    public void newSaveextracted(TjOrder tjOrder, TjCustomer tjCustomer, BigDecimal discount, SysUser sysUser, TjReservation tjReservation, TjFlowingWater tjFlowingWater) {
        try {
            tjAskMedicalHistoryService.updateTjAskMedicalHistoryByCusId(tjOrder.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjCustomer.getCusId()));
@@ -495,104 +515,120 @@
                xdPictureService.saveBatch(xdPictureList);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }
    @Transactional(propagation = Propagation.REQUIRED) // 共享事务
    public void addCaiYangDengJi(List<TjOrderDetail> detailList, boolean detailList1, TjOrder order, SysUser sysUser, String jxbz) {
        try {
            String lis_tmh_prefix = configService.selectConfigByKey("make_lis_tmh_prefix");
            String config = configService.selectConfigByKey("sfkqdyhis");
            Boolean lisAndPacsRegister = lisApiMethod.isUseLisAndPacsRegister(order);
            if (null != detailList && detailList1) {
                Date date = new Date();
                String format = DateUtil.format(date, "yyMMddHHmmssSSS");
                for (TjOrderDetail detail : detailList) {
                    int i = samplingService.isExistProId(order.getTjNumber(), String.valueOf(detail.getProId()));
                    if(i>0) continue;
                    TjSampling sampling = new TjSampling();
                    if (null == projectService.getById(detail.getProId())) continue;
                    TjProject project = projectService.getById(detail.getProId());
                    Long proParentId = project.getProParentId();
                    String dictLabel = sysDictDataService.selectDictLabel("sys_dict_specimen", project.getSpecimenType());
                    if (null != proParentId && proParentId == 0) {
                        sampling.setJyxh(idUtils.generateLisID(lis_tmh_prefix));
                        sampling.setSpecimenTypeCode(project.getSpecimenType());
                        sampling.setSpecimenType(dictLabel);
                        if (config.equals("Y") && lisAndPacsRegister)
                            sampling.setJyxmdm(project.getLisXmbm());
                        else sampling.setJyxmdm(project.getProId().toString());
        String lis_tmh_prefix = configService.selectConfigByKey("make_lis_tmh_prefix");
        String config = configService.selectConfigByKey("sfkqdyhis");
        Boolean lisAndPacsRegister = lisApiMethod.isUseLisAndPacsRegister(order);
        if (null != detailList && detailList1) {
            Date date = new Date();
            String format = DateUtil.format(date, "yyMMddHHmmssSSS");
            for (TjOrderDetail detail : detailList) {
                int i = samplingService.isExistProId(order.getTjNumber(), String.valueOf(detail.getProId()));
                if(i>0) continue;
                TjSampling sampling = new TjSampling();
                if (null == projectService.getById(detail.getProId())) continue;
                TjProject project = projectService.getById(detail.getProId());
                Long proParentId = project.getProParentId();
                String dictLabel = sysDictDataService.selectDictLabel("sys_dict_specimen", project.getSpecimenType());
                if (null != proParentId && proParentId == 0) {
                    sampling.setJyxh(idUtils.generateLisID(lis_tmh_prefix));
                    sampling.setSpecimenTypeCode(project.getSpecimenType());
                    sampling.setSpecimenType(dictLabel);
                    if (config.equals("Y") && lisAndPacsRegister)
                        sampling.setJyxmdm(project.getLisXmbm());
                    else sampling.setJyxmdm(project.getProId().toString());
                } else {
                    TjProject project1 = projectService.getById(proParentId);
                    sampling.setJyxh(idUtils.generateLisID(lis_tmh_prefix));
                    sampling.setSpecimenTypeCode(project1.getSpecimenType());
                    sampling.setSpecimenType(dictLabel);
                    if (config.equals("Y") && lisAndPacsRegister)
                        sampling.setJyxmdm(project1.getLisXmbm());
                    else sampling.setJyxmdm(project1.getProId().toString());
                }
                sampling.setSamplingNumber(format);
                sampling.setTjNum(order.getTjNumber());
                sampling.setCusId(String.valueOf(order.getUserId()));
                if (tjCustomerService.getById(String.valueOf(order.getUserId())) != null) {
                    sampling.setCusName(tjCustomerService.getById(String.valueOf(order.getUserId())).getCusName());
                }
                sampling.setApplicationTime(date);
                sampling.setTjTime(order.getCreateTime());
                sampling.setProId(String.valueOf(detail.getProId()));
                sampling.setProName(projectService.getById(detail.getProId()).getProName());
                sampling.setCreateBy(sysUser.getNickName());
                sampling.setCreateTime(date);
                sampling.setUpdateBy(sysUser.getNickName());
                sampling.setUpdateTime(date);
                sampling.setCreateId(String.valueOf(sysUser.getUserId()));
                sampling.setUpdateId(String.valueOf(sysUser.getUserId()));
                sampling.setJxbz(jxbz);
                samplingService.save(sampling);
            }
        }
        if (lisApiMethod.isUseLisAndPacsRegister(order) && (null != config && config.equals("Y"))) {
            AjaxResult ajaxResult = lisApiMethod.getJyFlHb();
            if (ajaxResult.get("code").toString().equals("200")) {
                String str = ajaxResult.get("data").toString();
                str = str.replace("=", ":");
                JSONArray array = JSONUtil.parseArray(str);
                for (Object o : array) {
                    JSONObject object = (JSONObject) o;
                    LisJyflhb lisJyflhb = new LisJyflhb();
                    lisJyflhb.setHbhxm(object.getStr("hbhxm"));
                    lisJyflhb.setFlmc(object.getStr("flmc"));
                    lisJyflhb.setMc(object.getStr("mc"));
                    lisJyflhb.setFlbm(object.getStr("flbm"));
                    LambdaQueryWrapper<LisJyflhb> wrapper = new LambdaQueryWrapper<>();
                    wrapper.eq(LisJyflhb::getFlbm, lisJyflhb.getFlbm());
                    LisJyflhb jyflhb = lisJyflhbService.getOne(wrapper);
                    if (jyflhb == null) {
                        lisJyflhb.setId(IdUtil.getSnowflake().nextId());
                        lisJyflhbService.save(lisJyflhb);
                    } else {
                        TjProject project1 = projectService.getById(proParentId);
                        sampling.setJyxh(idUtils.generateLisID(lis_tmh_prefix));
                        sampling.setSpecimenTypeCode(project1.getSpecimenType());
                        sampling.setSpecimenType(dictLabel);
                        if (config.equals("Y") && lisAndPacsRegister)
                            sampling.setJyxmdm(project1.getLisXmbm());
                        else sampling.setJyxmdm(project1.getProId().toString());
                    }
                    sampling.setSamplingNumber(format);
                    sampling.setTjNum(order.getTjNumber());
                    sampling.setCusId(String.valueOf(order.getUserId()));
                    if (tjCustomerService.getById(String.valueOf(order.getUserId())) != null) {
                        sampling.setCusName(tjCustomerService.getById(String.valueOf(order.getUserId())).getCusName());
                    }
                    sampling.setApplicationTime(date);
                    sampling.setTjTime(order.getCreateTime());
                    sampling.setProId(String.valueOf(detail.getProId()));
                    sampling.setProName(projectService.getById(detail.getProId()).getProName());
                    sampling.setCreateBy(sysUser.getNickName());
                    sampling.setCreateTime(date);
                    sampling.setUpdateBy(sysUser.getNickName());
                    sampling.setUpdateTime(date);
                    sampling.setCreateId(String.valueOf(sysUser.getUserId()));
                    sampling.setUpdateId(String.valueOf(sysUser.getUserId()));
                    sampling.setJxbz(jxbz);
                    samplingService.save(sampling);
                }
            }
            if (lisApiMethod.isUseLisAndPacsRegister(order) && (null != config && config.equals("Y"))) {
                AjaxResult ajaxResult = lisApiMethod.getJyFlHb();
                if (ajaxResult.get("code").toString().equals("200")) {
                    String str = ajaxResult.get("data").toString();
                    str = str.replace("=", ":");
                    JSONArray array = JSONUtil.parseArray(str);
                    for (Object o : array) {
                        JSONObject object = (JSONObject) o;
                        LisJyflhb lisJyflhb = new LisJyflhb();
                        lisJyflhb.setHbhxm(object.getStr("hbhxm"));
                        lisJyflhb.setFlmc(object.getStr("flmc"));
                        lisJyflhb.setMc(object.getStr("mc"));
                        lisJyflhb.setFlbm(object.getStr("flbm"));
                        LambdaQueryWrapper<LisJyflhb> wrapper = new LambdaQueryWrapper<>();
                        wrapper.eq(LisJyflhb::getFlbm, lisJyflhb.getFlbm());
                        LisJyflhb jyflhb = lisJyflhbService.getOne(wrapper);
                        if (jyflhb == null) {
                            lisJyflhb.setId(IdUtil.getSnowflake().nextId());
                            lisJyflhbService.save(lisJyflhb);
                        } else {
                            lisJyflhb.setId(jyflhb.getId());
                            lisJyflhbService.updateById(lisJyflhb);
                        }
                        lisJyflhb.setId(jyflhb.getId());
                        lisJyflhbService.updateById(lisJyflhb);
                    }
                }
            }
            }
            if (StrUtil.isNotBlank(jxbz)) {
                tjSamplingMapper.updateUserIdByTjNumAndJxbz(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), jxbz);
            } else {
                tjSamplingMapper.updateUserIdByTjNum(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()));
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        if (StrUtil.isNotBlank(jxbz)) {
            tjSamplingMapper.updateUserIdByTjNumAndJxbz(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()), jxbz);
        } else {
            tjSamplingMapper.updateUserIdByTjNum(order.getTjNumber(), sysUser.getNickName(), String.valueOf(sysUser.getUserId()));
        }
    }
    @Transactional(propagation = Propagation.REQUIRED) // 共享事务
    public void isRequestCommonHisApi(TjOrder tjOrder, TjCustomer tjCustomer, TjFlowingWater tjFlowingWater) {
    private AjaxResult isUseLisAndPacsRegister(TjOrder tjOrder, TjCustomer tjCustomer, TjReservation tjReservation, TjFlowingWater tjFlowingWater, SysUser sysUser, BigDecimal discount, String tjNumber) {
        try {
            log.info("签到登记进入未收费方法");
            // 这是上面个人方法引入数据
            tjFlowingWater.setPayStasus(1L);
            newSaveextracted(tjOrder, tjCustomer, discount, sysUser, tjReservation, tjFlowingWater);
            tjOrderDetailService.updateTjOrderDetailsByOrderId(String.valueOf(tjOrder.getOrderId()),
                    sysUser.getNickName(), String.valueOf(sysUser.getUserId()), String.valueOf(tjFlowingWater.getTjSerialNumber()));
            remarkService.updateTjOrderRemarkSfbzByJxbzisnull(tjOrder.getOrderId().toString(), tjFlowingWater.getTjSerialNumber().toString());
            List<TjXdPicture> xdPictureList = xdPictureService.saveTjXdPicture(tjOrder.getTjNumber());
            xdPictureService.saveBatch(xdPictureList);
            List<TjOrderDetail> detailList = tjOrderDetailService.getCaiYangDengJi(tjOrder.getOrderId());
            log.info("签到登记:采样数据查询个数"+detailList.size());
            addCaiYangDengJi(detailList, !detailList.isEmpty(), tjOrder, sysUser, null);
            return AjaxResult.success(tjNumber);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }
    private AjaxResult isRequestCommonHisApi(TjOrder tjOrder, TjCustomer tjCustomer, TjFlowingWater tjFlowingWater) {
        String s = configService.selectConfigByKey("is_request_common_his_api");
        if (null != s && s.equals("Y")) {
            String apiUrl = configService.selectConfigByKey("common_api_url");
@@ -625,6 +661,7 @@
                SysDept dept = sysDeptService.getOne(wrapper2);
                JSONObject obj = JSONUtil.createObj();
//                Integer sl = project.getSl();
                int sl = 1;
                BigDecimal danjia = transition.getNowPrice();
                BigDecimal allPrice = danjia.multiply(new BigDecimal(sl));
@@ -653,19 +690,418 @@
                }
                tjFlowingWaterService.updateById(tjFlowingWater);
            } else {
                log.error("isRequestCommonHisApi 方法异常");
                throw new RuntimeException("is_request_common_his_api 强制触发回滚");
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return AjaxResult.error();
            }
        }
        return null;
    }
    @PostMapping("/importTemplate")
    @ApiOperation(value = "导出excel表模板")
    public void importTemplate(HttpServletResponse response) {
        String value = configService.selectConfigByKey("path_filePath");
        //原来的下载模板调用接口
        try {
            String base64String = PDFBinaryUtil.getPDFBinary(value + File.separator + "西安路泰机电科技有限公司.xls");
            if (null != base64String) {
                PDFBinaryUtil.base64StringToPDF(base64String, FileUtil.mkdir(value).getPath() + File.separator + "团体预约Excel模版.xls");
                String filePath = value + File.separator + "团体预约Excel模版.xls";
                File f = new File(filePath);
                BufferedInputStream br = null;
                OutputStream out = null;
                FileInputStream fileInputStream = null;
                try {
                    fileInputStream = new FileInputStream(f);
                    br = new BufferedInputStream(fileInputStream);
                    byte[] bs = new byte[1024];
                    int len = 0;
                    response.reset(); // 非常重要
                    if (true) {
                        // 在线打开方式
                        URL u = new URL("file:///" + filePath);
                        //System.out.println(u);
                        String contentType = u.openConnection().getContentType();
                        response.setContentType(contentType);
                        response.setHeader("Content-Disposition", "inline;filename=团体预约Excel模版.xls");
                    } else {
                        // 纯下载方式
                        response.setContentType("application/x-msdownload");
                        response.setContentType("application/pdf;charset=utf-8");
                        response.setHeader("Content-Disposition", "attachment;filename=团体预约Excel模版.xls");
                    }
                    out = response.getOutputStream();
                    while ((len = br.read(bs)) > 0) {
                        out.write(bs, 0, len);
                    }
                    out.flush();
                    out.close();
                    br.close();
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    //System.out.println("pdf处理文件异常" + e);
                } finally {
                    if (out != null) {
                        try {
                            out.close();
                            br.close();
                            fileInputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        } catch (Exception e) {
            ExcelUtils.exportTemplate(response,"团体预约Excel模版",TjReservation.class);
            throw new RuntimeException(e);
        }
    }
    public String getAjaxResult(AjaxResult result) {
        return result.get("data").toString();
    @PostMapping("/newExcelImportNotDwDeptId")
    @ApiOperation(value = "团体excel表导入 (新版本不传单位部门id)")
    @Transactional
    public AjaxResult newExcelImportNotDwDeptId(@RequestPart(value = "file") @ApiParam(value = "Excel文件") MultipartFile file,
                                                @RequestParam @ApiParam(value = "单位id") String dwId) {
        List<TjReservation> tjReservations = null;
        try {
            tjReservations = ExcelUtils.readMultipartFile(file, TjReservation.class);
        } catch (Exception e) {
            return AjaxResult.error("导入文件有误请检查导入文件!");
        }
        int grouping = dwGroupingService.selectTjDwGroupingByDwId(dwId);
        if (grouping == 0) {
            return AjaxResult.error("请检查该单位是否存否存在项目!");
        }
        List<String> wrongList = new ArrayList<>();
        List<TjReservation> rightList = new ArrayList<>();
        List<String> yyList = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        List<TjDwGrouping> groupingMans = null;//男
        List<TjDwGrouping> groupingWoMans = null;//女
        List<TjDwGrouping> groupingWzs = null;//未知(不分性别)
        try {
            groupingMans = dwGroupingService.list(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
                    .eq(TjDwGrouping::getSex, 0));
            groupingWoMans = dwGroupingService.list(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
                    .eq(TjDwGrouping::getSex, 1));
            groupingWzs = dwGroupingService.list(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
                    .eq(TjDwGrouping::getSex, 2));
        } catch (Exception e) {
            return AjaxResult.error("分组信息有误请重新分组!");
        }
        try {
            String sfjysfzh = configService.selectConfigByKey("sfjysfzh");
            String sfjysjh = configService.selectConfigByKey("sfjysjh");
            //计算合计
            BigDecimal hjMoney = new BigDecimal("0.00");
            //男组金额
            BigDecimal manMoney = new BigDecimal("0.00");
            //女组金额
            BigDecimal woManMoney = new BigDecimal("0.00");
            int count = 0;//总计人数
            int manCount = 0;//男组人数
            int woManCount = 0;//女组人数
            List<String> ids = new ArrayList<>();
//            String errMsg = "";
            for (TjReservation tjReservation : tjReservations) {
                String name = tjReservation.getName();
                String idCard = tjReservation.getIdCard();
                String phoe = tjReservation.getPhoe();
                name = name.replaceAll("[',,;.。 ‘“]", "").replaceAll(" ", "");
                phoe = phoe.replaceAll("[',,;.。 ‘“]", "").replaceAll(" ", "");
                idCard = idCard.replaceAll("[',,;.。 ‘“]", "").replaceAll(" ", "");
                if (!StringUtils.isBlank(idCard) || !StringUtils.isBlank(phoe) || null != tjReservation.getDwxm()) {
                    //将科学计数的手机号转换成文本形式
                    phoe = MatchUtils.translateToPlainStr(tjReservation.getPhoe());
                    if (!ids.isEmpty() && ids.contains(idCard)) {
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                        return AjaxResult.error("此身份证号: " + tjReservation.getIdCard() + " 重复,请核对后上传!");
                    }
                    ids.add(idCard);
                    if (!Objects.equals(tjReservation.getSex(), MatchUtils.getSexByIdCard(idCard))){
                        wrongList.add(tjReservation.getName() + " " + tjReservation.getIdCard()+"以下人员性别 不准确");
                        log.info(tjReservation.getName() + " " + idCard);
                    }
                    if ((sfjysfzh.equalsIgnoreCase("Y") && !MatchUtils.isIdCard(idCard)) ||
                            (sfjysjh.equalsIgnoreCase("Y") && !MatchUtils.isMobileNO(phoe))) {
                        wrongList.add(tjReservation.getName() + " " + tjReservation.getIdCard()+"身份证号/手机号 格式不准确");
//                            errMsg = "身份证号/手机号 格式不准确";
                        log.info(tjReservation.getName() + " " + idCard + MatchUtils.isIdCard(idCard) + " " + phoe + " " + MatchUtils.isMobileNO(phoe));
                    }
//                        else {
                    tjReservation.setPhoe(phoe);
                    tjReservation.setName(name);
                    tjReservation.setIdCard(idCard);
                    //年龄
                    tjReservation.setAge(String.valueOf(MatchUtils.getAgeByIdCard(tjReservation.getIdCard().replaceAll(" ", ""))));
                    //出生日期
                    try {
                        tjReservation.setBirthday(MatchUtils.getBirthDayByIdCard(tjReservation.getIdCard().replaceAll(" ", "")));
                    } catch (Exception e) {
//                            return AjaxResult.error("身份证号不正确");
                    }
                    TjDwDept dwDept = dwDeptService.getOne(new LambdaQueryWrapper<TjDwDept>().
                            eq(TjDwDept::getDwDeptName, tjReservation.getDwxm().trim()).eq(TjDwDept::getDwId,dwId));
                    if (null != dwDept) {
                        for (TjDwGrouping groupingMan : groupingMans) {
                            if (null != groupingMan && groupingMan.getSex().equals(String.valueOf(tjReservation.getSex())) && groupingMan.getDwDeptId().equals(dwDept.getId())) {
                                tjReservation.setGroupingId(groupingMan.getId());
                                tjReservation.setGroupingName(groupingMan.getGroupingName());
                                tjReservation.setYsPrice(groupingMan.getYsPrice());
                                //合计
                                hjMoney = hjMoney.add(groupingMan.getYsPrice());
                                count += 1;
                                //男组人数
                                manMoney = manMoney.add(groupingMan.getYsPrice());
                                manCount += 1;
                            }
                        }
                        for (TjDwGrouping groupingWoMan : groupingWoMans) {
                            if (null != groupingWoMan && groupingWoMan.getSex().equals(String.valueOf(tjReservation.getSex())) && groupingWoMan.getDwDeptId().equals(dwDept.getId())) {
                                tjReservation.setGroupingId(groupingWoMan.getId());
                                tjReservation.setGroupingName(groupingWoMan.getGroupingName());
                                tjReservation.setYsPrice(groupingWoMan.getYsPrice());
                                //合计
                                hjMoney = hjMoney.add(groupingWoMan.getYsPrice());
                                count += 1;
                                woManMoney = woManMoney.add(groupingWoMan.getYsPrice());
                                woManCount += 1;
                            }
                        }
                        for (TjDwGrouping groupingWz : groupingWzs) {
                            if (null != groupingWz && groupingWz.getDwDeptId().equals(dwDept.getId())) {
                                tjReservation.setGroupingId(groupingWz.getId());
                                tjReservation.setGroupingName(groupingWz.getGroupingName());
                                tjReservation.setYsPrice(groupingWz.getYsPrice());
                                //合计
                                hjMoney = hjMoney.add(groupingWz.getYsPrice());
                                count += 1;
                                if (tjReservation.getSex() == 0) {
                                    manMoney = manMoney.add(groupingWz.getYsPrice());
                                    manCount += 1;
                                }
                                if (tjReservation.getSex() == 1) {
                                    woManMoney = woManMoney.add(groupingWz.getYsPrice());
                                    woManCount += 1;
                                }
                            }
                        }
                        LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
                        wq.eq(TjReservation::getIdCard, tjReservation.getIdCard());
                        wq.eq(TjReservation::getIsExpire, 2);
                        TjReservation one = tjReservationService.getOne(wq);
                        if (null != one) {
                            yyList.add(one.getName() + " " + tjReservation.getIdCard());
                        } else {
                            rightList.add(tjReservation);
                        }
                    } else {
                        wrongList.add(tjReservation.getName() + " " + tjReservation.getIdCard()+"所填写的套餐分类名 不正确");
                    }
//                        }
                }
                else {
                    wrongList.add(tjReservation.getName()+"身份证号/手机号/套餐分类名名为空");
                }
            }
            if (!yyList.isEmpty()) {
                map.put("list", yyList);
                map.put("hjMoney", hjMoney);
                return AjaxResult.error("操作失败,以上人员已经预约无需导入!!!", map);
            }
            if (!wrongList.isEmpty()) {
                map.put("list", wrongList);
                map.put("hjMoney", hjMoney);
                return AjaxResult.error("操作失败, 请认真核对错误信息后重新导入!!!", map);
            } else {
                map.put("list", rightList);
                map.put("count", count);
                map.put("hjMoney", hjMoney);
                map.put("manCount", manCount);
                map.put("manMoney", manMoney);
                map.put("woManCount", woManCount);
                map.put("woManMoney", woManMoney);
                return AjaxResult.success("操作成功", map);
            }
        } catch (NoTransactionException e) {
//            throw new RuntimeException(e);
            log.error(String.valueOf(e), e.getMessage());
            return AjaxResult.error();
        }
    }
    public JSONObject getJSONObject(String builder) {
        String Response = JSONUtil.parseObj(builder).getStr("Response");
        return JSONUtil.parseObj(Response);
    @PostMapping("/newReservationConfirmxbb")
    @ApiOperation(value = "团体预约确认接口 (新版本)")
    @Transactional
    @RepeatSubmit
    public AjaxResult newReservationConfirmxbb(@RequestBody ConfirmDto dto) {
        //预约的所有人
        List<TjReservation> rightList = dto.getReservations();
        //预约时间
        String reservationTime = dto.getReservationTime();
        if (null == reservationTime) {
            return AjaxResult.error("请选择预约时间!");
        }
        Date date = new Date();
        //异步数据
//        asyncService.addNewReservationConfirm(rightList);
        asyncService.saveNewReservationConfirm(rightList);
        //体检单位部门
        DictComp comp = compService.getById(dto.getDwId());
        String teamNo = PinyinUtil.getFirstLetter(comp.getCnName(), "") + DateUtil.format(date, "yyMMddHHmmss");
        //团体人数合计价格
        BigDecimal compPay = new BigDecimal("0.00");
        String payTypeGlTjType = configService.selectConfigByKey("reservation_pay_type_gl_tj_type");
        JSONObject parseObj = JSONUtil.parseObj(payTypeGlTjType);
        if (null != rightList && !rightList.isEmpty()) {
            List<String> ids=new ArrayList<>();
            for (TjReservation reservation : rightList) {
                if(!ids.isEmpty() && ids.contains(reservation.getIdCard())){
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    return AjaxResult.error("此身份证号: "+reservation.getIdCard()+" 重复,请核对后上传!");
                }
                reservation.setName(reservation.getName().replaceAll(" ","").replaceAll(" ",""));
                ids.add(reservation.getIdCard());
                TjDwGrouping dwGrouping = dwGroupingService.getById(reservation.getGroupingId());
                if(null !=dwGrouping){
                    TjDwDept dwDept = dwDeptService.getById(dwGrouping.getDwDeptId());
                    LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
                    wq.eq(TjReservation::getIdCard, reservation.getIdCard());
                    wq.eq(TjReservation::getIsExpire, 2);
                    TjReservation one = tjReservationService.getOne(wq);
                    if (null != one) {
                        continue;
                    }
                    LambdaQueryWrapper<TjGroupingPro> wq1 = new LambdaQueryWrapper<>();
                    wq1.eq(TjGroupingPro::getGroupingId, reservation.getGroupingId());
                    List<String> proIds = groupingProService.list(wq1).stream().map(TjGroupingPro::getProId).collect(Collectors.toList());
                    reservation.setProIds(Joiner.on(",").join(proIds));
                    reservation.setReservationTime(DateUtil.parse(reservationTime, "yyyy-MM-dd"));
                    reservation.setCompanyId(dwGrouping.getDwId());
                    reservation.setCompany(dwGrouping.getDwName());
                    reservation.setPayType(Long.valueOf(dwGrouping.getPayType()));
                    LambdaQueryWrapper<SysDictData> wrapper = new LambdaQueryWrapper<>();
                    wrapper.eq(SysDictData::getDictType, "reservation_pay_type");
                    wrapper.eq(SysDictData::getDictValue, reservation.getPayType());
                    SysDictData dictData = dictDataService.getOne(wrapper);
                    for (Map.Entry<String, Object> entry : parseObj.entrySet()) {
                        String[] split = entry.getValue().toString().split("-");
                        if (split[0].equals(String.valueOf(dictData.getDictCode()))) {
                            reservation.setTjType(dictDataService.selectDictDataById(Long.valueOf(split[1])).getDictValue());
                        }
                    }
                    reservation.setPacId(dwDept.getId());
                    compPay = compPay.add(dwGrouping.getYsPrice());
//                reservation.setTjType(String.valueOf(1));
                    reservation.setTeamNo(teamNo);
                    reservation.setYxts(dto.getYxts());
                    tjReservationService.save(reservation);
                    taskService.addTask(new TjReservationTask(reservation.getId(),
                            DateUtil.between(date, DateUtil.endOfDay(DateUtil.offsetDay(reservation.getReservationTime(), dto.getYxts())), DateUnit.MS)));
                }
            }
            LambdaQueryWrapper<TjCompPay> wq0 = new LambdaQueryWrapper<>();
            wq0.eq(TjCompPay::getCompId, dto.getDwId());
            wq0.eq(TjCompPay::getTeamNo, teamNo);
            TjCompPay one = compPayService.getOne(wq0);
            if (null != one) {
                one.setCopeWith(compPay);
                one.setSerialNumber(SecurityUtils.getUsername() + DateUtil.format(date, "yyMMddHHmmssSSS"));
                one.setInvoiceNo("FP" + DateUtil.format(date, "yyMMddHHmmssSSS"));
                one.setPaidIn(new BigDecimal("0.00"));
                compPayService.updateById(one);
            } else {
                TjCompPay tjCompPay = new TjCompPay();
                tjCompPay.setCompId(dto.getDwId());
                tjCompPay.setTeamNo(teamNo);
                tjCompPay.setCopeWith(compPay);
                tjCompPay.setSerialNumber(SecurityUtils.getUsername() + DateUtil.format(date, "yyMMddHHmmssSSS"));
                tjCompPay.setInvoiceNo("FP" + DateUtil.format(date, "yyMMddHHmmssSSS"));
                tjCompPay.setPaidIn(new BigDecimal("0.00"));
                tjCompPay.setDifference(tjCompPay.getCopeWith().subtract(BigDecimal.valueOf(0.00)));
                compPayService.save(tjCompPay);
            }
//            .filter(a-> null != a.getPacId())
            Map<String, List<TjReservation>> collect = rightList.stream().collect(Collectors.groupingBy(TjReservation::getPacId));
            if (!collect.isEmpty()) {
                for (Map.Entry<String, List<TjReservation>> entry : collect.entrySet()) {
                    LambdaQueryWrapper<TjTeamSelectRecord> wq = new LambdaQueryWrapper<>();
                    wq.eq(TjTeamSelectRecord::getTeamNo, teamNo);
                    wq.eq(TjTeamSelectRecord::getCompId, dto.getDwId());
                    TjTeamSelectRecord recordServiceOne = selectRecordService.getOne(wq);
                    if (null != recordServiceOne) {
                        recordServiceOne.setPacId(entry.getKey());
                        recordServiceOne.setCompId(dto.getDwId());
                        recordServiceOne.setTeamNo(teamNo);
                        recordServiceOne.setTransactionAmount(new BigDecimal("0.00"));
                        recordServiceOne.setCount(entry.getValue().size());
                        recordServiceOne.setDifference(compPay);
                        selectRecordService.updateById(recordServiceOne);
                    } else {
                        TjTeamSelectRecord selectRecord = new TjTeamSelectRecord();
                        selectRecord.setCompId(dto.getDwId());
                        selectRecord.setPacId(entry.getKey());
                        selectRecord.setTeamNo(teamNo);
                        selectRecord.setTransactionAmount(new BigDecimal("0.00"));
                        selectRecord.setCount(entry.getValue().size());
                        selectRecord.setDifference(compPay);
                        selectRecordService.save(selectRecord);
                    }
                }
            }
            return AjaxResult.success("预约成功");
        }
        return AjaxResult.error("请选择预约对象");
    }
}
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/DictComp.java
@@ -226,6 +226,15 @@
    @Excel(name = "五笔简码")
    private String wbm;
    private String dwlx;
    private String ssdq;
    private String lsgx;
    private String jjlx;
    private String qygm;
    private String hyfl;
    private String fxpg;
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjBzPro.java
New file
@@ -0,0 +1,50 @@
package com.ltkj.hosp.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ltkj.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * ClassName: TjBzPro <br/>
 * Description: <br/>
 * date: 2025/5/27 17:55<br/>
 *
 * @author zjh<br />
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "体检项目对应病种对象")
public class TjBzPro extends BaseEntity {
    /**
     * 主键id
     */
    @TableId(type = IdType.AUTO)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    @ApiModelProperty(value = "项目ID")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long proId;
    @ApiModelProperty(value = "病种ID")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long bzId;
    @TableField(exist = false)
    private String proName;
}
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjOrder.java
@@ -480,12 +480,13 @@
    /**
     * 开始接害日期
     */
    private Date zhiyeKsjhrq;
    private String zhiyeKsjhrq;
    /**
     * 工号
     */
    private String zhiyeGh;
    /**
     * 车间
@@ -502,6 +503,17 @@
     */
    private String zhiyeJg;
    private String zhiyeGz;
    private String zhiyeZgln;
    private String zhiyeZgly;
    private String zhiyeJhys;
    private String zhiyeRzsj;
    private String zhiyeScdw;
    private String zhiyeZysksrq;
    private String zhiyeZysjsrq;
    private String zhiyeZysszdw;
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
ltkj-hosp/src/main/java/com/ltkj/hosp/domain/TjReservation.java
@@ -357,6 +357,90 @@
    @ApiModelProperty("有效天数")
    private Integer yxts;
    /**
     * 接害工龄年
     */
    @ExcelImport("接害工龄年")
    @ApiModelProperty("接害工龄年")
    private String zhiyeJhgln;
    /**
     * 接害工龄月
     */
    @ExcelImport("接害工龄月")
    @ApiModelProperty("接害工龄月")
    private String zhiyeJhgly;
    /**
     * 开始接害日期
     */
    @ExcelImport("开始接害日期")
    @ApiModelProperty("开始接害日期")
    private String zhiyeKsjhrq;
    /**
     * 工号
     */
    @ExcelImport("工号")
    @ApiModelProperty("工号")
    private String zhiyeGh;
    /**
     * 车间
     */
    @ApiModelProperty("车间")
    private String zhiyeCj;
    /**
     * 职业结论
     */
    @ApiModelProperty("职业结论")
    private String zhiyeJl;
    /**
     * 职业结果
     */
    @ApiModelProperty("职业结果")
    private String zhiyeJg;
    @ExcelImport("工种")
    @ApiModelProperty("工种")
    private String zhiyeGz;
    @ExcelImport("总工龄年")
    @ApiModelProperty("总工龄年")
    private String zhiyeZgln;
    @ExcelImport("总工龄月")
    @ApiModelProperty("总工龄月")
    private String zhiyeZgly;
    @ExcelImport("接害因素")
    @ApiModelProperty("接害因素")
    private String zhiyeJhys;
    @ExcelImport("入职时间")
    @ApiModelProperty("入职时间")
    private String zhiyeRzsj;
    @ExcelImport("所处单位")
    @ApiModelProperty("所处单位")
    private String zhiyeScdw;
    @ExcelImport("职业史开始日期")
    @ApiModelProperty("职业史开始日期")
    private String zhiyeZysksrq;
    @ExcelImport("职业史结束日期")
    @ApiModelProperty("职业史结束日期")
    private String zhiyeZysjsrq;
    @ExcelImport("职业史所在单位")
    @ApiModelProperty("职业史所在单位")
    private String zhiyeZysszdw;
    @Override
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjBzProMapper.java
New file
@@ -0,0 +1,16 @@
package com.ltkj.hosp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ltkj.hosp.domain.TjBzPro;
import org.apache.ibatis.annotations.Mapper;
/**
 * ClassName: TjBzProMapper <br/>
 * Description: <br/>
 * date: 2025/5/28 16:15<br/>
 *
 * @author zjh<br />
 */
@Mapper
public interface TjBzProMapper extends BaseMapper<TjBzPro> {
}
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjOrderRemarkMapper.java
@@ -317,4 +317,11 @@
    @Update("UPDATE tj_order_remark a " +
            "SET a.type=1 WHERE a.tj_number=#{tjNumber} and a.pro_id=#{proId}")
    int updateTjOrderRemarkByTjzt(@Param("tjNumber") String tjNumber,@Param("proId") String proId);
    @Select("call csymxmxzqtyybcjk(#{tjh,mode=IN},#{xmid,mode=IN},#{yy,mode=IN},#{kslx,mode=IN},#{czy,mode=IN}," +
            "#{czydm,mode=IN}) ")
    void csymxmxzqtyybcjk(@Param("tjh")String tjNum,@Param("xmid") String proId,@Param("yy") String yy,
                          @Param("kslx") String orgType,@Param("czy") String czy,@Param("czydm") String czydm);
}
ltkj-hosp/src/main/java/com/ltkj/hosp/mapper/TjProjectMapper.java
@@ -208,4 +208,9 @@
    List<TjProject> getProListByBwwh(String bw);
    @Select("SELECT * FROM tj_project a WHERE a.deleted=0 AND a.pro_status=0 AND a.pro_parent_id=0 AND a.pro_id NOT IN (SELECT pro_id FROM tj_bz_pro )")
    List<TjProject> selectTjProjectListByBz();
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjOrderRemarkService.java
@@ -104,4 +104,6 @@
    List<CsProVo> getYxJcXx(String tjNumber,String ks);
    int updateTjOrderRemarkByTjzt(String tjNumber,String proId);
    void csymxmxzqtyybcjk(String tjNum, String proId, String yy, String orgType, String czy, String czydm);
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/ITjProjectService.java
@@ -146,4 +146,7 @@
    List<TjProject> getProListByBblx(String bblx);
    List<TjProject> getProListByBwwh(String bw);
    List<TjProject> selectTjProjectListByBz();
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/TjBzProService.java
New file
@@ -0,0 +1,15 @@
package com.ltkj.hosp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ltkj.hosp.domain.TjBzPro;
/**
 * ClassName: TjBzProService <br/>
 * Description: <br/>
 * date: 2025/5/28 16:15<br/>
 *
 * @author zjh<br />
 */
public interface TjBzProService extends IService<TjBzPro> {
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjBzProServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.ltkj.hosp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ltkj.hosp.domain.TjBzPro;
import com.ltkj.hosp.mapper.TjBzProMapper;
import com.ltkj.hosp.service.TjBzProService;
import org.springframework.stereotype.Service;
/**
 * ClassName: TjBzProServiceImpl <br/>
 * Description: <br/>
 * date: 2025/5/28 16:16<br/>
 *
 * @author zjh<br />
 */
@Service
public class TjBzProServiceImpl extends ServiceImpl<TjBzProMapper, TjBzPro> implements TjBzProService {
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjOrderRemarkServiceImpl.java
@@ -214,4 +214,9 @@
        return mapper.updateTjOrderRemarkByTjzt(tjNumber, proId);
    }
    @Override
    public void csymxmxzqtyybcjk(String tjNum, String proId, String yy, String orgType, String czy, String czydm) {
        mapper.csymxmxzqtyybcjk( tjNum,  proId,  yy,  orgType,  czy,  czydm);
    }
}
ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/TjProjectServiceImpl.java
@@ -358,4 +358,9 @@
        return tjProjectMapper.getProListByBwwh(bw);
    }
    @Override
    public List<TjProject> selectTjProjectListByBz() {
        return tjProjectMapper.selectTjProjectListByBz();
    }
}
ltkj-hosp/src/main/resources/mapper/DictCompMapper.xml
@@ -234,6 +234,7 @@
            <if test="validTime != null">valid_time = #{validTime},</if>
            <if test="wbm != null">wbm = #{wbm},</if>
            <if test="deleted != null">deleted = #{deleted},</if>
            <if test="dwlx != null">dwlx = #{dwlx},</if>
        </trim>
        where drug_manufacturer_id = #{drugManufacturerId}
    </update>