package com.ltkj.web.controller.system; 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.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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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 ITjPackageService packageService; @Resource private IDictCompService compService; @Resource private ITjReservationService reservationService; @Resource private ITjOrderService orderService; @Resource private ITjCustomerService customerService; @Resource private ITjDwDeptService dwDeptService; @Resource private ITjDwGroupingService dwGroupingService; @Resource private ITjOrderRemarkService remarkService; /** * 团体体检收费接口 */ @PostMapping @ApiOperation(value = "团体体检收费接口") public AjaxResult add(@RequestBody TjCompPayInfo compPayInfo) { if (null==compPayInfo) { return AjaxResult.error(); } compPayInfo.setPayee(String.valueOf(SecurityUtils.getLoginUser().getUser().getNickName())); TjCompPay tjCompPay =compPayService.getById(compPayInfo.getTjCompPayId()); BigDecimal paidIn = tjCompPay.getPaidIn(); paidIn =paidIn.add(compPayInfo.getTransactionAmount()); if(paidIn.compareTo(tjCompPay.getCopeWith())>0 || tjCompPay.getDifference().compareTo(BigDecimal.valueOf(0))==0){ return AjaxResult.error("暂无收费需求"); } if (getAjaxResult(compPayInfo, tjCompPay)) return AjaxResult.success("收费成功"); return AjaxResult.error("操作失败"); } /** * 团体体检退费接口 */ @PostMapping("/refund") @ApiOperation(value = "团体体检退费接口") public AjaxResult refund(@RequestBody TjCompPayInfo compPayInfo) { if (null==compPayInfo) { return AjaxResult.error(); } compPayInfo.setPayee(String.valueOf(SecurityUtils.getLoginUser().getUser().getNickName())); TjCompPay tjCompPay =compPayService.getById(compPayInfo.getTjCompPayId()); BigDecimal paidIn = tjCompPay.getPaidIn(); paidIn =paidIn.add(compPayInfo.getTransactionAmount()); //判断实付金额和交易金额的数值 if(paidIn.compareTo(BigDecimal.valueOf(0.00))==0 || compPayInfo.getTransactionAmount().compareTo(tjCompPay.getPaidIn())>0 ){ return AjaxResult.error("暂无退费需求"); } compPayInfo.setTransactionAmount(BigDecimal.valueOf(0.00).subtract(compPayInfo.getTransactionAmount())); compPayInfo.setPaymentMethod(3L); if (getAjaxResult(compPayInfo, tjCompPay)) return AjaxResult.success("退费成功"); return AjaxResult.error("操作失败"); } private boolean getAjaxResult(@RequestBody TjCompPayInfo compPayInfo, TjCompPay tjCompPay) { if(payInfoService.saveOrUpdate(compPayInfo)){ LambdaQueryWrapper wq=new LambdaQueryWrapper<>(); wq.eq(TjCompPayInfo::getTjCompPayId,tjCompPay.getId()); List list = payInfoService.list(wq); BigDecimal bigDecimal=new BigDecimal("0.00"); if(null !=list && !list.isEmpty()){ for (TjCompPayInfo payInfo : list) { bigDecimal=bigDecimal.add(payInfo.getTransactionAmount()); } } tjCompPay.setCreateBy(String.valueOf(SecurityUtils.getLoginUser().getUserId())); if(bigDecimal.compareTo(BigDecimal.valueOf(0.00))>= 0){ tjCompPay.setPaidIn(bigDecimal); }else { tjCompPay.setPaidIn(BigDecimal.valueOf(0.00)); } tjCompPay.setDifference(tjCompPay.getCopeWith().subtract(bigDecimal)); compPayService.updateById(tjCompPay); LambdaQueryWrapperwq0=new LambdaQueryWrapper<>(); wq0.eq(TjTeamSelectRecord::getTeamNo,tjCompPay.getTeamNo()); wq0.eq(TjTeamSelectRecord::getCompId,tjCompPay.getCompId()); TjTeamSelectRecord record = selectRecordService.getOne(wq0); record.setTransactionAmount(tjCompPay.getPaidIn()); selectRecordService.updateById(record); return true; } return false; } /** * 所有公司体检收费数据查询接口 */ @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) { recordServiceOne.setPacId(entry.getKey()); recordServiceOne.setCompId(compId); recordServiceOne.setTeamNo(entry.getValue().get(0).getTeamNo()); recordServiceOne.setTransactionAmount(new BigDecimal("0.00")); recordServiceOne.setCount(entry.getValue().size()); recordServiceOne.setDifference(compPay); selectRecordService.updateById(recordServiceOne); } else { 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.setCount(entry.getValue().size()); selectRecord.setDifference(compPay); selectRecordService.save(selectRecord); } } } LambdaQueryWrapperwq0=new LambdaQueryWrapper<>(); if(null !=compId){ wq0.eq(TjTeamSelectRecord::getCompId,compId); } wq0.ne(TjTeamSelectRecord::getDifference,0); List selectRecordList = selectRecordService.list(wq0); if(null !=selectRecordList && !selectRecordList.isEmpty()){ for(TjTeamSelectRecord selectRecord : selectRecordList){ 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()); TjCompPay compPay = compPayService.getOne(wq1); if (null !=compPay) { LambdaQueryWrapperwq=new LambdaQueryWrapper<>(); wq.eq(TjCompPayInfo::getTjCompPayId,compPay.getId()); selectRecord.setPayInfoList(payInfoService.list(wq)); selectRecord.setCopeWith(selectRecord.getDifference()); selectRecord.setDifference(selectRecord.getDifference()); selectRecord.setPayer(compService.getById(compPay.getCompId()).getContactPerson()); selectRecord.setSjCount(orderService.count(new LambdaQueryWrapper().eq(TjOrder::getTeamNo,compPay.getTeamNo()))); TjCompPayInfo payInfo = new TjCompPayInfo(); payInfo.setTjCompPayId(compPay.getId()); selectRecord.setPayInfo(payInfo); } } } 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()); TjCustomer customer = null; try { customer = customerService.getOne(new LambdaQueryWrapper().eq(TjCustomer::getCusIdcard, 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) { int sfwc = remarkService.panduaniswancheng(tjOrder.getTjNumber()); if (sfwc==0) { vo.setTjStatus("已完成"); vo.setTjTime(tjOrder.getCreateTime()); } else { vo.setTjStatus("在 检"); } yjwjzList.add(vo); } else { vo.setTjStatus("未 检"); wjList.add(vo); } }else { vo.setTjStatus("未 检"); 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); } } }