package com.ltkj.web.controller.system; import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DateUtil; import cn.hutool.extra.pinyin.PinyinUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.core.domain.entity.SysUser; 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.NewFlowingWaterVo; import com.ltkj.hosp.vodomain.TjCollectFeesVo; import com.ltkj.mall.domain.MallCheckLog; import com.ltkj.mall.domain.MallOrder; import com.ltkj.mall.mallOrderUtils.TjConstants; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @Company: 西安路泰科技有限公司 * @Author: zjh * @Date: 2023/10/12 08:42 */ @RestController @RequestMapping("/hosp/new/water") @Api(tags = "PC端 体检 新 登记收费功能接口") public class TjNewFlowingWaterController { @Resource private ITjFlowingWaterService flowingWaterService; @Resource private ITjOrderService orderService; @Resource private ITjOrderDetailService detailService; @Resource private ITjTollCollectorService collectorService; @Resource private ITjTollCollectorDetailService collectorDetailService; @Resource private ITjCustomerService customerService; @Resource private ITjProjectService projectService; @Resource private ITjChargingStandardService chargingStandardService; @GetMapping("/getFlowingWaterList") @ApiOperation(value = "获取体检收费记录接口") public AjaxResult getFlowingWaterList(@RequestParam(required = false) @ApiParam(value = "体检号") String phone, @RequestParam(required = false) @ApiParam(value = "体检人姓名") String name, @RequestParam(defaultValue = "1") @ApiParam(value = "收费1 退费2") Long type) { List waterList =null; List collect =null; TjCustomer one =null; LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); if(null !=phone || null !=name){ LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); if(null !=name){ wq.like(TjCustomer::getCusName,name); } if (null != phone) { wq.eq(TjCustomer::getCusPhone, phone); } one = customerService.getOne(wq); } if (null != one) { collect = orderService.getOrderList(one.getCusId()).stream().map(TjOrder::getOrderId).collect(Collectors.toList()); } if(null !=collect){ wq1.in(TjFlowingWater::getOrderId, collect); } wq1.between(TjFlowingWater::getCreateTime,DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date())); wq1.eq(TjFlowingWater::getPayStasus,type); waterList = flowingWaterService.list(wq1); if(null !=waterList && waterList.size()>0){ for (TjFlowingWater flowingWater : waterList) { TjOrder order = orderService.getById(flowingWater.getOrderId()); if (null != order) { if (null != customerService.getById(order.getUserId())) { flowingWater.setCustomer(customerService.getById(order.getUserId())); } } } } return AjaxResult.success(waterList); } @GetMapping("/getTjPrice") @ApiOperation(value = "获取体检费用") public AjaxResult getTjPrice() { TjProject project = projectService.getOne(new LambdaQueryWrapper().eq(TjProject::getProName, "体检费") .eq(TjProject::getProId, 1712272744924446722L)); if (null != project) { return AjaxResult.success(project.getProPrice()); } return AjaxResult.error("没找到对应项目 请自定义费用"); } /** * 体检签到登记接口 */ @PostMapping("/addOrderAndDetail") @ApiOperation(value = "体检收费接口") @Transactional public AjaxResult addOrderAndDetail(@RequestBody NewFlowingWaterVo vo) { if (!MatchUtils.isMobileNO(vo.getPhone())) { return AjaxResult.error("手机号格式有误!"); } // Long cusId = null; // LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); // wq.eq(TjCustomer::getCusName, vo.getName()); // wq.eq(TjCustomer::getCusPhone, vo.getPhone()); // TjCustomer one = customerService.getOne(wq); // if (null == one) { TjCustomer customer = new TjCustomer(); if(null !=vo.getPhone())customer.setCusPhone(vo.getPhone()); customer.setCusName(vo.getName()); customer.setCusBrithday(new Date()); customer.setCusSex(0L); customerService.save(customer); // cusId = customer.getCusId(); // } else { // cusId = one.getCusId(); // } TjOrder tjOrder = new TjOrder(); tjOrder.setUserId(customer.getCusId()); tjOrder.setTjType("2"); //生成体检号 String tjNumber = (SecurityUtils.getUsername() + new SimpleDateFormat("yyMMddHHmmss").format(new Date())); tjOrder.setTjNumber(tjNumber); tjOrder.setFirmId("0"); tjOrder.setStatus(TjConstants.TJ_BEGIN); if (orderService.save(tjOrder)) { LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjFlowingWater::getOrderId,tjOrder.getOrderId()); wq.eq(TjFlowingWater::getPayStasus,1L); if(null !=flowingWaterService.getOne(wq)){ return AjaxResult.error("该订单已缴费!"); } TjOrderDetail detail = new TjOrderDetail(); detail.setOrderId(tjOrder.getOrderId()); detail.setProId(1712272744924446722L); detail.setProType("0"); detailService.save(detail); TjFlowingWater tjFlowingWater = new TjFlowingWater(); tjFlowingWater.setOrderId(tjOrder.getOrderId()); tjFlowingWater.setPayType(Long.valueOf(vo.getType())); tjFlowingWater.setCopeWith(vo.getYs()); tjFlowingWater.setPaidIn(vo.getSs()); tjFlowingWater.setDiscount(vo.getZk()); tjFlowingWater.setPayStasus(1L); Date date1 = new Date(System.currentTimeMillis()); String s1 = SecurityUtils.getUsername() + new SimpleDateFormat("yyMMddHHmmssSSS").format(date1); tjFlowingWater.setWaterId(s1); tjFlowingWater.setRemarks("已收费"); if (flowingWaterService.save(tjFlowingWater)) { tjOrder.setTjSerialNumber(String.valueOf(tjFlowingWater.getTjSerialNumber())); orderService.updateById(tjOrder); detail.setFlowingWaterId(tjFlowingWater.getWaterId()); detailService.updateById(detail); TjChargingStandard tjChargingStandard = new TjChargingStandard(); tjChargingStandard.setTjNum(tjOrder.getTjNumber()); tjChargingStandard.setProId(1712272744924446722L); tjChargingStandard.setPrice(vo.getYs().divide(BigDecimal.valueOf(Long.parseLong(vo.getNumber())))); tjChargingStandard.setProName("体检项目"); tjChargingStandard.setCount(Long.valueOf(vo.getNumber())); chargingStandardService.save(tjChargingStandard); } return AjaxResult.success(); } return AjaxResult.error(); } /** * 体检退费接口 */ @PostMapping("/tjRefund") @ApiOperation(value = "体检退费按钮接口") public AjaxResult tjRefund(@RequestBody @ApiParam(value = "流水对象") TjFlowingWater water) { TjFlowingWater flowingWater = flowingWaterService.getOne(new LambdaQueryWrapper().eq(TjFlowingWater::getWaterId, water.getWaterId())); LambdaQueryWrapper wq = new LambdaQueryWrapper<>(); wq.eq(TjFlowingWater::getOrderId,flowingWater.getOrderId()); wq.eq(TjFlowingWater::getPayStasus,2L); if(null !=flowingWaterService.getOne(wq)){ return AjaxResult.error("该订单已退费 不可重复退费!"); } TjFlowingWater tjFlowingWater=new TjFlowingWater(); tjFlowingWater.setOrderId(flowingWater.getOrderId()); tjFlowingWater.setWaterId(SecurityUtils.getUsername() + DateUtil.format(new Date(), "yyMMddHHmmssSSS")); tjFlowingWater.setTollCollectorId(String.valueOf(SecurityUtils.getLoginUser().getUserId())); tjFlowingWater.setRefundPersonId(String.valueOf(SecurityUtils.getLoginUser().getUserId())); tjFlowingWater.setRefundTime(new Date()); tjFlowingWater.setRefundPrice(flowingWater.getPaidIn()); tjFlowingWater.setIsAddition("N"); tjFlowingWater.setPayStasus(2L); tjFlowingWater.setPaidIn(BigDecimal.valueOf(0.00).subtract(tjFlowingWater.getRefundPrice())); tjFlowingWater.setCopeWith(flowingWater.getCopeWith()); tjFlowingWater.setRemarks("已退费"); if (flowingWaterService.save(tjFlowingWater)) { flowingWater.setRemarks("已退费"); flowingWaterService.updateById(flowingWater); TjOrder order = orderService.getById(tjFlowingWater.getOrderId()); LambdaQueryWrapper wq1 = new LambdaQueryWrapper<>(); wq1.eq(TjOrderDetail::getOrderId, tjFlowingWater.getOrderId()); wq1.isNotNull(TjOrderDetail::getFlowingWaterId); List list = detailService.list(wq1); if (null != list && list.size() > 0) { for (TjOrderDetail orderDetail : list) { orderDetail.setFlowingWaterId(null); detailService.updateById(orderDetail); LambdaQueryWrapper wqq = new LambdaQueryWrapper<>(); wqq.eq(TjChargingStandard::getTjNum, order.getTjNumber()); wqq.eq(TjChargingStandard::getProId, orderDetail.getProId()); chargingStandardService.remove(wqq); } } return AjaxResult.success("退费成功"); } return AjaxResult.error(); } }