ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderController.java
@@ -152,12 +152,14 @@ "}"; String authorization = getAuthorization(body); System.err.println("支付请求"+body); org.apache.http.HttpResponse response = post(LakalaConfig.getServerUrl() + apiPath, body, authorization); if (response.getStatusLine().getStatusCode() != 200) { return R.fail(500, "请求失败,statusCode " + response.getStatusLine() + IOUtils.toString(response.getEntity().getContent(), ENCODING)); } String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING); System.err.println("支付结果"+responseStr); erpProcurement.setPayNumber(outTradeNo); @@ -228,6 +230,7 @@ map.put("merchant_no", erpProcurement.getMerchantNo()); map.put("log_no", erpProcurement.getPayTransactionId()); map.put("log_date", DateUtils.dateTime()); map.put("cal_type", "0"); map.put("notify_url", "http://221.182.45.100:8089/t-sys-order/messageSeparateHandle"); String time = DateUtils.dateTimeNow(); @@ -246,22 +249,10 @@ // 平台应得分账 BigDecimal payMoney = erpProcurement.getMoney(); ArrayList<HashMap<String, Object>> objects = new ArrayList<>(); // 根据供应商id分组 Map<String, List<TErpProcurementGoods>> collect = list.stream().collect(Collectors.groupingBy(TErpProcurementGoods::getSupplierId)); // for (Map.Entry<String, List<TErpProcurementGoods>> entry : collect.entrySet()) { // HashMap<String, Object> map1 = new HashMap<>(); // String supplierId = entry.getKey(); // TCrmSupplier supplier = crmSupplierService.getById(supplierId); // List<TErpProcurementGoods> value = entry.getValue(); // BigDecimal reduce = value.stream().map(TErpProcurementGoods::getSupplierMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // payMoney = payMoney.subtract(reduce); // map1.put("recv_no", supplier.getRecvMerchantNo()); // map1.put("separate_value", reduce.multiply(BigDecimal.valueOf(100)).intValue() + ""); //// objects.add(map1); // } HashMap<String, Object> map1 = new HashMap<>(); //TODO hzt map1.put("recv_no", "SR2024000006413"); map1.put("recv_no", "SR2024021195402"); // 手续费 BigDecimal bigDecimal = allMoney.multiply(new BigDecimal("0.038")).setScale(2, RoundingMode.HALF_UP); payMoney = payMoney.subtract(bigDecimal); @@ -270,6 +261,25 @@ if(payMoney.doubleValue()>0){ objects.add(map1); } // 根据供应商id分组 Map<String, List<TErpProcurementGoods>> collect = list.stream().collect(Collectors.groupingBy(TErpProcurementGoods::getSupplierId)); for (Map.Entry<String, List<TErpProcurementGoods>> entry : collect.entrySet()) { HashMap<String, Object> map2 = new HashMap<>(); String supplierId = entry.getKey(); TCrmSupplier supplier = crmSupplierService.getById(supplierId); // List<TErpProcurementGoods> value = entry.getValue(); // BigDecimal reduce = value.stream().map(TErpProcurementGoods::getSupplierMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // payMoney = payMoney.subtract(reduce); map2.put("recv_merchant_no", supplier.getRecvMerchantNo()); int count = allMoney.subtract(payMoney).multiply(BigDecimal.valueOf(100)).intValue(); if(count>0){ map2.put("separate_value", count+ ""); objects.add(map2); } } erpProcurement.setMoney(payMoney); erpProcurement.setOutSeparateNo(outTradeNo); erpProcurementService.updateById(erpProcurement); @@ -323,7 +333,7 @@ JSONArray jsonArray = JSONArray.parseArray(detail_datas.toString()); if("SEPARATE".equals(cmd_type.toString())){ TErpProcurement erpProcurement = erpProcurementService.getOne(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getOutSeparateNo, o.toString())); if ( erpProcurement!=null && "SUCCESS".equals(status)) { if ( erpProcurement!=null && "SUCCESS".equals(status) && erpProcurement.getRefundStatus()!=1) { erpProcurement.setRefundStatus(1); erpProcurementService.updateById(erpProcurement); // 修改分账状态 @@ -340,7 +350,7 @@ } }else if("FALLBACK".equals(cmd_type.toString())){ TErpProcurement erpProcurement = erpProcurementService.getOne(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getRefundOutSeparateNo, o.toString())); if ( erpProcurement!=null && "SUCCESS".equals(status) && erpProcurement.getRefundStatus()==1) { if ( erpProcurement!=null && "SUCCESS".equals(status) && erpProcurement.getRefundStatus()!=2) { erpProcurement.setRefundStatus(2); erpProcurementService.updateById(erpProcurement); List<TErpProcurementGoods> list1 = erpProcurementGoodsService.list(new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, erpProcurement.getId())); @@ -480,7 +490,7 @@ // } HashMap<String, Object> map1 = new HashMap<>(); // TODO hzt map1.put("recv_no", "SR2024000006413"); map1.put("recv_no", "SR2024021195402"); map1.put("amt", erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + ""); objects.add(map1); map.put("total_amt",erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + ""); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysOrderController.java
@@ -16,12 +16,14 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.TSysOrderDto; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TErpGoodsWarehouseQuery; import com.ruoyi.system.query.TSysAppUserQuery; import com.ruoyi.system.query.TSysEducationalInfoQuery; import com.ruoyi.system.query.TSysOrderQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.TSysOrderDetailVo; import com.ruoyi.system.vo.TSysOrderPageVo; import com.ruoyi.web.core.config.LakalaConfig; import io.swagger.annotations.Api; @@ -80,15 +82,17 @@ private final TokenService tokenService; private final TCrmClinicService crmClinicService; private final TSysAppUserService sysAppUserService; private final TSysOrderGoodsService sysOrderGoodsService; @Autowired public TSysOrderController(TokenService tokenService, TSysOrderService sysOrderService, TCrmClinicService crmClinicService, TSysAppUserService sysAppUserService) { public TSysOrderController(TokenService tokenService, TSysOrderService sysOrderService, TCrmClinicService crmClinicService, TSysAppUserService sysAppUserService, TSysOrderGoodsService sysOrderGoodsService) { this.sysOrderService = sysOrderService; this.tokenService = tokenService; this.crmClinicService = crmClinicService; this.sysAppUserService = sysAppUserService; this.sysOrderGoodsService = sysOrderGoodsService; } @@ -127,5 +131,44 @@ return R.ok(list); } @ApiOperation(value = "诊所患者诊疗--确认添加") @PostMapping(value = "/add") public R<String> add(@RequestBody @Valid TSysOrderDto dto) { SysUser user = tokenService.getLoginUser().getUser(); Integer roleType = user.getRoleType(); if(roleType == 5){ // 诊所 TCrmClinic crmClinic = crmClinicService.getOne(Wrappers.lambdaQuery(TCrmClinic.class) .eq(TCrmClinic::getUserId, user.getUserId()) .last("LIMIT 1")); sysOrderService.add(dto,crmClinic); return R.ok("添加成功"); } return R.fail("添加失败"); } @ApiOperation(value = "诊所患者诊疗--详情") @GetMapping(value = "/detail/{id}") public R<TSysOrderDetailVo> detail(@PathVariable String id) { TSysOrder tSysOrder = sysOrderService.getById(id); TSysOrderDetailVo detail = new TSysOrderDetailVo(); detail.setId(tSysOrder.getId()); String appUserId = tSysOrder.getAppUserId(); TSysAppUser appUser = sysAppUserService.getById(appUserId); detail.setUserName(appUser.getNickName()); detail.setCheckTime(tSysOrder.getCheckTime()); detail.setTotalMoney(tSysOrder.getTotalMoney()); List<TSysOrderGoods> list = sysOrderGoodsService.list(new LambdaQueryWrapper<TSysOrderGoods>().eq(TSysOrderGoods::getOrderId, id)); detail.setList(list); return R.ok(detail); } } ruoyi-system/src/main/java/com/ruoyi/system/dto/TSysOrderDto.java
New file @@ -0,0 +1,53 @@ package com.ruoyi.system.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * <p> * 订单管理 * </p> * * @author xiaochen * @since 2025-08-20 */ @Data @ApiModel("患者诊疗 确认添加Dto") public class TSysOrderDto { @ApiModelProperty(value = "用户id") @NotBlank(message = "用户id不能为空") private String appUserId; @ApiModelProperty(value = "检测信息id") private String inspectionId; @ApiModelProperty(value = "订单总价") @NotNull(message = "订单总价不能为空") private BigDecimal totalMoney; @ApiModelProperty(value = "检查时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime checkTime; @ApiModelProperty(value = "二级参数") private List<TSysOrderNextDto> dtoList; } ruoyi-system/src/main/java/com/ruoyi/system/dto/TSysOrderNextDto.java
New file @@ -0,0 +1,42 @@ package com.ruoyi.system.dto; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; /** * <p> * 订单管理 * </p> * * @author xiaochen * @since 2025-08-20 */ @Data @ApiModel("患者诊疗 确认添加二级Dto") public class TSysOrderNextDto { @ApiModelProperty("批次id") @NotBlank(message = "批次id不能为空") private String batchId; @ApiModelProperty("订单数量") @NotNull(message = "订单数量不能为空") private Integer num; @ApiModelProperty("售价") @NotNull(message = "售价不能为空") private BigDecimal saleAmount; @ApiModelProperty("剩余数量") @NotNull(message = "剩余数量不能为空") private Integer remainingQuantity; } ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOrderGoods.java
@@ -58,4 +58,16 @@ @TableField("sale_amount") private BigDecimal saleAmount; @ApiModelProperty(value = "批次id") @TableField("batch_id") private String batchId; @ApiModelProperty(value = "批次号") @TableField("batch_number") private String batchNumber; @ApiModelProperty(value = "剩于数量") @TableField("remaining_quantity") private Integer remainingQuantity; } ruoyi-system/src/main/java/com/ruoyi/system/service/TSysOrderService.java
@@ -2,11 +2,14 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.dto.TSysOrderDto; import com.ruoyi.system.model.TCrmClinic; import com.ruoyi.system.model.TSysOrder; import com.ruoyi.system.query.TSysOrderQuery; import com.ruoyi.system.vo.TSysOrderPageVo; import com.ruoyi.system.vo.TSysOrderVO; import javax.validation.Valid; import java.util.List; /** @@ -28,4 +31,7 @@ PageInfo<TSysOrderPageVo> pageList(TSysOrderQuery query); void add(TSysOrderDto dto, TCrmClinic crmClinic); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -194,6 +194,9 @@ tErpProcurementVo.setStatus(tErpProcurement.getStatus()); tErpProcurementVo.setSendTime(tErpProcurement.getSendTime()); tErpProcurementVo.setMoney(tErpProcurement.getMoney()); tErpProcurementVo.setTotalPrice(tErpProcurement.getPayMoney()); List<TErpProcurementGoods> tErpProcurementGoods = erpProcurementGoodsMapper.selectList (new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, id) .like(goodsName != null && !goodsName.isEmpty(), TErpProcurementGoods::getGoodsName, goodsName) @@ -210,6 +213,7 @@ tErpProcurementDetailNextVo.setNum(tErpProcurementGood.getPurchaseCount()); tErpProcurementDetailNextVo.setTotalPrice(tErpProcurementGood.getTotalPrice()); tErpProcurementDetailNextVo.setQuasiNumber(tErpProcurementGood.getQuasiNumber()); tErpProcurementDetailNextVo.setPurchasePrice(tErpProcurementGood.getPurchasePrice()); List<TSysCommission> tSysCommissions = sysCommissionMapper.selectList(new LambdaQueryWrapper<TSysCommission>().eq(TSysCommission::getTErpProcurementGoodsId, tErpProcurementGood.getId())); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysOrderServiceImpl.java
@@ -1,20 +1,27 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.mapper.TSysOrderGoodsMapper; import com.ruoyi.system.mapper.TSysOrderMapper; import com.ruoyi.system.model.TSysOrder; import com.ruoyi.system.model.TSysOrderGoods; import com.ruoyi.system.dto.TSysOrderDto; import com.ruoyi.system.dto.TSysOrderNextDto; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TSysOrderQuery; import com.ruoyi.system.service.TCrmClinicService; import com.ruoyi.system.service.TErpClinicOutboundService; import com.ruoyi.system.service.TSysOrderService; import com.ruoyi.system.vo.TSysOrderPageVo; import com.ruoyi.system.vo.TSysOrderVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -31,6 +38,24 @@ @Autowired private TSysOrderGoodsMapper sysOrderGoodsMapper; @Resource private TErpClinicWarehousingBatchMapper erpClinicWarehousingBatchMapper; @Resource private TErpClinicOutboundGoodsMapper erpClinicOutboundGoodsMapper; @Resource private TErpGoodsMapper erpGoodsMapper; @Resource private TErpGoodsTypeMapper erpGoodsTypeMapper; @Resource private TErpGoodsUnitMapper erpGoodsUnitMapper; @Resource private TErpClinicOutboundMapper erpClinicOutboundMapper; @Override public List<TSysOrderVO> queryListByAppUserId(String id) { @@ -61,4 +86,74 @@ page.setRecords(sysOrderPageVOS); return page; } @Override @Transactional(rollbackFor = Exception.class) public void add(TSysOrderDto dto, TCrmClinic crmClinic) { // 判断库存够不够 添加订单 添加订单二级 出库记录 List<TSysOrderNextDto> dtoList = dto.getDtoList(); ArrayList<TSysOrderGoods> tSysOrderGoods = new ArrayList<>(); ArrayList<TErpClinicOutboundGoods> erpClinicOutboundGoods = new ArrayList<>(); for (TSysOrderNextDto sysOrderNextDto : dtoList) { TErpClinicWarehousingBatch tErpClinicWarehousingBatch = erpClinicWarehousingBatchMapper.selectById(sysOrderNextDto.getBatchId()); // 找出这个批次出库多少 List<TErpClinicOutboundGoods> tErpClinicOutboundGoods = erpClinicOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpClinicOutboundGoods>().eq(TErpClinicOutboundGoods::getWarehousingBatchId, sysOrderNextDto.getBatchId())); int count = tErpClinicOutboundGoods.stream().mapToInt(TErpClinicOutboundGoods::getOutboundCount).sum(); if(tErpClinicWarehousingBatch.getPurchaseCount() < count + sysOrderNextDto.getNum()){ throw new RuntimeException("库存不足"); } TErpGoods goods = erpGoodsMapper.selectById(tErpClinicWarehousingBatch.getGoodsId()); TSysOrderGoods tSysOrderGoods1 = new TSysOrderGoods(); tSysOrderGoods1.setGoodsName(goods.getGoodsName()); TErpGoodsType tErpGoodsType = erpGoodsTypeMapper.selectById(goods.getTypeId()); tSysOrderGoods1.setTypeName(tErpGoodsType.getTypeName()); tSysOrderGoods1.setQuasiNumber(goods.getQuasiNumber()); TErpGoodsUnit tErpGoodsUnit = erpGoodsUnitMapper.selectById(goods.getPackingUnitId()); tSysOrderGoods1.setGoodsUnit(tErpGoodsUnit.getUnitName()); tSysOrderGoods1.setSaleCount(sysOrderNextDto.getNum()); tSysOrderGoods1.setSaleAmount(goods.getSalesAmount()); tSysOrderGoods1.setBatchId(tErpClinicWarehousingBatch.getId()); tSysOrderGoods1.setBatchNumber(tErpClinicWarehousingBatch.getBatchNumber()); tSysOrderGoods1.setRemainingQuantity(sysOrderNextDto.getRemainingQuantity()); tSysOrderGoods.add(tSysOrderGoods1); TErpClinicOutboundGoods tErpClinicOutboundGoods1 = new TErpClinicOutboundGoods(); tErpClinicOutboundGoods1.setWarehousingId(tErpClinicWarehousingBatch.getWarehousingId()); tErpClinicOutboundGoods1.setWarehousingBatchId(tErpClinicWarehousingBatch.getId()); tErpClinicOutboundGoods1.setOutboundCount(sysOrderNextDto.getNum()); tErpClinicOutboundGoods1.setGoodsId(goods.getId()); tErpClinicOutboundGoods1.setTotalPrice(sysOrderNextDto.getSaleAmount().multiply(BigDecimal.valueOf(sysOrderNextDto.getNum()))); erpClinicOutboundGoods.add(tErpClinicOutboundGoods1); } TSysOrder tSysOrder = new TSysOrder(); tSysOrder.setAppUserId(dto.getAppUserId()); tSysOrder.setClinicId(crmClinic.getId()); tSysOrder.setInspectionId(dto.getInspectionId()); tSysOrder.setTotalMoney(dto.getTotalMoney()); tSysOrder.setCheckTime(dto.getCheckTime()); tSysOrder.setOrderNumber(System.currentTimeMillis() + ""); this.save(tSysOrder); for (TSysOrderGoods tSysOrderGood : tSysOrderGoods) { tSysOrderGood.setOrderId(tSysOrder.getId()); sysOrderGoodsMapper.insert(tSysOrderGood); } TErpClinicOutbound tErpClinicOutbound = new TErpClinicOutbound(); tErpClinicOutbound.setClinicId(crmClinic.getId()); tErpClinicOutbound.setOutboundType(7); tErpClinicOutbound.setOrderNumber(tSysOrder.getOrderNumber()); tErpClinicOutbound.setTotalMoney(dto.getTotalMoney()); tErpClinicOutbound.setOutboundNumber("G"+System.currentTimeMillis()); erpClinicOutboundMapper.insert(tErpClinicOutbound); for (TErpClinicOutboundGoods erpClinicOutboundGood : erpClinicOutboundGoods) { erpClinicOutboundGood.setOutboundId(tErpClinicOutbound.getId()); erpClinicOutboundGoodsMapper.insert(erpClinicOutboundGood); } } } ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailNextVo.java
@@ -34,6 +34,9 @@ @ApiModelProperty(value = "国药准字号") private String quasiNumber; @ApiModelProperty(value = "采购价") private BigDecimal purchasePrice; ruoyi-system/src/main/java/com/ruoyi/system/vo/TErpProcurementDetailVo.java
@@ -41,6 +41,12 @@ @ApiModelProperty(value = "状态 1=草稿 2=待支付 3=待发货 4=已发货 5=已入库 6=已取消") private Integer status; @ApiModelProperty(value = "总金额") private BigDecimal totalPrice=BigDecimal.ZERO; @ApiModelProperty(value = "平台佣金") private BigDecimal money=BigDecimal.ZERO; @ApiModelProperty(value = "采购单详情二级") private List<TErpProcurementDetailNextVo> list; } ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysOrderDetailVo.java
New file @@ -0,0 +1,30 @@ package com.ruoyi.system.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.TSysOrderGoods; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Data @ApiModel("患者诊疗详情Vo") public class TSysOrderDetailVo { private String id; private String userName; @ApiModelProperty(value = "检查时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime checkTime; @ApiModelProperty(value = "订单总价") private BigDecimal totalMoney; @ApiModelProperty(value = "二级参数") private List<TSysOrderGoods> list; }