9 changed files with 367 additions and 1 deletions
@ -0,0 +1,27 @@ |
|||||
|
package com.yxt.yythmall.api.refundorder; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2024/3/28 15:03 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class RefundOrder { |
||||
|
private String id; |
||||
|
private String sid; |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date createTime; |
||||
|
private String state; |
||||
|
private String outTradeNo;//订单号
|
||||
|
private int source;//0
|
||||
|
private String name; |
||||
|
private String amount; |
||||
|
private String openId;//
|
||||
|
private String mainSid;//退款mainSid
|
||||
|
private String reason;//退款理由
|
||||
|
private String orderSid;//支付订单sid
|
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
package com.yxt.yythmall.api.refundorder; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2024/3/28 15:03 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class RefundOrderDto { |
||||
|
private String id; |
||||
|
private String sid; |
||||
|
private String createTime; |
||||
|
private String state; |
||||
|
private String outTradeNo; |
||||
|
private String outRefundNo; |
||||
|
private String source; |
||||
|
private String name; |
||||
|
private String amount; |
||||
|
private String openId; |
||||
|
private String mainSid; |
||||
|
private String reason; |
||||
|
private String refundTime; |
||||
|
private String orderSid; |
||||
|
|
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
package com.yxt.yythmall.api.refundorder; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2024/3/28 15:04 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class RefundOrderQuery { |
||||
|
private String name; |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
package com.yxt.yythmall.api.refundorder; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2024/3/28 15:03 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class RefundOrderVo { |
||||
|
private String id; |
||||
|
private String sid; |
||||
|
private String createTime; |
||||
|
private String state; |
||||
|
private String outTradeNo; |
||||
|
private String source; |
||||
|
private String name; |
||||
|
private String amount; |
||||
|
private String openId; |
||||
|
private String mainSid; |
||||
|
private String reason; |
||||
|
private String refundTime; |
||||
|
private String orderSid; |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package com.yxt.yythmall.biz.refundorder; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrder; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderVo; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
import org.apache.ibatis.annotations.Select; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/23 10:36 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface RefundOrderMapper extends BaseMapper<RefundOrder> { |
||||
|
IPage<RefundOrderVo> orderList(IPage<RefundOrder> page, @Param(Constants.WRAPPER) QueryWrapper<RefundOrder> qw); |
||||
|
RefundOrderVo getOrderDetails(@Param("sid")String sid); |
||||
|
//
|
||||
|
// @Select("SELECT " +
|
||||
|
// " ood.goodsName goodsName, " +
|
||||
|
// " ood.partNumber goodsNumber " +
|
||||
|
// "FROM ord_order oo " +
|
||||
|
// "LEFT JOIN ord_order_detail ood ON ood.orderSid=oo.sid " +
|
||||
|
// "WHERE oo.payStatus=4 AND oo.outTradeNo=#{tradeNo}")
|
||||
|
// List<RefundOrderGoodsItem> listGoodsInfoByOutTradeNo(@Param("tradeNo") String outTradeNo);
|
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.yxt.yythmall.biz.refundorder.RefundOrderMapper"> |
||||
|
<!-- <where> ${ew.sqlSegment} </where>--> |
||||
|
<!-- ${ew.customSqlSegment} --> |
||||
|
|
||||
|
<select id="orderList" resultType="com.yxt.yythmall.api.ordorder.OrdOrderVo"> |
||||
|
select |
||||
|
* |
||||
|
from refund_order |
||||
|
<where> |
||||
|
${ew.sqlSegment} |
||||
|
</where> |
||||
|
</select> |
||||
|
<select id="getOrderDetails" resultType="com.yxt.yythmall.api.ordorder.OrdOrderVo"> |
||||
|
select |
||||
|
* |
||||
|
from refund_order |
||||
|
where sid=#{sid} |
||||
|
</select> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,43 @@ |
|||||
|
package com.yxt.yythmall.biz.refundorder; |
||||
|
|
||||
|
import com.yxt.common.core.query.PagerQuery; |
||||
|
import com.yxt.common.core.result.ResultBean; |
||||
|
import com.yxt.common.core.vo.PagerVo; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderDto; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderQuery; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderVo; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/23 10:35 |
||||
|
*/ |
||||
|
@Api(tags = "退款 ") |
||||
|
@RestController |
||||
|
@RequestMapping("/refund") |
||||
|
public class RefundOrderRest { |
||||
|
@Autowired |
||||
|
RefundOrderService refundOrderService; |
||||
|
|
||||
|
|
||||
|
@PostMapping("/createOrder") |
||||
|
@ApiOperation(value = "创建订单") |
||||
|
public ResultBean createOrder(RefundOrderDto dto) { |
||||
|
return refundOrderService.createOrder(dto); |
||||
|
} |
||||
|
|
||||
|
@PostMapping("/refundBusiness") |
||||
|
@ApiOperation(value = "减库存") |
||||
|
public ResultBean refundBusiness(@RequestBody String mainSid) { |
||||
|
return refundOrderService.refundBusiness(mainSid); |
||||
|
} |
||||
|
@PostMapping("/isRefundBusiness") |
||||
|
@ApiOperation(value = "退款业务") |
||||
|
public ResultBean isRefundBusiness(@RequestBody String mainSid) { |
||||
|
return refundOrderService.isRefundBusiness(mainSid); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,176 @@ |
|||||
|
package com.yxt.yythmall.biz.refundorder; |
||||
|
|
||||
|
import cn.hutool.core.bean.BeanUtil; |
||||
|
import cn.hutool.core.date.DateUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.yxt.common.base.config.component.FileUploadComponent; |
||||
|
import com.yxt.common.base.service.MybatisBaseService; |
||||
|
import com.yxt.common.base.utils.PagerUtil; |
||||
|
import com.yxt.common.base.utils.StringUtils; |
||||
|
import com.yxt.common.core.query.PagerQuery; |
||||
|
import com.yxt.common.core.result.ResultBean; |
||||
|
import com.yxt.yythmall.api.lpkcustomer.LpkCustomerVo; |
||||
|
import com.yxt.yythmall.api.lpkgoods.LpkGoods; |
||||
|
import com.yxt.yythmall.api.ordorder.OrdOrder; |
||||
|
import com.yxt.yythmall.api.ordorder.OrdOrderVo; |
||||
|
import com.yxt.yythmall.api.ordorder.PayOrderVo; |
||||
|
import com.yxt.yythmall.api.ordorderdetails.OrdOrderDetail; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrder; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderDto; |
||||
|
import com.yxt.yythmall.api.refundorder.RefundOrderQuery; |
||||
|
import com.yxt.yythmall.api.vegetablecellar.VegetableCellar; |
||||
|
import com.yxt.yythmall.api.vegetablecellar.VegetableCellarDto; |
||||
|
import com.yxt.yythmall.api.vegetablecellar.vegeVo; |
||||
|
import com.yxt.yythmall.biz.appletgiftbag.AppletGiftBagService; |
||||
|
import com.yxt.yythmall.biz.lpkcustomer.LpkCustomerService; |
||||
|
import com.yxt.yythmall.biz.lpkgoods.LpkGoodsService; |
||||
|
import com.yxt.yythmall.biz.ordorder.OrdOrderMapper; |
||||
|
import com.yxt.yythmall.biz.ordorder.OrdOrderService; |
||||
|
import com.yxt.yythmall.biz.ordorderdetails.OrdOrderDetailMapper; |
||||
|
import com.yxt.yythmall.biz.ordorderdetails.OrdOrderDetailService; |
||||
|
import com.yxt.yythmall.biz.shoppingcart.ShoppingCartService; |
||||
|
import com.yxt.yythmall.biz.vegetablecellar.VegetableCellarService; |
||||
|
import com.yxt.yythmall.biz.wx.RequestMes; |
||||
|
import com.yxt.yythmall.biz.wx.WxConfig; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import java.text.DecimalFormat; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.*; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/23 10:36 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class RefundOrderService extends MybatisBaseService<RefundOrderMapper, RefundOrder> { |
||||
|
|
||||
|
// private static final String OrderUrl = "https://supervise.yxtsoft.com/lpkapi/empcardgift/generateTopEmpCard?mainSid=";
|
||||
|
// private static final String or = "https://supervise.yxtsoft.com/lpkapi/vegetablecellar/addGoods?mainSid=";
|
||||
|
|
||||
|
@Autowired |
||||
|
OrdOrderService ordOrderService; |
||||
|
@Autowired |
||||
|
OrdOrderDetailService ordOrderDetailService; |
||||
|
@Autowired |
||||
|
LpkGoodsService lpkGoodsService; |
||||
|
@Autowired |
||||
|
VegetableCellarService vegetableCellarService; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public ResultBean createOrder(RefundOrderDto dto) { |
||||
|
ResultBean rb=new ResultBean().fail(); |
||||
|
OrdOrder orderDetail = ordOrderService.getOne(new QueryWrapper<OrdOrder>().eq("sid",dto.getSid())); |
||||
|
Map<String, Object> sendBody=buildMessageBody(orderDetail,dto.getReason()); |
||||
|
ResponseEntity<ResultBean> postForEntity = new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/refund/createRefundOrder", sendBody, ResultBean.class); |
||||
|
ResultBean<RefundOrder> rb1 = postForEntity.getBody(); |
||||
|
LinkedHashMap rb2 = (LinkedHashMap) postForEntity.getBody().getData(); |
||||
|
if (!rb1.getCode().equals("200")) { |
||||
|
return rb1; |
||||
|
} |
||||
|
RefundOrder refundOrder=new RefundOrder(); |
||||
|
refundOrder.setOutTradeNo(rb2.get("outTradeNo").toString()); |
||||
|
refundOrder.setSource(orderDetail.getSource()); |
||||
|
refundOrder.setName(orderDetail.getName()); |
||||
|
refundOrder.setAmount(orderDetail.getTotalTee()); |
||||
|
refundOrder.setOpenId(orderDetail.getOpenId()); |
||||
|
refundOrder.setMainSid(rb2.get("mainSid").toString()); |
||||
|
refundOrder.setReason(dto.getReason()); |
||||
|
refundOrder.setOrderSid(orderDetail.getSid()); |
||||
|
refundOrder.setCreateTime(new Date()); |
||||
|
baseMapper.insert(refundOrder); |
||||
|
//该订单状态
|
||||
|
orderDetail.setPayStatus(5); |
||||
|
ordOrderService.updateById(orderDetail); |
||||
|
//减库存
|
||||
|
refundBusiness(orderDetail.getMainSid()); |
||||
|
ResponseEntity<ResultBean> refundResponse = new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/refund/reviewRefund?orderSid="+orderDetail.getSid(), sendBody, ResultBean.class); |
||||
|
|
||||
|
|
||||
|
return rb.success().setData(1); |
||||
|
} |
||||
|
|
||||
|
public ResultBean refundBusiness(String mainSid) { |
||||
|
ResultBean rb = new ResultBean().fail(); |
||||
|
OrdOrder order=ordOrderService.getOne(new QueryWrapper<OrdOrder>().eq("mainSid",mainSid)); |
||||
|
List<OrdOrderDetail> detailList=ordOrderDetailService.list(new QueryWrapper<OrdOrderDetail>().eq("orderSid",order.getSid())); |
||||
|
for(OrdOrderDetail detail:detailList){ |
||||
|
LpkGoods cl=lpkGoodsService.getOne(new QueryWrapper<LpkGoods>().eq("sid",detail.getGoodsSid())); |
||||
|
VegetableCellar vegetableCellar=vegetableCellarService.getOne(new QueryWrapper<VegetableCellar>().eq("customerSid",order.getUserSid()) |
||||
|
.eq("goodsSid",detail.getGoodsSid()).eq("affiliation",cl.getBrandId())); |
||||
|
if(vegetableCellar.getGoodsNumber().equals(String.valueOf(detail.getPartNumber()))){ |
||||
|
vegetableCellar.setGoodsNumber(String.valueOf(Double.valueOf(vegetableCellar.getGoodsNumber())-Double.valueOf(detail.getPartNumber()))); |
||||
|
vegetableCellarService.updateById(vegetableCellar); |
||||
|
} |
||||
|
} |
||||
|
return rb.success(); |
||||
|
} |
||||
|
public ResultBean isRefundBusiness(String mainSid) { |
||||
|
ResultBean rb = new ResultBean().fail(); |
||||
|
if(!true){ |
||||
|
OrdOrder order=ordOrderService.getOne(new QueryWrapper<OrdOrder>().eq("mainSid",mainSid)); |
||||
|
List<OrdOrderDetail> detailList=ordOrderDetailService.list(new QueryWrapper<OrdOrderDetail>().eq("orderSid",order.getSid())); |
||||
|
List<vegeVo> vos =new ArrayList<>(); |
||||
|
for (OrdOrderDetail detail : detailList) { |
||||
|
LpkGoods goods=lpkGoodsService.getOne(new QueryWrapper<LpkGoods>().eq("sid",detail.getGoodsSid())); |
||||
|
vegeVo vo=new vegeVo(); |
||||
|
vo.setBrandId(String.valueOf(goods.getBrandId())); |
||||
|
vo.setGoodsSid(detail.getGoodsSid()); |
||||
|
vo.setGoodsNumber(removeZeros(String.valueOf(detail.getPartNumber()))); |
||||
|
vos.add(vo); |
||||
|
} |
||||
|
VegetableCellarDto d=new VegetableCellarDto(); |
||||
|
d.setVos(vos); |
||||
|
d.setCustomerSid(order.getUserSid()); |
||||
|
vegetableCellarService.save1Goods(d); |
||||
|
return rb.setMsg("退款失败"); |
||||
|
} |
||||
|
return rb.success(); |
||||
|
} |
||||
|
|
||||
|
private static Map<String, Object> buildMessageBody(OrdOrder orderDetail,String reason) { |
||||
|
//拼接base参数
|
||||
|
String name = ""; |
||||
|
//
|
||||
|
Map<String, Object> mp_template_msg = new HashMap<>(); |
||||
|
mp_template_msg.put("source", "0"); |
||||
|
mp_template_msg.put("amount", orderDetail.getTotalTee()); |
||||
|
mp_template_msg.put("openId", orderDetail.getOpenId()); |
||||
|
mp_template_msg.put("userSid", orderDetail.getUserSid()); |
||||
|
mp_template_msg.put("name", orderDetail.getName()); |
||||
|
mp_template_msg.put("reason", reason); |
||||
|
mp_template_msg.put("orderSid", orderDetail.getMainSid()); |
||||
|
mp_template_msg.put("returnUrl",""); |
||||
|
return mp_template_msg; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 去除多余.0 |
||||
|
* |
||||
|
* @param num |
||||
|
* @return |
||||
|
*/ |
||||
|
public static String removeZeros(String num) { |
||||
|
if (num.indexOf(".") > 0) { |
||||
|
// 去掉多余的0
|
||||
|
num = num.replaceAll("0+?$", ""); |
||||
|
// 如果最后一位是. 则去掉
|
||||
|
num = num.replaceAll("[.]$", ""); |
||||
|
} |
||||
|
return num; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
Loading…
Reference in new issue