package com.ruoyi.web.controller.system; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.utils.civilAviation.ServiceOrderUtil; import com.ruoyi.system.domain.SysClientApp; import com.ruoyi.system.service.ISysClientAppService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.domain.TbOrders; import com.ruoyi.system.service.ITbOrdersService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; /** * ordersController * * @author wzp * @date 2025-05-01 */ @Api("订单管理") @RestController @RequestMapping("/system/orders") public class TbOrdersController extends BaseController { @Autowired private ITbOrdersService tbOrdersService; @Autowired private ISysClientAppService clientAppService; @ApiOperation("查询订单列表") @PreAuthorize("@ss.hasPermi('system:orders:list')") @GetMapping("/list") public TableDataInfo list(TbOrders tbOrders) { startPage(); List list = tbOrdersService.selectTbOrdersList(tbOrders); return getDataTable(list); } @ApiOperation("导出订单列表") @PreAuthorize("@ss.hasPermi('system:orders:export')") @Log(title = "orders", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, TbOrders tbOrders) { List list = tbOrdersService.selectTbOrdersList(tbOrders); ExcelUtil util = new ExcelUtil(TbOrders.class); util.exportExcel(response, list, "orders数据"); } @ApiOperation("获取订单详细信息") @ApiImplicitParam(name = "OrderID", value = "订单ID", required = true, dataType = "Long", paramType = "path") @PreAuthorize("@ss.hasPermi('system:orders:query')") @GetMapping(value = "/{OrderID}") public AjaxResult getInfo(@PathVariable("OrderID") Long OrderID) { return success(tbOrdersService.selectTbOrdersByOrderID(OrderID)); } /** * 提供外部接口可以调用 * @param tbOrders * @return */ @Anonymous(needSign = true) // @Anonymous // @Log(title = "orders", businessType = BusinessType.INSERT) @ApiOperation("新增订单") @ApiImplicitParams({ @ApiImplicitParam(name = "orderID", value = "订单ID", dataType = "Long"), @ApiImplicitParam(name = "typeCode", value = "订单类型", dataType = "Integer"), @ApiImplicitParam(name = "linkTel", value = "联系电话", dataType = "String"), @ApiImplicitParam(name = "linkPerson", value = "联系人", dataType = "String"), @ApiImplicitParam(name = "bookingDate", value = "预约时间", dataType = "Date"), @ApiImplicitParam(name = "patientName", value = "患者姓名", dataType = "String"), @ApiImplicitParam(name = "age", value = "年龄", dataType = "Integer"), @ApiImplicitParam(name = "sex", value = "性别", dataType = "Integer"), @ApiImplicitParam(name = "localAddress", value = "转出医院", dataType = "String"), @ApiImplicitParam(name = "sendAddress", value = "转入医院", dataType = "String"), @ApiImplicitParam(name = "complaint", value = "诊断信息", dataType = "String"), @ApiImplicitParam(name = "remark", value = "备注", dataType = "String"), @ApiImplicitParam(name = "bookingPrice", value = "报价", dataType = "BigDecimal") }) @PostMapping("/add") public AjaxResult add(@RequestBody TbOrders tbOrders,String appId) { try { if (tbOrders == null || tbOrders.getOrderID() == null) { return AjaxResult.error("传输数据为空!"); } if(appId ==null|| Objects.equals(appId, "")) { return AjaxResult.error("appid不能为空!"); } tbOrders.setAppId(appId); tbOrders.setCreateTime(new Date()); try { tbOrdersService.insertTbOrders(tbOrders); } catch (Exception ex) { return AjaxResult.error("订单号不能重复"); } SysClientApp scApp = clientAppService.selectSysClientAppByAppKey(tbOrders.getAppId()); ServiceOrderAppVo model = new ServiceOrderAppVo(); model.setMethod("ServiceOrder_APP"); // 设置接口名称 model.setAppId(scApp.getMinAppId()); // 设置商户 APPID model.setUserID(scApp.getUserId()); //设置订单类型 if(tbOrders.getTypeCode() == 0) { model.setOrdType(1); } else { model.setOrdType(tbOrders.getTypeCode().intValue()); } model.setCoPhone(tbOrders.getLinkTel()); // 客户联系电话 model.setCoName(tbOrders.getLinkPerson()); // 客户姓名 // model.setCoTies("家属"); // 随机设置客户联系人与患者关系 // 设置预约时间为一天后 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); model.setApptDate(sdf.format(tbOrders.getBookingDate())); // 格式化预约运送时间 if(tbOrders.getPatientName() != null && !tbOrders.getPatientName().equals("")) { model.setPtName(tbOrders.getPatientName()); // 患者姓名 } else { model.setPtName("患者"); // 随机生成患者姓名 } model.setPtAge(tbOrders.getAge()); // 随机生成患者年龄 model.setPtSex(tbOrders.getSex() == 1 ? "男" : "女"); // 随机生成患者性别 // model.setPtNat("中国"); // 设置患者国籍 model.setOutHosp(tbOrders.getLocalAddress()); // 设置转出医院 model.setInHosp(tbOrders.getSendAddress()); // 设置转入医院 // model.setPtServices("科室" + (int) (Math.random() * 10)); // 随机设置患者所在科室 //如果诊断信息为空,则不设置诊断信息 if(tbOrders.getComplaint() != null && !tbOrders.getComplaint().equals("")) { model.setPtDiagnosis(tbOrders.getComplaint()); // 设置诊断信息 } //预估距离 if(tbOrders.getBookingKM()!=null) { model.setTraDistance(tbOrders.getBookingKM().toString()); } //如果备注信息为空,则不设置备注信息 if(tbOrders.getRemark() != null && !tbOrders.getRemark().equals("")) { model.setCondition(tbOrders.getRemark()); // 设置备注信息 } model.setPrice(tbOrders.getBookingPrice().doubleValue()); model.setOfferPrice(tbOrders.getBookingPrice().doubleValue()); // 生成报价 model.setReferrals(scApp.getReferrals()); // 设置推介人名称为机构名称 // model.setUnitRemarks("商户随机备注信息"); // 随机设置商户备注 model.setPayQRcodeURL(scApp.getPayUrl()); ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model,scApp.getMinAppSecret()); if (result.getResult() == 1) { tbOrders.setOrderID(tbOrders.getOrderID()); tbOrders.setServiceOrdID(result.getServiceOrdID()); tbOrders.setServiceOrdNo(result.getServiceOrdNo()); tbOrders.setThirdPartyResult(result.getResult()); tbOrders.setUpdateTime(new Date()); tbOrders.setOrderStatus(1); tbOrdersService.updateTbOrders(tbOrders); return AjaxResult.success(result); } else { return AjaxResult.error("提交失败"); } } catch (Exception e) { return AjaxResult.error("提交失败:"+e.getMessage()); } } @ApiOperation("重新发送订单") @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path") @PostMapping("/resend/{orderId}") public AjaxResult resendOrder(@PathVariable Long orderId) { TbOrders tbOrders = tbOrdersService.selectTbOrdersByOrderID(orderId); if (tbOrders == null) { return AjaxResult.error("订单不存在"); } if (tbOrders.getOrderStatus() == 2) { return AjaxResult.error("订单状态已取消"); } SysClientApp scApp = clientAppService.selectSysClientAppByAppKey(tbOrders.getAppId()); ServiceOrderAppVo model = new ServiceOrderAppVo(); model.setMethod("ServiceOrder_APP"); // 设置接口名称 model.setAppId(scApp.getMinAppId()); // 设置商户 APPID model.setUserID(scApp.getUserId()); model.setOrdType(tbOrders.getTypeCode().intValue()); model.setCoPhone(tbOrders.getLinkTel()); // 客户联系电话 if(tbOrders.getLinkPerson() != null && !tbOrders.getLinkPerson().equals("")) { model.setCoName(tbOrders.getLinkPerson()); // 客户姓名 } else { model.setCoName("联系人"); // 随机生成患者姓名 } // model.setCoTies("家属"); // 随机设置客户联系人与患者关系 // 设置预约时间为一天后 Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); model.setApptDate(sdf.format(tbOrders.getBookingDate())); // 格式化预约运送时间 if(tbOrders.getPatientName() != null && !tbOrders.getPatientName().equals("")) { model.setPtName(tbOrders.getPatientName()); // 患者姓名 } else { model.setPtName("患者"); // 随机生成患者姓名 } if(tbOrders.getAge()!=null && !tbOrders.getAge().equals("")) { model.setPtAge(tbOrders.getAge()); // 患者年龄 } else { model.setPtAge("年龄"); } model.setPtSex(tbOrders.getSex() == 1 ? "男" : "女"); // model.setPtNat("中国"); // 设置患者国籍 model.setOutHosp(tbOrders.getLocalAddress()); // 设置转出医院 model.setInHosp(tbOrders.getSendAddress()); // 设置转入医院 // model.setPtServices("科室" + (int) (Math.random() * 10)); // 随机设置患者所在科室 //如果诊断信息为空,则不设置诊断信息 if(tbOrders.getComplaint() != null && !tbOrders.getComplaint().equals("")) { model.setPtDiagnosis(tbOrders.getComplaint()); // 设置诊断信息 } //预估距离 if(tbOrders.getBookingKM()!=null) { model.setTraDistance(tbOrders.getBookingKM().toString()); } //如果备注信息为空,则不设置备注信息 if(tbOrders.getRemark() != null && !tbOrders.getRemark().equals("")) { model.setCondition(tbOrders.getRemark()); // 设置备注信息 } model.setOfferPrice(tbOrders.getBookingPrice().doubleValue()); // 生成报价 model.setPrice(tbOrders.getBookingPrice().doubleValue()); model.setReferrals(scApp.getReferrals()); // 设置推介人名称为机构名称 // model.setUnitRemarks("商户随机备注信息"); // 随机设置商户备注 model.setPayQRcodeURL(scApp.getPayUrl()); ServiceOrderAppResultVo result = ServiceOrderUtil.CreateServiceOrder(model,scApp.getMinAppSecret()); if (result.getResult() == 1) { tbOrders.setOrderID(tbOrders.getOrderID()); tbOrders.setServiceOrdID(result.getServiceOrdID()); tbOrders.setServiceOrdNo(result.getServiceOrdNo()); tbOrders.setThirdPartyResult(result.getResult()); tbOrders.setUpdateTime(new Date()); tbOrders.setOrderStatus(1); tbOrdersService.updateTbOrders(tbOrders); return AjaxResult.success(result); } else { return AjaxResult.error("提交失败"); } } @ApiOperation("取消订单") @ApiImplicitParams({ @ApiImplicitParam(name = "orderID", value = "订单ID", required = true, dataType = "Long"), @ApiImplicitParam(name = "thirdOrderNo", value = "第三方订单号", required = true, dataType = "String"), @ApiImplicitParam(name = "reason", value = "取消原因", required = true, dataType = "String") }) @Anonymous(needSign = true) @PostMapping("/cancelOrder") public AjaxResult cancelOrder(@RequestBody OrderCancelVo cancelVo,String appId) { try { if (cancelVo == null || cancelVo.getOrderID() == null || cancelVo.getThirdOrderNo() == null || cancelVo.getReason() == null) { return AjaxResult.error("必要参数不能为空!"); } SysClientApp scApp = clientAppService.selectSysClientAppByAppKey(appId); ServiceOrderDelVo model = new ServiceOrderDelVo(); model.setMethod("ServiceOrder_DEL"); // 设置接口名称 model.setAPPID(scApp.getMinAppId()); // 设置商户 APPID model.setServiceOrdID(cancelVo.getThirdOrderNo()); // 设置第三方订单号 model.setDELRemarks(cancelVo.getReason()); // 设置取消原因 logger.info("取消订单-{}",cancelVo.getThirdOrderNo()); ServiceOrderDelResultVo result = ServiceOrderUtil.CancelServiceOrder(model,scApp.getMinAppSecret()); if (result.getResult() == 1) { // 更新本地订单状态 TbOrders tbOrders = new TbOrders(); tbOrders.setOrderID(cancelVo.getOrderID()); tbOrders.setOrderStatus(2); // 2是取消 tbOrdersService.updateTbOrders(tbOrders); logger.info("订单取消成功!"); return AjaxResult.success(result); } else { return AjaxResult.error("取消订单失败",result); } } catch (Exception e) { return AjaxResult.error("取消订单失败:" + e.getMessage()); } } @ApiOperation("修改订单") @ApiImplicitParams({ @ApiImplicitParam(name = "orderID", value = "订单ID", required = true, dataType = "Long"), @ApiImplicitParam(name = "typeCode", value = "订单类型", dataType = "Integer"), @ApiImplicitParam(name = "linkTel", value = "联系电话", dataType = "String"), @ApiImplicitParam(name = "linkPerson", value = "联系人", dataType = "String"), @ApiImplicitParam(name = "bookingDate", value = "预约时间", dataType = "Date"), @ApiImplicitParam(name = "patientName", value = "患者姓名", dataType = "String"), @ApiImplicitParam(name = "age", value = "年龄", dataType = "Integer"), @ApiImplicitParam(name = "sex", value = "性别", dataType = "Integer"), @ApiImplicitParam(name = "localAddress", value = "转出医院", dataType = "String"), @ApiImplicitParam(name = "sendAddress", value = "转入医院", dataType = "String"), @ApiImplicitParam(name = "complaint", value = "诊断信息", dataType = "String"), @ApiImplicitParam(name = "remark", value = "备注", dataType = "String"), @ApiImplicitParam(name = "bookingPrice", value = "报价", dataType = "BigDecimal") }) @PreAuthorize("@ss.hasPermi('system:orders:edit')") @Log(title = "orders", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody TbOrders tbOrders) { return toAjax(tbOrdersService.updateTbOrders(tbOrders)); } @ApiOperation("删除订单") @ApiImplicitParam(name = "OrderIDs", value = "订单ID数组", required = true, dataType = "Long[]", paramType = "path") @PreAuthorize("@ss.hasPermi('system:orders:remove')") @Log(title = "orders", businessType = BusinessType.DELETE) @DeleteMapping("/{OrderIDs}") public AjaxResult remove(@PathVariable Long[] OrderIDs) { return toAjax(tbOrdersService.deleteTbOrdersByOrderIDs(OrderIDs)); } }