package com.ltkj.web.controller.system; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.utils.SecurityUtils; import com.ltkj.framework.config.MatchUtils; import com.ltkj.hosp.domain.*; import com.ltkj.hosp.service.*; import com.ltkj.hosp.vodomain.TeamTjPeopleVo; import com.mysql.cj.util.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import jodd.util.StringUtil; import org.aspectj.weaver.AjAttribute; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import com.ltkj.common.core.controller.BaseController; import oshi.hardware.platform.mac.MacUsbDevice; import javax.annotation.Resource; import java.lang.annotation.ElementType; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import static com.ltkj.framework.datasource.DynamicDataSourceContextHolder.log; /** * 体检单位缴费主Controller * * @author ltkj * @date 2023-03-14 */ @RestController @RequestMapping("/team/pay") @Api(tags = "团体体检收费管理") public class TjCompPayController extends BaseController { @Resource private ITjCompPayService compPayService; @Resource private ITjCompPayInfoService payInfoService; @Resource private ITjTeamSelectRecordService selectRecordService; @Resource private IDictCompService compService; @Resource private ITjReservationService reservationService; @Resource private ITjOrderService orderService; @Resource private ITjCustomerService customerService; @Resource private ITjDwGroupingService dwGroupingService; @Resource private ITjOrderRemarkService remarkService; @Resource private ITjFlowingWaterService tjFlowingWaterService; @Resource private ITbTransitionService transitionService; /** * 团体体检收费接口 */ @PostMapping @ApiOperation(value = "团体体检收费接口") @Transactional public AjaxResult add(@RequestBody TjCompPay compPay) { try { if (null==compPay.getTjhs() || compPay.getTjhs().isEmpty()) { return AjaxResult.error("请选择结账人员!"); } Date date = DateUtil.date(); String s = String.valueOf(SecurityUtils.getLoginUser().getUser().getNickName()); compPay.setPayee(s); compPay.setSerialNumber("TT"+SecurityUtils.getUsername() + DateUtil.format(date, "yyMMddHHmmssSSS")); compPay.setInvoiceNo("FP" + DateUtil.format(date, "yyMMddHHmmssSSS")); if(compPayService.save(compPay)){ for (String tjh : compPay.getTjhs()) { TjOrder tjOrder = orderService.getOrderByTjNum(tjh); if(null != tjOrder){ TjFlowingWater water = tjFlowingWaterService.getOne(new LambdaQueryWrapper() .eq(TjFlowingWater::getOrderId, tjOrder.getOrderId()).eq(TjFlowingWater::getIsAddition, "N")); if(null != water){ TjCompPayInfo payInfo = new TjCompPayInfo(); payInfo.setTjh(tjh); payInfo.setTjCompPayId(compPay.getId()); payInfo.setTransactionAmount(water.getPaidIn()); payInfo.setPaymentMethod(compPay.getPaymentMethod()); payInfo.setCardNo(compPay.getCardNo()); payInfo.setPayer(compPay.getPayer()); payInfo.setPayee(compPay.getPayee()); payInfoService.save(payInfo); water.setSfjs("1"); water.setJsdh(compPay.getSerialNumber()); water.setJsrq(DateUtil.date()); water.setJsrxm(s); water.setJsrdm(SecurityUtils.getLoginUser().getUser().getUserId().toString()); tjFlowingWaterService.updateById(water); } } } return AjaxResult.success("收费成功"); } return AjaxResult.error("操作失败"); } catch (Exception e) { log.error("收费异常", e); throw new RuntimeException(e); } } /** * 团体体检退费接口 */ @PostMapping("/refund") @ApiOperation(value = "团体体检退费接口") @Transactional public AjaxResult refund(@RequestBody TjCompPay compPay) { try { if(null !=compPay){ if (compPayService.removeById(compPay)) { LambdaQueryWrapperwq=new LambdaQueryWrapper<>(); wq.eq(TjCompPayInfo::getTjCompPayId,compPay.getId()); payInfoService.remove(wq); LambdaQueryWrapper waterLambdaQueryWrappe=new LambdaQueryWrapper<>(); waterLambdaQueryWrappe.eq(TjFlowingWater::getJsdh,compPay.getSerialNumber()); List waterList = tjFlowingWaterService.list(waterLambdaQueryWrappe); if(null != waterList && !waterList.isEmpty()){ for (TjFlowingWater water : waterList) { water.setSfjs("0"); water.setJsdh(null); water.setJsrq(null); water.setJsrxm(null); water.setJsrdm(null); tjFlowingWaterService.updateById(water); } } return AjaxResult.success("操作成功"); } } return AjaxResult.error("操作失败"); } catch (Exception e) { log.error("操作失败", e); throw new RuntimeException(e); } } /** * 所有公司体检收费数据查询接口 */ @GetMapping @ApiOperation(value = "所有公司体检收费数据查询接口") public AjaxResult list(@RequestParam(required = false) @ApiParam(value = "单位id") String compId) { List rightList = reservationService.list(new LambdaQueryWrapper().eq(TjReservation::getCompanyId, compId)); Map> collect = rightList.stream().collect(Collectors.groupingBy(TjReservation::getPacId)); if (!collect.isEmpty()) { for (Map.Entry> entry : collect.entrySet()) { BigDecimal compPay = new BigDecimal("0.00"); for (TjReservation reservation : entry.getValue()) { TjDwGrouping dwGrouping = dwGroupingService.getById(reservation.getGroupingId()); compPay = compPay.add(dwGrouping.getYsPrice()); } LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjTeamSelectRecord::getTeamNo, entry.getValue().get(0).getTeamNo()); wq.eq(TjTeamSelectRecord::getPacId, entry.getKey()); wq.eq(TjTeamSelectRecord::getCompId,compId); TjTeamSelectRecord recordServiceOne = selectRecordService.getOne(wq); if (null == recordServiceOne) { TjTeamSelectRecord selectRecord = new TjTeamSelectRecord(); selectRecord.setCompId(compId); selectRecord.setPacId(entry.getKey()); selectRecord.setTeamNo(entry.getValue().get(0).getTeamNo()); selectRecord.setTransactionAmount(new BigDecimal("0.00")); selectRecord.setCopeWith(compPay); selectRecord.setCount(entry.getValue().size()); selectRecord.setDifference(compPay); selectRecordService.save(selectRecord); } } } LambdaQueryWrapperwq0=new LambdaQueryWrapper<>(); if(null !=compId){ wq0.eq(TjTeamSelectRecord::getCompId,compId); } List selectRecordList = selectRecordService.list(wq0); if(null !=selectRecordList && !selectRecordList.isEmpty()){ for(TjTeamSelectRecord selectRecord : selectRecordList){ selectRecord.setSjCount(orderService.count(new LambdaQueryWrapper() .eq(TjOrder::getTeamNo,selectRecord.getTeamNo()).eq(TjOrder::getPacId,selectRecord.getPacId()))); TjDwGrouping dwGrouping = dwGroupingService.getById(selectRecord.getPacId()); if(null !=dwGrouping){ selectRecord.setPacName(dwGrouping.getGroupingName()); selectRecord.setSigningPrice(dwGrouping.getSigningPrice()); } LambdaQueryWrapperwq1=new LambdaQueryWrapper<>(); wq1.eq(TjCompPay::getCompId,compId); wq1.eq(TjCompPay::getTeamNo,selectRecord.getTeamNo()); wq1.eq(TjCompPay::getPacId,selectRecord.getPacId()); List compPay = compPayService.list(wq1); BigDecimal sumZje = compPayService.sumZje(compId,selectRecord.getTeamNo(),selectRecord.getPacId()); List SerialNumbers = compPayService.serialNumbers(compId,selectRecord.getTeamNo(),selectRecord.getPacId()); if (null !=compPay && !compPay.isEmpty()) { selectRecord.setTransactionAmount(sumZje); selectRecord.setDifference(selectRecord.getCopeWith().subtract(sumZje)); selectRecord.setYjsrs(tjFlowingWaterService.count(new LambdaQueryWrapper() .in(TjFlowingWater::getJsdh,SerialNumbers))); }else { selectRecord.setYjsrs(0); } } } return AjaxResult.success(selectRecordList); } /** * 所有公司体检收费数据查询接口 */ @GetMapping("/getTeamTjPeopleList") @ApiOperation(value = "根据团队体检编号团队人员体检情况查询") public AjaxResult getTeamTjPeopleList(@RequestParam @ApiParam(value = "团队编号") String teamNo, @RequestParam(required = false) @ApiParam(value = "单位id") String pacId) { try { Map map=new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TjReservation::getTeamNo, teamNo); if(StringUtil.isNotBlank(pacId))wrapper.eq(TjReservation::getPacId, pacId); List reservationList = reservationService.list(wrapper); if (null != reservationList && !reservationList.isEmpty()) { List syList = new ArrayList<>(); List yjwjzList = new ArrayList<>(); List wjList = new ArrayList<>(); for (TjReservation reservation : reservationList) { TeamTjPeopleVo vo = new TeamTjPeopleVo(); vo.setName(reservation.getName()); vo.setXb(reservation.getSex().toString()); vo.setDh(reservation.getPhoe()); TjCustomer customer = null; try { customer = customerService.getTjCustomerByCusIdCard( reservation.getIdCard()); } catch (Exception e) { log.error("根据团队编号查询团队预约信息异常"+reservation.getIdCard()); throw new RuntimeException(e); } if (null != customer) { TjOrder tjOrder = orderService.getOne(new LambdaQueryWrapper().eq(TjOrder::getUserId, customer.getCusId()).eq(TjOrder::getTeamNo, teamNo)); if (null != tjOrder) { TjFlowingWater water = tjFlowingWaterService.getOne(new LambdaQueryWrapper() .eq(TjFlowingWater::getOrderId, tjOrder.getOrderId()).eq(TjFlowingWater::getIsAddition, "N")); if(null != water && water.getSfjs().equals("0") && water.getJsrq() ==null){ vo.setTjh(tjOrder.getTjNumber()); int sfwc = remarkService.panduaniswancheng(tjOrder.getTjNumber()); if (sfwc==0) { vo.setTjStatus("已完成"); vo.setTjTime(DateUtil.format(tjOrder.getCreateTime(),"yyyy-MM-dd")); vo.setTjf(water.getPaidIn()); } else { vo.setTjTime(DateUtil.format(tjOrder.getCreateTime(),"yyyy-MM-dd")); vo.setTjf(water.getPaidIn()); vo.setTjStatus("在 检"); } yjwjzList.add(vo); } } else { vo.setTjStatus("未 检"); vo.setTjf(transitionService.sumNowPrice(reservation.getIdCard())); wjList.add(vo); } }else { vo.setTjStatus("未 检"); vo.setTjf(transitionService.sumNowPrice(reservation.getIdCard())); wjList.add(vo); } syList.add(vo); } map.put("syList",syList); map.put("yjwjzList",yjwjzList); map.put("wjList",wjList); return AjaxResult.success(map); } return AjaxResult.success(null); } catch (Exception e) { log.error("查询团队体检人员信息异常"); throw new RuntimeException(e); } } @GetMapping("/getTjCompPay") @ApiOperation(value = "根据团队体检编号和套餐id获取结账信息") public AjaxResult getTjCompPay(@RequestParam @ApiParam(value = "团队编号") String teamNo, @RequestParam(required = false) @ApiParam(value = "单位id") String pacId) { try { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjCompPay::getTeamNo, teamNo); wq.eq(TjCompPay::getCompId, pacId); List tjCompPays = compPayService.list(wq); if(null !=tjCompPays && !tjCompPays.isEmpty()){ for (TjCompPay pay : tjCompPays) { LambdaQueryWrapper wqInfo = new LambdaQueryWrapper<>(); wqInfo.eq(TjCompPayInfo::getTjCompPayId, pay.getId()); List payInfos = payInfoService.list(wqInfo); pay.setPayInfo(payInfos); } } return AjaxResult.success(tjCompPays); } catch (Exception e) { log.error("查询团队体检人员信息异常"); throw new RuntimeException(e); } } }