package com.ltkj.web.controller.system;
|
|
import java.io.*;
|
import java.math.BigDecimal;
|
import java.net.URL;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
|
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.extra.pinyin.PinyinUtil;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.alibaba.druid.sql.visitor.functions.Isnull;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.google.common.base.Joiner;
|
import com.ltkj.common.annotation.RepeatSubmit;
|
import com.ltkj.common.core.domain.entity.SysDictData;
|
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.dto.ExcelImportDto;
|
import com.ltkj.hosp.service.*;
|
import com.ltkj.mall.mallOrderUtils.TjConstants;
|
import com.ltkj.system.service.ISysConfigService;
|
import com.ltkj.system.service.ISysDictDataService;
|
import com.ltkj.web.config.pdfutils.PDFBinaryUtil;
|
import com.ltkj.web.config.redis.OrderDelayService;
|
import com.ltkj.web.config.task.TjReservationTask;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.transaction.NoTransactionException;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
import org.springframework.web.bind.annotation.*;
|
import com.ltkj.common.core.controller.BaseController;
|
import com.ltkj.common.core.domain.AjaxResult;
|
import com.ltkj.common.core.page.TableDataInfo;
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
/**
|
* 体检预约Controller
|
*
|
* @author ltkj
|
* @date 2022-11-28
|
*/
|
@RestController
|
@RequestMapping("/reservation/reservation")
|
@Api(tags = "体检预约管理接口")
|
@Slf4j
|
public class TjReservationController extends BaseController {
|
@Resource
|
private ITjReservationService tjReservationService;
|
@Resource
|
private ITjProjectService projectService;
|
@Resource
|
private ITjPackageService packageService;
|
@Resource
|
private ITjPackageProjectService tjPackageProjectService;
|
@Resource
|
private IDictCompService compService;
|
@Resource
|
private ITbTransitionService transitionService;
|
@Resource
|
private ITjCompPayService compPayService;
|
@Resource
|
private ITjTeamSelectRecordService selectRecordService;
|
@Resource
|
private ITjDwDeptService dwDeptService;
|
@Resource
|
private ITjDwGroupingService dwGroupingService;
|
@Resource
|
private ITjGroupingProService groupingProService;
|
@Resource
|
private TjAsyncService asyncService;
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private ISysDictDataService dictDataService;
|
@Autowired
|
private ISysConfigService configService;
|
@Autowired
|
private IDictCompService dictCompService;
|
@Autowired
|
private ITjDwDeptService tjDwDeptService;
|
@Autowired
|
private ITjDwGroupingService tjDwGroupingService;
|
|
// @Value("${path.filePath}")
|
// private String value;
|
|
@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);
|
}
|
}
|
|
|
/**
|
* 查询体检预约列表
|
*/
|
//@PreAuthorize("@ss.hasPermi('reservation:reservation:list')")
|
@GetMapping("/list")
|
@ApiOperation(value = "查询体检预约列表接口(默认)")
|
public TableDataInfo list(TjReservation tjReservation) {
|
startPage();
|
tjReservation.setIsExpire(2);
|
List<TjReservation> list = tjReservationService.selectTjReservationList(tjReservation);
|
// if(null !=list && list.size()>0){
|
// for (TjReservation reservation : list) {
|
// reservation.setName(MatchUtils.hideCusName(reservation.getName()));
|
// reservation.setPhoe(MatchUtils.hidePhoneNum(reservation.getPhoe()));
|
// reservation.setIdCard(MatchUtils.hideIdCardNum(reservation.getIdCard()));
|
// }
|
// }
|
return getDataTable(list);
|
}
|
|
/**
|
* 查询体检预约撤销列表接口
|
*/
|
@GetMapping("/selectTjReservationByDelete")
|
@ApiOperation(value = "查询撤销预约列表接口")
|
public TableDataInfo selectTjReservationByDelete(TjReservation tjReservation) {
|
startPage();
|
List<TjReservation> list = tjReservationService.selectTjReservationByDelete(tjReservation);
|
if (null != list && !list.isEmpty()) {
|
// for (TjReservation reservation : list) {
|
// reservation.setName(MatchUtils.hideCusName(reservation.getName()));
|
// reservation.setPhoe(MatchUtils.hidePhoneNum(reservation.getPhoe()));
|
// reservation.setIdCard(MatchUtils.hideIdCardNum(reservation.getIdCard()));
|
// }
|
}
|
return getDataTable(list);
|
}
|
|
|
@GetMapping("/likeGetComp")
|
@ApiOperation(value = "模糊查询公司名称接口")
|
public AjaxResult likeGetComp(@ApiParam(value = "公司名称(中文或英文都可以)") String compName) {
|
if (null != compName && !"".equals(compName)) {
|
LambdaQueryWrapper<DictComp> wq = new LambdaQueryWrapper<>();
|
wq.like(DictComp::getCnName, compName).or().like(DictComp::getEnName, compName);
|
List<DictComp> compList = compService.list(wq);
|
return AjaxResult.success(compList);
|
}
|
return AjaxResult.error("请输入要查询的内容");
|
}
|
|
|
/**
|
* 导入团体体检预约列表
|
*/
|
@PostMapping("/newExcelImport")
|
@ApiOperation(value = "团体excel表导入")
|
@Transactional
|
public AjaxResult newExcelImport(@RequestPart(value = "file") @ApiParam(value = "Excel文件") MultipartFile file,
|
@RequestParam @ApiParam(value = "单位id") String dwId,
|
@RequestParam @ApiParam(value = "单位部门id") String dwDeptId) {
|
List<TjReservation> tjReservations = null;
|
try {
|
tjReservations = ExcelUtils.readMultipartFile(file, TjReservation.class);
|
} catch (Exception e) {
|
return AjaxResult.error("导入文件有误请检查导入文件!");
|
}
|
int grouping = dwGroupingService.selectTjDwGroupingByDwDeptId(dwDeptId);
|
|
if (grouping == 0) {
|
return AjaxResult.error("请检查部门中是否存在分组或分组中是否存在项目!");
|
}
|
|
List<String> wrongList = new ArrayList<>();
|
List<TjReservation> rightList = new ArrayList<>();
|
List<TjReservation> yyList = new ArrayList<>();
|
Map<String, Object> map = new HashMap<>();
|
TjDwGrouping groupingMan = null;//男
|
TjDwGrouping groupingWoMan = null;//女
|
TjDwGrouping groupingWz = null;//未知(不分性别)
|
try {
|
groupingMan = dwGroupingService.getOne(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
|
.eq(TjDwGrouping::getDwDeptId, dwDeptId).eq(TjDwGrouping::getSex, 0));
|
groupingWoMan = dwGroupingService.getOne(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
|
.eq(TjDwGrouping::getDwDeptId, dwDeptId).eq(TjDwGrouping::getSex, 1));
|
groupingWz = dwGroupingService.getOne(new LambdaQueryWrapper<TjDwGrouping>().eq(TjDwGrouping::getDwId, dwId)
|
.eq(TjDwGrouping::getDwDeptId, dwDeptId).eq(TjDwGrouping::getSex, 2));
|
} catch (Exception e) {
|
return AjaxResult.error("分组信息有误请重新分组!");
|
}
|
//计算合计
|
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;//女组人数
|
for (TjReservation tjReservation : tjReservations) {
|
String idCard = tjReservation.getIdCard();
|
String phoe = tjReservation.getPhoe();
|
if (null != idCard && null != phoe) {
|
// if (!MatchUtils.isIdCard(idCard) || !MatchUtils.isMobileNO(phoe));
|
if (idCard.isEmpty() || phoe.isEmpty()) {
|
wrongList.add(tjReservation.getName());
|
} else {
|
String str = MatchUtils.translateToPlainStr(tjReservation.getPhoe());
|
|
tjReservation.setPhoe(str);
|
//年龄
|
tjReservation.setAge(String.valueOf(MatchUtils.getAgeByIdCard(tjReservation.getIdCard())));
|
//出生日期
|
try {
|
tjReservation.setBirthday(MatchUtils.getBirthDayByIdCard(tjReservation.getIdCard().replaceAll(" ", "")));
|
} catch (Exception e) {
|
return AjaxResult.error("身份证号不正确");
|
}
|
|
if (null != groupingMan && groupingMan.getSex().equals(String.valueOf(tjReservation.getSex()))) {
|
|
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;
|
|
} else if (null != groupingWoMan && groupingWoMan.getSex().equals(String.valueOf(tjReservation.getSex()))) {
|
|
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;
|
|
} else if (null != groupingWz && groupingWz.getSex().equals(String.valueOf(tjReservation.getSex()))) {
|
|
tjReservation.setGroupingId(groupingWz.getId());
|
tjReservation.setGroupingName(groupingWz.getGroupingName());
|
tjReservation.setYsPrice(groupingWz.getYsPrice());
|
//合计
|
hjMoney = hjMoney.add(groupingWz.getYsPrice());
|
count += 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);
|
}
|
rightList.add(tjReservation);
|
}
|
} else {
|
wrongList.add(tjReservation.getName());
|
}
|
}
|
if (yyList.size() > 0) {
|
map.put("list", yyList);
|
map.put("hjMoney", hjMoney);
|
return AjaxResult.error("操作失败,以上人员已经预约无需导入!!!", map);
|
}
|
|
if (wrongList.size() > 0) {
|
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);
|
}
|
}
|
|
|
/**
|
* 导入团体体检预约列表
|
*/
|
@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();
|
}
|
}
|
|
|
/**
|
* 个人预约接口
|
*/
|
@PostMapping("/addTjReservation")
|
@ApiOperation(value = "个人预约接口")
|
public AjaxResult addTjReservation(@RequestBody TjReservation tjReservation) {
|
if (null == tjReservation) return AjaxResult.error();
|
if (null == tjReservation.getName()) return AjaxResult.error("姓名不能为空");
|
if (null == tjReservation.getReservationTime()) return AjaxResult.error("请选择预约时间");
|
boolean b = true;
|
if (null != tjReservation.getIdType()) {
|
if (tjReservation.getIdType().equals("1")) {
|
b = MatchUtils.isIdCard(tjReservation.getIdCard());
|
} else {
|
b = MatchUtils.cardValidate(tjReservation.getIdCard(), tjReservation.getIdType());
|
}
|
} else {
|
return AjaxResult.error("请选择证件类型");
|
}
|
|
if (!b) return AjaxResult.error("证件号有误");
|
LambdaQueryWrapper<TjReservation> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjReservation::getIdCard, tjReservation.getIdCard());
|
wq.eq(TjReservation::getIsExpire, 2);
|
TjReservation reservation = tjReservationService.getOne(wq);
|
if (null != reservation) return AjaxResult.success("您已成功预约,无需再约");
|
//tjReservation.setAge(MatchUtils.getAgeByIdCard(tjReservation.getIdCard()));
|
try {
|
tjReservation.setBirthday(MatchUtils.getBirthDayByIdCard(tjReservation.getIdCard().replaceAll(" ", "")));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
tjReservation.setPayType(0L);
|
tjReservation.setIsExpire(2);
|
tjReservation.setTjType(String.valueOf(2));
|
if (tjReservationService.save(tjReservation)) {
|
// delayService.reservation(tjReservation.getId());
|
taskService.addTask(new TjReservationTask(tjReservation.getId(),
|
DateUtil.between(new Date(), DateUtil.endOfDay(tjReservation.getReservationTime()), DateUnit.MS)));
|
return AjaxResult.success("预约成功!!!");
|
}
|
LambdaQueryWrapper<TbTransition> remove = new LambdaQueryWrapper<>();
|
remove.between(TbTransition::getCreateTime, DateUtil.offsetMinute(transitionService.getTbTransitionCreateTimeByCusId(tjReservation.getIdCard()), -1), new Date());
|
remove.eq(TbTransition::getCusId, tjReservation.getIdCard());
|
transitionService.remove(remove);
|
return AjaxResult.error("预约失败");
|
}
|
|
|
/**
|
* 获取体检预约详细信息
|
*/
|
@GetMapping(value = "/{id}")
|
@ApiOperation(value = "根据预约id获取预约详情")
|
public AjaxResult getInfo(@PathVariable("id") @ApiParam(value = "预约id") String id) {
|
TjReservation tjReservation = tjReservationService.selectTjReservationById(id);
|
if (null != tjReservation) {
|
if (null != tjReservation.getPacId()) {
|
TjPackage aPackage = packageService.getById(tjReservation.getPacId());
|
if (null != aPackage) {
|
tjReservation.setPacName(aPackage.getPacName());
|
}
|
TjDwDept dwDept = dwDeptService.getById(tjReservation.getPacId());
|
|
if (null != dwDept) {
|
tjReservation.setPacName(dwDept.getDwName());
|
}
|
|
}
|
if (null != tjReservation.getProIds()) {
|
List<String> proNames = new ArrayList<>();
|
String[] proIds = StringUtils.split(tjReservation.getProIds(), ",");
|
if (null != proIds && proIds.length > 0) {
|
for (String proId : proIds) {
|
proNames.add(projectService.getById(proId).getProName());
|
}
|
tjReservation.setProNames(proNames);
|
}
|
}
|
return AjaxResult.success(tjReservation);
|
}
|
return error();
|
}
|
|
|
/**
|
* 体检预约撤销接口
|
*/
|
@DeleteMapping("/tjCancel/{id}")
|
@ApiOperation(value = "体检预约撤销接口")
|
public AjaxResult tjCancel(@PathVariable("id") @ApiParam(value = "预约id") String id) {
|
TjReservation reservation = tjReservationService.getById(id);
|
if (null != reservation && reservation.getIsExpire() == 2) {
|
if (tjReservationService.removeById(id)) {
|
transitionService.remove(new LambdaQueryWrapper<TbTransition>().eq(TbTransition::getCusId, reservation.getIdCard()));
|
taskService.removeTask(new TjReservationTask(id));
|
return AjaxResult.success("撤销成功");
|
}
|
return AjaxResult.error("撤销失败");
|
}
|
return AjaxResult.error("预约不存在或已失效,暂不能撤销预约!!!");
|
}
|
|
|
/**
|
* 体检预约撤销接口
|
*/
|
@PostMapping("/tjCancelTjReservation")
|
@ApiOperation(value = "体检预约批量撤销接口")
|
public AjaxResult tjCancelTjReservation(@RequestBody @ApiParam(value = "预约id") String[] ids) {
|
if (null != ids && ids.length > 0) {
|
for (String id : ids) {
|
TjReservation reservation = tjReservationService.getById(id);
|
if (null != reservation && reservation.getIsExpire() == 2) {
|
if (tjReservationService.removeById(id)) {
|
transitionService.remove(new LambdaQueryWrapper<TbTransition>().eq(TbTransition::getCusId, reservation.getIdCard())
|
.isNull(TbTransition::getTjNum));
|
taskService.removeTask(new TjReservationTask(id));
|
}
|
}
|
}
|
return AjaxResult.success("撤销成功");
|
}
|
return AjaxResult.error("请选择要撤销的数据!!!");
|
}
|
|
|
/**
|
* 体检修改预约接口
|
*/
|
@PostMapping("/tjReappoint")
|
@ApiOperation(value = "体检预约修改接口")
|
@Transactional
|
public AjaxResult tjReappoint(@RequestBody TjReservation tjReservation) {
|
TjReservation reservation = tjReservationService.getById(tjReservation.getId());
|
|
if (tjReservation.getIsExpire() == 1) {
|
return AjaxResult.error("预约已过期不可修改");
|
}
|
tjReservation.setIdCard(reservation.getIdCard());
|
tjReservation.setPhoe(reservation.getPhoe());
|
tjReservation.setName(reservation.getName());
|
if (tjReservationService.updateById(tjReservation)) {
|
taskService.removeTask(new TjReservationTask(tjReservation.getId()));
|
taskService.addTask(new TjReservationTask(tjReservation.getId(),
|
DateUtil.between(new Date(), DateUtil.endOfDay(DateUtil.offsetDay(tjReservation.getReservationTime(), reservation.getYxts())), DateUnit.MS)));
|
return AjaxResult.success("操作成功");
|
}
|
return AjaxResult.error("操作失败");
|
}
|
|
|
/**
|
* 获取体检预约详细信息
|
*/
|
@GetMapping(value = "getSelectRecordByTeamNo")
|
@ApiOperation(value = "根据单位id和团队编号获取预约详情")
|
public AjaxResult getSelectRecordByTeamNo(@RequestParam @ApiParam(value = "分组id") String groupingId) {
|
LambdaQueryWrapper<TjGroupingPro> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjGroupingPro::getGroupingId, groupingId);
|
List<TjGroupingPro> proList = groupingProService.list(wq);
|
if (null != proList && !proList.isEmpty()) {
|
for (TjGroupingPro groupingPro : proList) {
|
TjProject project = projectService.getById(groupingPro.getProId());
|
if (null != project) {
|
if (project.getProType() == null || project.getProType().isEmpty()) {
|
groupingPro.setProType("2");
|
} else {
|
groupingPro.setProType(project.getProType());
|
}
|
groupingPro.setProCheckMethod(project.getProCheckMethod());
|
}
|
}
|
}
|
return AjaxResult.success(proList);
|
}
|
|
|
@PostMapping("/newReservationConfirm")
|
@ApiOperation(value = "团体预约确认接口")
|
@Transactional
|
@RepeatSubmit
|
public AjaxResult newReservationConfirm(@RequestBody ConfirmDto dto) {
|
//预约的所有人
|
List<TjReservation> rightList = dto.getReservations();
|
|
//预约时间
|
String reservationTime = dto.getReservationTime();
|
if (null == reservationTime) {
|
return AjaxResult.error("请选择预约时间!");
|
}
|
|
//体检单位部门
|
TjDwDept dwDept = dwDeptService.getById(dto.getDwDeptId());
|
|
//异步数据
|
// asyncService.addNewReservationConfirm(rightList);
|
asyncService.saveNewReservationConfirm(rightList);
|
|
//团体人数合计价格
|
BigDecimal compPay = new BigDecimal("0.00");
|
|
//团体人数
|
int tramNum = 0;
|
if (null != rightList && rightList.size() > 0) {
|
String teamNo = PinyinUtil.getFirstLetter(dwDept.getDwName(), "") + DateUtil.format(new Date(), "yyMMddHHmmss");
|
for (TjReservation reservation : rightList) {
|
TjDwGrouping dwGrouping = dwGroupingService.getById(reservation.getGroupingId());
|
|
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.getDwDeptName());
|
reservation.setPayType(Long.valueOf(dwGrouping.getPayType()));
|
reservation.setPacId(dwDept.getId());
|
// if(dwGrouping.getPayType().equals("1")){
|
// compPay=compPay.add(dwGrouping.getYsPrice());
|
// tramNum+=1;
|
// reservation.setTjType(String.valueOf(1));
|
// reservation.setTeamNo(teamNo);
|
// }else {
|
// reservation.setTjType(String.valueOf(2));
|
// }
|
compPay = compPay.add(dwGrouping.getYsPrice());
|
tramNum += 1;
|
reservation.setTjType(String.valueOf(1));
|
reservation.setTeamNo(teamNo);
|
reservation.setYxts(dto.getYxts());
|
tjReservationService.save(reservation);
|
taskService.addTask(new TjReservationTask(reservation.getId(), DateUtil.between(new Date(), DateUtil.endOfDay(DateUtil.offsetDay(reservation.getReservationTime(), dto.getYxts())), DateUnit.MS)));
|
}
|
LambdaQueryWrapper<TjCompPay> wq0 = new LambdaQueryWrapper<>();
|
wq0.eq(TjCompPay::getCompId, dwDept.getDwId());
|
wq0.eq(TjCompPay::getTeamNo, teamNo);
|
TjCompPay one = compPayService.getOne(wq0);
|
if (null != one) {
|
one.setCopeWith(compPay);
|
one.setSerialNumber(SecurityUtils.getUsername() + DateUtil.format(new Date(), "yyMMddHHmmssSSS"));
|
one.setInvoiceNo("FP" + DateUtil.format(new Date(), "yyMMddHHmmssSSS"));
|
one.setPaidIn(new BigDecimal("0.00"));
|
compPayService.updateById(one);
|
} else {
|
TjCompPay tjCompPay = new TjCompPay();
|
tjCompPay.setCompId(dwDept.getDwId());
|
tjCompPay.setTeamNo(teamNo);
|
tjCompPay.setCopeWith(compPay);
|
tjCompPay.setSerialNumber(SecurityUtils.getUsername() + DateUtil.format(new Date(), "yyMMddHHmmssSSS"));
|
tjCompPay.setInvoiceNo("FP" + DateUtil.format(new Date(), "yyMMddHHmmssSSS"));
|
tjCompPay.setPaidIn(new BigDecimal("0.00"));
|
tjCompPay.setDifference(tjCompPay.getCopeWith().subtract(BigDecimal.valueOf(0.00)));
|
compPayService.save(tjCompPay);
|
}
|
LambdaQueryWrapper<TjTeamSelectRecord> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjTeamSelectRecord::getTeamNo, teamNo);
|
wq.eq(TjTeamSelectRecord::getCompId, dwDept.getDwId());
|
TjTeamSelectRecord recordServiceOne = selectRecordService.getOne(wq);
|
if (null != recordServiceOne) {
|
recordServiceOne.setPacId(dwDept.getId());
|
recordServiceOne.setCompId(dwDept.getDwId());
|
recordServiceOne.setTeamNo(teamNo);
|
recordServiceOne.setTransactionAmount(new BigDecimal("0.00"));
|
recordServiceOne.setCount(tramNum);
|
recordServiceOne.setDifference(compPay);
|
selectRecordService.updateById(recordServiceOne);
|
} else {
|
TjTeamSelectRecord selectRecord = new TjTeamSelectRecord();
|
selectRecord.setCompId(dwDept.getDwId());
|
selectRecord.setPacId(dwDept.getId());
|
selectRecord.setTeamNo(teamNo);
|
selectRecord.setTransactionAmount(new BigDecimal("0.00"));
|
selectRecord.setCount(tramNum);
|
selectRecord.setDifference(compPay);
|
selectRecordService.save(selectRecord);
|
}
|
return AjaxResult.success("预约成功");
|
}
|
return AjaxResult.error("请选择预约对象");
|
}
|
|
|
@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("请选择预约对象");
|
}
|
|
@GetMapping("/linkage")
|
public String linkage(@RequestParam("pid") String pid, @RequestParam("type") String type) {
|
switch (type){
|
case "1":
|
List<DictComp> list = dictCompService.list();
|
List<HashMap<String, Object>> collect = list.stream().map(i -> {
|
HashMap<String, Object> hashMap = new HashMap<>();
|
hashMap.put("value", i.getDrugManufacturerId());
|
hashMap.put("text", i.getCnName());
|
return hashMap;
|
}).collect(Collectors.toList());
|
return JSONUtil.toJsonStr(collect);
|
case "2":
|
List<TjDwDept> list1 = tjDwDeptService.getDwDeptListByTjDwDeptId(pid);
|
List<HashMap<String, Object>> collect1 = list1.stream().map(i -> {
|
HashMap<String, Object> hashMap = new HashMap<>();
|
hashMap.put("value", i.getId());
|
hashMap.put("text", i.getDwDeptName());
|
return hashMap;
|
}).collect(Collectors.toList());
|
return JSONUtil.toJsonStr(collect1);
|
case "3":
|
LambdaQueryWrapper<TjDwGrouping> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(TjDwGrouping::getDwDeptId,pid);
|
List<TjDwGrouping> list2 = tjDwGroupingService.list(wrapper);
|
List<HashMap<String, Object>> collect2 = list2.stream().map(i -> {
|
HashMap<String, Object> hashMap = new HashMap<>();
|
hashMap.put("value", i.getId());
|
hashMap.put("text", i.getGroupingName());
|
return hashMap;
|
}).collect(Collectors.toList());
|
return JSONUtil.toJsonStr(collect2);
|
}
|
return null;
|
}
|
|
}
|