Browse Source

完善订单退款功能

lijun 2 years ago
parent
commit
673bde53cb

+ 27 - 0
imcs-bt-be/imcs-authority-server/src/main/java/com/github/zuihou/api/AndroidApi.java

@@ -28,6 +28,8 @@ import com.github.zuihou.business.productionresource.dto.EquGoodsDto;
 import com.github.zuihou.business.productionresource.entity.EquStatus;
 import com.github.zuihou.business.productionresource.entity.ProductionResource;
 import com.github.zuihou.business.productionresource.service.ProductionTenantResourceService;
+import com.github.zuihou.business.refund.entity.RefundRecord;
+import com.github.zuihou.business.refund.service.RefundRecordService;
 import com.github.zuihou.business.spe.entity.Spe;
 import com.github.zuihou.business.spe.service.SpeService;
 import com.github.zuihou.business.util.CommonUtil;
@@ -111,6 +113,8 @@ public class AndroidApi
 
     @Resource
     private MemberCouponService memberCouponService;
+    @Resource
+    private RefundRecordService refundRecordService;
 
     @ApiOperation("获取商品列表")
     @GetMapping({"/goodsList"})
@@ -394,6 +398,17 @@ public class AndroidApi
                     localOrder.setOrderStatus("2");
                 } else if (trade_state.equals("REFUND")) {
                     localOrder.setOrderStatus("5");
+                    QueryWrap<RefundRecord> refundRecordQueryWrap = new QueryWrap<>();
+                    refundRecordQueryWrap.eq("order_id", localOrder.getId());
+                    RefundRecord refundRecord = refundRecordService.getOne(refundRecordQueryWrap);
+                    if (refundRecord == null) {
+                        refundRecord.setOrderId(localOrder.getId());
+                        refundRecord.setRefundType("0");
+                        refundRecord.setRefundReason("自动退款");
+                        refundRecord.setRefundAmount(localOrder.getPayerTotal());
+                        refundRecordService.save(refundRecord);
+                    }
+
                 }
 //                localOrder.setOrderStatus(trade_state);
                 LocalDateTime localDateTime = DateUtil.parseLocalDateTime(success_time, "yyyy-MM-dd'T'HH:mm:ssXXX");
@@ -463,7 +478,19 @@ public class AndroidApi
 
             refundsDto.setAmount(refundsAmount);
             Map<String, String> refunds = wxPayService.refunds(refundsDto);
+
+            RefundRecord refundRecord = new RefundRecord();
+            refundRecord.setOrderId(Long.valueOf(orderId));
+            refundRecord.setRefundType("0");
+            refundRecord.setRefundReason("自动退款");
+            refundRecord.setRefundAmount(order.getPayerTotal());
+            refundRecordService.save(refundRecord);
+            Order updateOrder = new Order();
+            updateOrder.setId(Long.valueOf(orderId));
+            updateOrder.setOrderStatus("5");
+            orderService.updateById(updateOrder);
         }
+
         return R.success(update);
     }
 

+ 2 - 2
imcs-bt-be/imcs-authority-server/src/main/resources/application.yml

@@ -5,9 +5,9 @@ zuihou:
     ip: 127.0.0.1
     port: 8764
   redis:
-    ip: 106.15.38.8
+    ip: 127.0.0.1
     port: 6379
-    password: 123456
+    password:
     database: 0
   rabbitmq:
     enabled: false

+ 58 - 41
imcs-bt-be/imcs-business-biz/src/main/resources/mapper_business/base/refundRecord/RefundRecordMapper.xml

@@ -1,49 +1,66 @@
 <?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.github.zuihou.business.refund.dao.RefundRecordMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.github.zuihou.business.refund.entity.RefundRecord">
-        <id column="id" jdbcType="BIGINT" property="id"/>
-        <result column="order_id" jdbcType="BIGINT" property="orderId"/>
-        <result column="refund_type" jdbcType="VARCHAR" property="refundType"/>
-        <result column="refund_reason" jdbcType="VARCHAR" property="refundReason"/>
-        <result column="refund_amount" jdbcType="DECIMAL" property="refundAmount"/>
-        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
-        <result column="create_user" jdbcType="BIGINT" property="createUser"/>
-        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
-        <result column="update_user" jdbcType="BIGINT" property="updateUser"/>
-    </resultMap>
-
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-
-    </sql>
-
-    <sql id="Base_selectPage">
+    <select id="selcetPage" resultType="com.github.zuihou.business.refund.entity.RefundRecord">
         select
-            rr.id,
-            rr.order_id,
-            rr.refund_type,
-            rr.refund_reason,
-            rr.create_time,
-            rr.create_user,
-            rr.update_time,
-            rr.update_user
-        from bt_refund_record rr
-        <trim prefix="WHERE" prefixOverrides="AND">
-            <if test="model.refundType!= null and model.refundType!= '-1'">
+            o.id as id,
+            g.goods_name as orderGoodsName,
+            g.goods_pic as orderGoodsPic,
+            o.order_specs as orderSpecs,
+            s.spec_name as orderSpecsName,
+            o.order_member_id as orderMemberId,
+            m.member_name as orderMemberName,
+            o.order_goods_id as orderGoodsId,
+            o.order_company_id as orderCompanyId,
+            o.order_specs as orderSpecs,
+            o.order_amount as orderAmount,
+            o.order_payer_total as payerTotal,
+            o.order_pay_time as orderPayTime,
+            o.order_end_time as orderEndTime,
+            o.order_close_time as orderCloseTime,
+            o.order_unit_price as orderUnitPrice,
+            o.order_goods_amount as orderGoodsAmount,
+            o.order_status as orderStatus,
+            o.create_time as createTime,
+            o.update_time as updateTime,
+            g.goods_name as orderGoodsName,
+            g.goods_pic as orderGoodsPic,
+            s.spec_name as orderSpecsName,
+            p.name as deviceName,
+            rr.refund_type as refundType,
+            rr.refund_reason as refundReason,
+            rr.refund_amount as refundAmount,
+            rr.create_time as refundTime,
+            au.id as refundUserId,
+            au.name as refundUserName
+        from bt_order o
+        left join bt_goods g on o.order_goods_id = g.id
+        left join bt_spe s on o.order_specs = s.id
+        left join bt_member m on o.order_member_id = m.id
+        left join imcs_tenant_productionresource p on o.order_equ_id = p.id
+        left join bt_refund_record rr on rr.order_id = o.id
+        left join c_auth_user au on au.id = rr.create_user
+        where
+            <!-- 查询所有已退款订单 -->
+            o.order_status = '5'
+            <if test="model.id!= null">
+                and o.id = #{model.id,jdbcType=BIGINT }
+            </if>
+            <if test="model.orderEquId!= null">
+                and p.id = #{model.orderEquId,jdbcType=BIGINT }
+            </if>
+            <if test='model.orderMemberName!= null and model.orderMemberName!= ""'>
+                and m.member_name like CONCAT('%',#{model.orderMemberName,jdbcType=VARCHAR },'%')
+            </if>
+            <if test='model.refundType!= null and model.refundType!= "-1"'>
                 and rr.refund_type = #{model.refundType,jdbcType=VARCHAR }
             </if>
-        </trim>
-        ORDER BY rr.create_time DESC
-    </sql>
-
-    <select id="selcetPage" resultMap="BaseResultMap">
-        <!-- 嵌套作为扩展,用于前端动态传递的排序字段 -->
-        select *
-        from (
-           <include refid="Base_selectPage" />
-        ) s
+            <if test="model.startCreateTime!= null">
+                and o.create_time <![CDATA[ > ]]> #{model.startCreateTime,jdbcType=TIMESTAMP }
+            </if>
+            <if test="model.endCreateTime!= null">
+                and o.create_time <![CDATA[ < ]]>  #{model.endCreateTime,jdbcType=TIMESTAMP }
+            </if>
+         order by rr.create_time desc
     </select>
 </mapper>

+ 26 - 4
imcs-bt-be/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/refund/RefundRecordController.java

@@ -12,13 +12,14 @@ import com.github.zuihou.business.refund.dto.RefundRecordSaveDTO;
 import com.github.zuihou.business.refund.dto.RefundRecordUpdateDTO;
 import com.github.zuihou.business.refund.entity.RefundRecord;
 import com.github.zuihou.business.refund.service.RefundRecordService;
-import com.github.zuihou.business.spe.entity.Spe;
 import com.github.zuihou.database.mybatis.conditions.query.QueryWrap;
 import com.github.zuihou.log.annotation.SysLog;
 import com.github.zuihou.security.annotation.PreAuth;
+import com.github.zuihou.utils.DateUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -26,7 +27,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Map;
 
 /**
  *
@@ -46,6 +49,19 @@ public class RefundRecordController extends SuperController<RefundRecordService,
     @ApiOperation(value = "退款记录分页列表查询", notes = "退款记录分页列表查询")
     @SysLog(value = "'分页列表查询:第' + #params?.current + '页, 显示' + #params?.size + '行'", response = false)
     public R<IPage<RefundRecord>> page(@RequestBody @Validated PageParams<RefundRecordPageDTO> pageParams) {
+        Map<String, String> map = pageParams.getMap();
+        if (map != null) {
+            String startCreateTime = map.get("createTime_st");
+            if (StringUtils.isNotBlank(startCreateTime)) {
+                startCreateTime = startCreateTime.substring(0,10)+ " 00:00:00";;
+                pageParams.getModel().setStartCreateTime(LocalDateTime.parse(startCreateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            }
+            String endCreateTime = map.get("createTime_ed");
+            if (StringUtils.isNotBlank(endCreateTime)) {
+                endCreateTime = endCreateTime.substring(0,10)+ " 23:59:59";
+                pageParams.getModel().setEndCreateTime(LocalDateTime.parse(endCreateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
         return this.success(baseService.selcetPage(pageParams));
     }
 
@@ -57,8 +73,8 @@ public class RefundRecordController extends SuperController<RefundRecordService,
         if (order == null) {
             return R.fail("订单不存在");
         }
-        if (!order.getOrderStatus().equals("4")) {
-            return R.fail("非异常订单不能退款");
+        if (!order.getOrderStatus().equals("3")&& !order.getOrderStatus().equals("4") && !order.getOrderStatus().equals("6")) {
+            return R.fail("只有生产完成、异常及已取餐的订单可退款");
         }
         if (order.getPayerTotal().compareTo(saveDTO.getRefundAmount()) < 0 ) {
             return R.fail("退款金额不能大于订单支付金额");
@@ -74,6 +90,12 @@ public class RefundRecordController extends SuperController<RefundRecordService,
         // 运维页面调用,全部为人工退款
         model.setRefundType("1");
         baseService.save(model);
+
+        // 修改订单状态
+        Order updateOrder = new Order();
+        updateOrder.setId(order.getId());
+        updateOrder.setOrderStatus("5");
+        orderService.updateById(updateOrder);
         return R.success();
     }
 }

+ 28 - 0
imcs-bt-be/imcs-business-entity/src/main/java/com/github/zuihou/business/refund/dto/RefundRecordPageDTO.java

@@ -7,6 +7,7 @@ import lombok.*;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 @ApiModel(value = "RefundRecordPageDTO", description = "退款记录分页dto")
 @ToString(callSuper = true)
@@ -18,6 +19,23 @@ import java.io.Serializable;
 @Accessors(chain = true)
 public class RefundRecordPageDTO implements Serializable {
     private static final long serialVersionUID = 6230876998065708555L;
+    /**
+     * 订单ID
+     */
+    @ApiModelProperty(value = "订单ID")
+    private Long id;
+
+    /**
+     * 设备id
+     */
+    @ApiModelProperty(value = "设备id")
+    private Long orderEquId;
+
+    /**
+     * 订单用户名称
+     */
+    @ApiModelProperty(value = "订单用户名称")
+    private String orderMemberName;
 
     /**
      * 退款类型: 0 -> 自动退款, 1 -> 人工退款
@@ -25,4 +43,14 @@ public class RefundRecordPageDTO implements Serializable {
     @ApiModelProperty(value = "退款类型: 0 -> 自动退款, 1 -> 人工退款")
     @EnumValue(strValues = {"-1", "0", "1"}, message = "状态只能是-1、0或者1")
     private String refundType;
+
+    /**
+     * 交易创建开始时间
+     */
+    private LocalDateTime startCreateTime;
+
+    /**
+     * 交易创建结束时间
+     */
+    private LocalDateTime endCreateTime;
 }

+ 129 - 0
imcs-bt-be/imcs-business-entity/src/main/java/com/github/zuihou/business/refund/entity/RefundRecord.java

@@ -9,6 +9,7 @@ import lombok.*;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * 退款记录实体表
@@ -59,4 +60,132 @@ public class RefundRecord extends Entity<Long> {
     @ApiModelProperty(value = "退款金额")
     @TableField("refund_amount")
     private BigDecimal refundAmount;
+
+    /**
+     * 用户id
+     */
+    @TableField(exist = false)
+    private Long orderMemberId;
+
+    /**
+     * 用户姓名
+     */
+    @TableField(exist = false)
+    private String orderMemberName;
+
+    /**
+     * 商品id
+     */
+    @TableField(exist = false)
+    private Long orderGoodsId;
+
+    /**
+     * 商品名称
+     */
+    @TableField(exist = false)
+    private String orderGoodsName;
+
+    /**
+     * 商品图片
+     */
+    @ApiModelProperty(value = "商品图片")
+    @TableField(exist = false)
+    private String orderGoodsPic;
+
+    /**
+     * 商家id
+     */
+    @ApiModelProperty(value = "商家id")
+    @TableField(exist = false)
+    private Long orderCompanyId;
+
+    /**
+     * 订单规格id
+     */
+    @ApiModelProperty(value = "订单规格id")
+    @TableField(exist = false)
+    private Long orderSpecs;
+
+
+    /**
+     * 规格名称
+     */
+    @TableField(exist = false)
+    private String orderSpecsName;
+
+    /**
+     * 订单设备名称
+     */
+    @ApiModelProperty(value = "订单设备名称")
+    @TableField(exist = false)
+    private String deviceName;
+
+    /**
+     * 订单金额。精确到2位小数;单位:元。如:200.07,表示:200元7分
+     */
+    @TableField(exist = false)
+    private BigDecimal orderAmount;
+
+
+    /**
+     * 用户实付金额。精确到2位小数;单位:元。如:200.07,表示:200元7分
+     */
+    @TableField(exist = false)
+    private BigDecimal payerTotal;
+
+    /**
+     * 单价
+     */
+    @TableField(exist = false)
+    private BigDecimal orderUnitPrice;
+
+    /**
+     * 商品数量
+     */
+    @TableField(exist = false)
+    private Integer orderGoodsAmount;
+
+    /**
+     * 订单状态:0:未支付,1:生产中,2:已取消,3:生产完成,4:异常,5:已退款,6:已取餐
+     */
+    @TableField(exist = false)
+    private String orderStatus;
+
+    /**
+     * 付款时间
+     */
+    @TableField(exist = false)
+    private LocalDateTime orderPayTime;
+
+    /**
+     * 交易完成时间
+     */
+    @TableField(exist = false)
+    private LocalDateTime orderEndTime;
+
+    /**
+     * 交易关闭时间
+     */
+    @TableField(exist = false)
+    private LocalDateTime orderCloseTime;
+
+    /**
+     * 退款操作人id
+     */
+    @TableField(exist = false)
+    private Long refundUserId;
+
+    /**
+     * 退款操作人名称
+     */
+    @TableField(exist = false)
+    private String refundUserName;
+
+    /**
+     * 退款时间
+     */
+    @TableField(exist = false)
+    private LocalDateTime refundTime;
+
+
 }