rk
2025-12-16 2cfceadff437135a255990ab9698788a48adb636
小程序 用户端接口开发
已添加5个文件
已修改25个文件
930 ■■■■■ 文件已修改
server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -13,7 +13,7 @@
public enum ResponseStatus {
    // 400开头表示参数错误
    BAD_REQUEST(4000, "参数错误"),
    DATA_EMPTY(4001, "找不到目标数据"),
    DATA_EMPTY(4001, "找不到目标数据或数据已删除"),
    DATA_EXISTS(4002, "记录已存在"),
    PWD_INCORRECT(4003, "密码不正确"),
    VERIFICATION_CODE_INCORRECT(4004, "验证码不正确或已过期"),
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -562,8 +562,8 @@
     */
    public  enum OrderStatus{
        WAIT_PAY(0, "待支付", "待支付"),
        PAY_DONE(1, "待发货", "已支付待发货"),
        WAIT_RECEIVE(2, "待收货/待自提", "已发货待收货/待自提"),
        PAY_DONE(1, "待发货/待自提", "已支付待发货/待自提"),
        WAIT_RECEIVE(2, "待收货", "已发货待收货"),
        DONE(3, "交易完成", "交易完成"),
        CLOSE(4, "已关闭", "已关闭"),
        PART_DONE(5, "部分发货", "部分发货"),
@@ -838,7 +838,10 @@
        EXCHANGE_CARD(11,"卡充值","卡充值",0),
        SYSTEM_RECHARGE(12,"平台充值","平台充值",0),
        SYSTEM_DEDUCT(13,"平台扣款","平台扣款",0),
        SHOP_ORDER_CANCEL(14,"余额抵扣商品退还","余额抵扣商品退还",0)
        SHOP_ORDER_CANCEL(14,"余额抵扣商品退还","余额抵扣商品退还",0),
        SHOP_ORDER_SETTLEMENT(15,"下单结算金额","下单结算金额",0), //经销商下单结算金额
        SHOP_ORDER_CANCEL_SETTLEMENT(16,"取消订单结算金额返还","取消订单结算金额返还",0), //取消订单结算金额返还
        SHOP_YEAR_SETTLEMENT(17,"年度结算","年度结算",0) //年度结算
        ;
        // æˆå‘˜å˜é‡
        private String name;
@@ -1111,7 +1114,6 @@
            this.type = type;
        }
    }
}
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderDetailMapper.java
@@ -8,6 +8,7 @@
import com.doumee.dao.web.response.OrderCommentResponse;
import com.doumee.dao.web.response.OrderDetailResponse;
import com.doumee.dao.web.response.goods.MemberOrderDetailResponse;
import com.github.yulichang.base.mapper.MPJJoinMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -17,7 +18,7 @@
 * @author æ±Ÿè¹„蹄
 * @date 2023/03/21 15:48
 */
public interface GoodsorderDetailMapper extends BaseMapper<GoodsorderDetail> {
public interface GoodsorderDetailMapper extends MPJJoinMapper<GoodsorderDetail> {
    @Select(" select o.* , g.STATUS , g.PRICE as titlePrice   " +
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java
@@ -23,18 +23,18 @@
    @Select(" select g.CODE AS code ,  g.id as orderId , g.CREATE_DATE as createDate    , g.TYPE as orderType , g.STATUS as orderStatus , g.IS_COMMENT as isComment , g.PAY_STATUS as  payStatus ," +
            " g.COUPON_PRICE as couponPrice , g.price , g.LINKNAME  as linkName , g.LINKPHONE as linkPhone , g.LINKADDR as linkAddress , " +
            "g.KD_DATE as kdDate , g.KD_NAME as kdName  , g.KD_CODE as kdCode , g.integral , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
            " , g.MEMBER_INFO  " +
            " from goodsorder g  " +
            "g.KD_DATE as kdDate , g.KD_NAME as kdName  , g.KD_CODE as kdCode , g.INTEGRAL_PRICE as integral , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
            " , g.MEMBER_INFO , g.RECEIVE_TYPE as receiveType, s.name as shopName ,s.id as shopId ,g.exchange_code as exchangeCode  " +
            " from goodsorder g left join shop s on g.PICK_UP_SHOP_ID = s.id   " +
            " ${ew.customSqlSegment} ")
    IPage<MemberOrderResponse> goodsOrderPage(IPage<MemberOrderResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
    @Select(" select g.CODE AS code ,  g.id as orderId , g.CREATE_DATE as createDate    , g.TYPE as orderType , g.STATUS as orderStatus , g.IS_COMMENT as isComment , g.PAY_STATUS as  payStatus ," +
            " g.COUPON_PRICE as couponPrice , g.price , g.LINKNAME  as linkName , g.LINKPHONE as linkPhone , g.LINKADDR as linkAddress , " +
            "g.KD_DATE as kdDate , g.KD_NAME as kdName  , g.KD_CODE as kdCode , g.integral , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
            " , g.MEMBER_INFO  " +
            " from goodsorder g  " +
            "g.KD_DATE as kdDate , g.KD_NAME as kdName  , g.KD_CODE as kdCode , g.INTEGRAL_PRICE as integral , SUBDATE(g.CREATE_DATE,interval - 15 minute) as cancelDate , g.PAY_DATE AS payDate , g.DONE_DATE as doneDate " +
            " , g.MEMBER_INFO , g.RECEIVE_TYPE as receiveType, s.name as shopName ,s.id as shopId,g.exchange_code as exchangeCode " +
            " from goodsorder g left join shop s on g.PICK_UP_SHOP_ID = s.id   " +
            " where g.id = #{id} ")
    MemberOrderResponse goodsOrderDetail(@Param("id") Integer id);
server/dmmall_service/src/main/java/com/doumee/dao/business/MemberCouponMapper.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.doumee.dao.business.model.MemberCoupon;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.response.MemberCouponResponse;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -19,7 +20,6 @@
    @Select(" select m.*   " +
            " from member_coupon m  " +
            " ${ew.customSqlSegment} ")
    IPage<CouponDTO> memberCouponPage(IPage<CouponDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper);
    IPage<MemberCouponResponse> memberCouponPage(IPage<CouponDTO> page, @Param(Constants.WRAPPER) Wrapper wrapper);
}
server/dmmall_service/src/main/java/com/doumee/dao/business/ShopMapper.java
@@ -2,6 +2,10 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Shop;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
/**
 * @author æ±Ÿè¹„蹄
@@ -9,4 +13,23 @@
 */
public interface ShopMapper extends BaseMapper<Shop> {
    /**
     * æ·»åŠ ç§¯åˆ†
     * @param memberId
     * @param integral
     */
    @Select(" update shop set INTEGRAL = ifNull( INTEGRAL,0) + #{integral} , TOTAL_INTEGRAL = ifNull(TOTAL_INTEGRAL,0) +  #{titleIntegral}   , EDIT_DATE = now()  where id = #{shopId}  ")
    void addIntegral(@Param("shopId") Integer shopId , @Param("integral") BigDecimal integral , @Param("titleIntegral")BigDecimal titleIntegral);
    /**
     * å‡å°‘积分
     * @param memberId
     * @param integral
     */
    @Select(" update shop set INTEGRAL = ifNull( INTEGRAL,0) - #{integral} , EDIT_DATE = now()   where id = #{shopId}  ")
    void subtractIntegral(@Param("shopId") Integer shopId , @Param("integral")BigDecimal integral);
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
@@ -196,6 +197,8 @@
    @ApiModelProperty(value = "分销商铺主键 shop:id", example = "1")
    private Integer distributionShopId;
    @ApiModelProperty(value = "核销码", example = "1")
    private String exchangeCode;
    @ApiModelProperty(value = "文件地址")
    @TableField(exist = false)
server/dmmall_service/src/main/java/com/doumee/dao/business/model/GoodsorderDetail.java
@@ -98,6 +98,8 @@
    @ApiModelProperty(value = "积分抵扣金额", example = "1")
    private BigDecimal integralDeduct;
    @ApiModelProperty(value = "经销商结算金额", example = "1")
    private BigDecimal shopSettlement;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
@@ -77,6 +77,8 @@
    @ApiModelProperty(value = "交易单号")
    private String orderCode;
    @ApiModelProperty(value = "用户类型:0=消费者;1=经销商;")
    private Integer userType;
    @ApiModelProperty(value = "用户昵称")
    @ExcelColumn(name="用户",index =1,width = 10)
@@ -111,18 +113,18 @@
    public static  Integral createIntegral(Integer memberId, Constants.INTEGRAL_TYPE integralType,Integer objId){
        Integral integral = new Integral();
        integral.setCreator(memberId);
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setMemberId(memberId);
        integral.setTitle(integralType.getName());
        integral.setObjId(objId);
        integral.setObjType(integralType.getKey());
        integral.setType(integralType.getType());
        return integral;
    }
//    public static  Integral createIntegral(Integer memberId, Constants.INTEGRAL_TYPE integralType,Integer objId){
//        Integral integral = new Integral();
//        integral.setCreator(memberId);
//        integral.setCreateDate(new Date());
//        integral.setIsdeleted(Constants.ZERO);
//        integral.setMemberId(memberId);
//        integral.setTitle(integralType.getName());
//        integral.setObjId(objId);
//        integral.setObjType(integralType.getKey());
//        integral.setType(integralType.getType());
//
//        return integral;
//    }
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/ShopGoodsRelation.java
@@ -64,4 +64,9 @@
    @ExcelColumn(name="供货价")
    private BigDecimal price;
    @ApiModelProperty(value = "启用0 ç¦ç”¨1", example = "1")
    @ExcelColumn(name="启用0 ç¦ç”¨1")
    private Integer status;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/CouponDTO.java
@@ -66,4 +66,18 @@
    @ApiModelProperty(value = "优惠券状态")
    private String couponStatus;
    @ApiModelProperty(value = "优惠券类型:0=满减券;1=折扣券;")
    private Integer couponType;
    @ApiModelProperty(value = "适用类型:0=全场;1=品类;2=指定商品")
    private Integer applyType;
    @ApiModelProperty(value = "适用关联对象信息主键")
    private String applyIds;
    @ApiModelProperty(value = "折扣卷满减上限金额")
    private BigDecimal maxPrice;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/DealIntegralRequest.java
@@ -34,4 +34,7 @@
    @ApiModelProperty(value = "收支类型 0收入 1支出")
    private Integer dealType;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/OrderCancelRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/23 9:50
 */
@Data
@ApiModel("订单取消请求类")
public class OrderCancelRequest {
    @ApiModelProperty(value = "订单主键",example = "0")
    private Integer orderId;
    @ApiModelProperty(value = "取消原因")
    private String cancelInfo;
    @ApiModelProperty(value = "用户主键",hidden = true)
    private Integer memberId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/UpdMobileRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.dao.web.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/23 9:50
 */
@Data
@ApiModel("手机换绑请求类")
public class UpdMobileRequest {
    @ApiModelProperty(value = "验证码",example = "0")
    private String code;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "用户主键",hidden = true)
    private Integer memberId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/DealOrderRequest.java
@@ -17,6 +17,9 @@
    @ApiModelProperty(value = "订单主键")
    private Integer orderId;
    @ApiModelProperty(value = "订单核销码")
    private String exchangeCode;
    @ApiModelProperty(value = "收货地址主键(更新订单收货地址使用)")
    private Integer addressId;
@@ -26,6 +29,7 @@
    @ApiModelProperty(value = "订单评价信息(订单评价业务使用)")
    private String  commentInfo;
    @ApiModelProperty(hidden = true)
    private Integer memberId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/MemberOrderRequest.java
@@ -23,7 +23,7 @@
    @ApiModelProperty(value = "订单类型 0平台商城 1咖豆商城", example = "1")
    private Integer orderType;
    @ApiModelProperty(value = "状态 0待支付 1待发货 2待收货 3交易完成", example = "1")
    @ApiModelProperty(value = "状态 0待支付 1待发货/自提 2待收货 3交易完成", example = "1")
    private Integer orderStatus;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.doumee.dao.web.response;
import com.doumee.dao.business.model.Member;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.math3.analysis.function.Log;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/12/15 14:46
 */
@Data
public class HomeInfoResponse {
    @ApiModelProperty(value = "用户信息")
    private Member member;
    @ApiModelProperty(value = "购物车商品种类")
    private Long cartTypeNum;
    @ApiModelProperty(value = "优惠券数量")
    private Long couponNum;
    @ApiModelProperty(value = "收藏数量")
    private Long collectNum;
    @ApiModelProperty(value = "待付款数量")
    private Long waitPayNum;
    @ApiModelProperty(value = "待收货数量")
    private Long waitReceiveNum;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/MemberCouponResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package com.doumee.dao.web.response;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("用户优惠券信息")
public class MemberCouponResponse {
    @ApiModelProperty(value = "id")
    private Integer id;
    @ApiModelProperty(value = "优惠券名称")
    private String name;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "商家编码(关联shop表)")
    private Integer shopId;
    @ApiModelProperty(value = "类型0商家优惠券 1平台优惠券 ")
    private Integer type;
    @ApiModelProperty(value = "满额(元)")
    private BigDecimal limitPrice;
    @ApiModelProperty(value = "优惠金额(元)")
    private BigDecimal price;
    @ApiModelProperty(value = "开始时间")
    private Date startDate;
    @ApiModelProperty(value = "结束时间")
    private Date endDate;
    @ApiModelProperty(value = "领取后有效天数")
    private Integer validDays;
    @ApiModelProperty(value = "领取方式 0领取 1兑换")
    private Integer getMethod;
    @ApiModelProperty(value = "兑换所需咖豆金额")
    private BigDecimal integral;
    @ApiModelProperty(value = "状态 0启用 1禁用")
    private Integer status;
    @ApiModelProperty(value = "发放总量")
    private Integer num;
    @ApiModelProperty(value = "领取总量")
    private Integer drawNum;
    @ApiModelProperty(value = "说明")
    private String info;
    @ApiModelProperty(value = "领取状态 ")
    private String drawStatus;
    @ApiModelProperty(value = "优惠券状态")
    private String couponStatus;
    @ApiModelProperty(value = "优惠券类型:0=满减券;1=折扣券;")
    private Integer couponType;
    @ApiModelProperty(value = "适用类型:0=全场;1=品类;2=指定商品")
    private Integer applyType;
    @ApiModelProperty(value = "适用关联对象信息主键")
    private String applyIds;
    @ApiModelProperty(value = "折扣卷满减上限金额")
    private BigDecimal maxPrice;
    @ApiModelProperty(value = "适用关联对象信息")
    private List<String> relationInfoList;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java
@@ -1,5 +1,7 @@
package com.doumee.dao.web.response.goods;
import com.doumee.dao.business.model.MemberCoupon;
import com.doumee.dao.business.model.Shop;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -33,7 +35,16 @@
    @ApiModelProperty(value = "订单类型 0平台商城 1咖豆商城 2咖啡计划编码", example = "1")
    private Integer orderType;
    @ApiModelProperty(value = "状态 0待支付 1待发货 2待收货 3交易完成 4已关闭 5部分发货", example = "1")
    @ApiModelProperty(value = "收货类型:0=快递配送;1=门店自提;", example = "1")
    private Integer receiveType;
    @ApiModelProperty(value = "自提经销商主键", example = "1")
    private Integer shopId;
    @ApiModelProperty(value = "经销商名称", example = "1")
    private String shopName;
    @ApiModelProperty(value = "状态 0待支付 1待发货/待自提 2待收货 3交易完成 4已关闭 5部分发货", example = "1")
    private Integer orderStatus;
    @ApiModelProperty(value = "是否已评价 0未评价 1已评价", example = "1")
@@ -72,6 +83,8 @@
    @ApiModelProperty(value = "完成时间", example = "1")
    private Date doneDate;
    @ApiModelProperty(value = "核销码", example = "1")
    private String exchangeCode;
    @ApiModelProperty(value = "抵扣金额", example = "1")
    private BigDecimal integral;
@@ -86,4 +99,13 @@
    @ApiModelProperty(value = "订单明细信息", example = "1")
    private List<MemberOrderDetailResponse> memberOrderDetailResponseList;
    @ApiModelProperty(value = "经销商信息", example = "1")
    private Shop shopInfo;
    @ApiModelProperty(value = "优惠券信息", example = "1")
    private MemberCoupon memberCoupon;
}
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -5,14 +5,18 @@
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.web.request.OrderCancelRequest;
import com.doumee.dao.web.request.OrderPayRequest;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.request.ShopOrderPayRequest;
import com.doumee.dao.web.request.goods.DealOrderRequest;
import com.doumee.dao.web.request.goods.MemberOrderRequest;
import com.doumee.dao.web.request.goods.OrderCommentRequest;
import com.doumee.dao.web.response.HomeInfoResponse;
import com.doumee.dao.web.response.MyPageResponse;
import com.doumee.dao.web.response.goods.MemberOrderResponse;
import com.doumee.dao.web.response.goods.PayResponse;
import com.doumee.service.business.impl.MemberCouponServiceImpl;
import java.math.BigDecimal;
import java.util.List;
@@ -123,7 +127,7 @@
     * @param orderPayRequest
     * @return
     */
    PayResponse orderPay(OrderPayRequest orderPayRequest);
    PayResponse orderPay(ShopOrderPayRequest orderPayRequest, MemberCouponServiceImpl memberCouponService);
    /**
     * é‡æ–°æ”¯ä»˜
@@ -147,13 +151,20 @@
    void updAddress(DealOrderRequest updAddressRequest);
    /**
     * å–消订单
     * å–消订单 - åŽ†å²ç‰ˆæœ¬
     * @param orderId
     * @param optUserId
     * @param cancelInfo
     */
    void cancelOrder(Integer orderId,Integer optUserId,String cancelInfo);
    /**
     * è®¢å•取消 - æ–°
     * @param orderId
     * @param optUserId
     * @param cancelInfo
     */
    void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo);
    /**
     * å‚¬å‘è´§
@@ -170,6 +181,14 @@
     */
    void affirmOrder(Integer orderId,Integer memberId);
    void orderWriteOff(String exchangeCode,Integer memberId);
    /**
     * è®¢å•删除
     * @param orderId
     * @param memberId
     */
    void delOrder(Integer orderId,Integer memberId);
    /**
     * è®¢å•详情
@@ -202,4 +221,6 @@
    void resetOrderCodes();
    void refreshOrderCodes();
    HomeInfoResponse getHomeInfo(int memberId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/IntegralService.java
@@ -115,10 +115,17 @@
     */
    PageData<IntegralDTO> findIntegralDTOPage(PageWrap<IntegralDTO> pageWrap,Integer memberId);
    /**
     * æ›´æ–°ç§¯åˆ†ä¿¡æ¯
     * æ›´æ–°æ¶ˆè´¹è€…积分
     * @param dealIntegralRequest å®žä½“对象
     * @return Integer
     */
    Integer dealIntegral(DealIntegralRequest dealIntegralRequest);
    /**
     * æ›´æ–°ç»é”€å•†ä½™é¢
     * @param dealIntegralRequest
     * @return
     */
    Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest);
}
server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
@@ -7,6 +7,7 @@
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.dto.MemberCouponDTO;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.response.MemberCouponResponse;
import java.math.BigDecimal;
import java.util.List;
@@ -111,9 +112,14 @@
     * @param couponType
     * @return
     */
     IPage<CouponDTO> memberCouponPage(IPage pages, BigDecimal price, Integer memberId, Integer couponType);
     IPage<MemberCouponResponse> memberCouponPage(IPage pages, BigDecimal price, Integer memberId, Integer couponType, Integer status);
    /**
     * ä¼šå‘˜ä¼˜æƒ åˆ¸è¯¦æƒ…
     * @param id
     * @return
     */
    MemberCouponResponse getMemberCouponDetail(Integer id);
    /**
     * å¯ç”¨ä¼˜æƒ åˆ¸æ•°é‡
     * @param price
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -7,6 +7,7 @@
import com.doumee.dao.system.dto.MemberRechargeDTO;
import com.doumee.dao.web.dto.MemberOwnDTO;
import com.doumee.dao.web.dto.shop.Position;
import com.doumee.dao.web.request.UpdMobileRequest;
import com.doumee.dao.web.request.UpdateMemberRequest;
import com.doumee.dao.web.request.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
@@ -144,8 +145,17 @@
     */
    Member updateMember(UpdateMemberRequest updateMemberRequest);
    /**
     * éªŒè¯æ‰‹æœºå·
     * @param request
     */
    void verifyUserPhone(UpdMobileRequest request);
    /**
     * æ¢ç»‘手机号
     * @param request
     */
    void updateUserPhone(UpdMobileRequest request);
    MemberOwnDTO getMemberOwnDTO(Integer memberId);
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -20,14 +20,12 @@
import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.dao.web.request.OrderPayRequest;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.request.ShopOrderPayRequest;
import com.doumee.dao.web.request.*;
import com.doumee.dao.web.request.goods.MemberOrderRequest;
import com.doumee.dao.web.request.goods.DealOrderRequest;
import com.doumee.dao.web.request.goods.OrderCommentRequest;
import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
import com.doumee.dao.web.response.HomeInfoResponse;
import com.doumee.dao.web.response.MyPageResponse;
import com.doumee.dao.web.response.goods.*;
import com.doumee.service.business.AreasService;
@@ -78,7 +76,8 @@
    private ActivitySignMapper activitySignMapper;
    @Autowired
    private AftersaleMapper  aftersaleMapper;
    @Autowired
    private ShopGoodsRelationMapper shopGoodsRelationMapper;
    @Autowired
    private MemberMapper memberMapper;
@@ -98,7 +97,13 @@
    private ShopMapper shopMapper;
    @Autowired
    private ShopGoodsRelationMapper relationMapper;
    @Autowired
    private MemberCouponMapper memberCouponMapper;
    @Autowired
    private CollectMapper collectMapper;
    @Autowired
    private WxMiniUtilService wxMiniUtilService;
@@ -529,7 +534,6 @@
    /****************************************移动端接口开始********************************************************************/
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public PayResponse orderPay(OrderPayRequest orderPayRequest){
        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -710,6 +714,7 @@
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
        Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -750,7 +755,6 @@
            if(Objects.isNull(shop)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请选择正确的自提门店!");
            }
            //判断门店是否设置商品的价格信息
            //根据选择商户进行会员与商户信息绑定
@@ -760,7 +764,6 @@
                        .eq(Member::getId,member.getId())
                );
            }
            goodsorder.setPickUpShopId(shop.getId());
            goodsorder.setDistributionShopId(shop.getId());
            if(Objects.isNull(member.getBindShopId())){
@@ -780,6 +783,7 @@
        goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
        goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
        goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
        goodsorder.setIntegral(goodsorder.getUseIntegral());
        goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
@@ -839,6 +843,21 @@
            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
            goodsOrderDetail.setOrderId(goodsorder.getId());
            //判断门店是否设置商品的价格信息
            if(Objects.nonNull(goodsorder.getDistributionShopId())){
                ShopGoodsRelation shopGoodsRelation = relationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO) .eq(ShopGoodsRelation::getShopId,goodsorder.getDistributionShopId())
                        .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
                        .eq(ShopGoodsRelation::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
                        .last(" limit 1 ")
                );
                if(Objects.isNull(shopGoodsRelation)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,关联经销商未绑定["+goods.getName()+"]商品,请联系管理员!");
                }
                goodsOrderDetail.setShopSettlement(shopGoodsRelation.getPrice());
            }
            goodsOrderDetailList.add(goodsOrderDetail);
            //删除购物车商品
            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
@@ -847,12 +866,18 @@
            );
        }
        //积分变动记录
        Integral integral =Integral.createIntegral(member.getId(),Constants.INTEGRAL_TYPE.ORDER_PAY,goodsorder.getId());
        integral.setNum(goodsorder.getUseIntegral());
        integral.setTotalNum(member.getIntegral().subtract(goodsorder.getUseIntegral()));
        integralMapper.insert(integral);
        //更新用户积分
        memberMapper.subtractIntegral(member.getId(),goodsorder.getUseIntegral());
        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
            dealIntegralRequest.setDealType(Constants.ONE);
            dealIntegralRequest.setMemberId(member.getId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
            integralService.dealIntegral(dealIntegralRequest);
        }
        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品价格发生变化,请刷新后重新支付!");
        }
@@ -962,6 +987,9 @@
            j.setImgUrl(fullUrl + j.getImgUrl());
        });
        memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
        }
        return memberOrderResponse;
    }
@@ -1079,6 +1107,88 @@
            }
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo){
        if(Objects.isNull(orderId)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())
        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"订单取消失败:订单状态已流转!");
        }
        if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //微信现金退款
            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
            Fund fund = new Fund();
            fund.setOrderCode(refundCode);
            fund.setCreateDate(new Date());
            fund.setIsdeleted(Constants.ZERO);
            fund.setRemark(goodsorder.getId().toString());
            fund.setMemberId(goodsorder.getCreator());
            fund.setTitle("订单取消");
            fund.setContent(StringUtils.isBlank(cancelInfo)?"用户主动取消":cancelInfo);
            fund.setObjId(goodsorder.getId());
            fund.setObjType(Constants.ONE);
            fund.setType(Constants.ONE);
            fund.setNum(goodsorder.getPrice());
            fundMapper.insert(fund);
        }
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
            integralService.dealIntegral(dealIntegralRequest);
        }
        //订单信息取消
        goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
        goodsorder.setCancelDate(new Date());
        goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"用户主动取消":cancelInfo);
        goodsorder.setCancelUser(optUserId);
        goodsorderMapper.updateById(goodsorder);
        String goodsName = "";
        List<GoodsorderDetail> goodsorderDetailList =  goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
        if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
            for (GoodsorderDetail goodsorderDetail:goodsorderDetailList) {
                GoodsSku goodsSku = goodsSkuMapper.selectById(goodsorderDetail.getGoodsSkuId());
                if(StringUtils.isBlank(goodsName)){
                    Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
                    goodsName = goods.getName();
                }
                if(!Objects.isNull(goodsSku)){
                    goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
                    goodsSkuMapper.updateById(goodsSku);
                }
            }
        }
        //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
        //查询优惠券信息记录
        if(!Objects.isNull(goodsorder.getCouponId())){
            MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
            if(!Objects.isNull(memberCoupon)){
                memberCoupon.setStatus(Constants.ZERO);
                memberCouponMapper.updateById(memberCoupon);
            }
        }
    }
    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
        List<MemberCoupon> memberCouponList = new ArrayList<>();
@@ -1295,6 +1405,21 @@
        orderUrgeMapper.insert(orderUrge);
    }
    @Override
    public void delOrder(Integer orderId,Integer memberId){
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(!goodsorder.getMemberId().equals(memberId)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:用户信息匹配失败!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.CLOSE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:当前订单状态,无法进行该操作!");
        }
        goodsorder.setIsdeleted(Constants.ONE);
        goodsorder.setEditDate(new Date());
        goodsorderMapper.updateById(goodsorder);
    }
    /**
     * è®¢å•确认收货
@@ -1307,6 +1432,9 @@
        if(!goodsorder.getMemberId().equals(memberId)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:用户信息匹配失败!");
        }
        if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:自提订单,无法进行该操作!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.WAIT_RECEIVE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:订单未发货,无法进行确认!");
        }
@@ -1316,7 +1444,69 @@
        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
        goodsorder.setDoneDate(new Date());
        goodsorderMapper.updateById(goodsorder);
        //经销商分销 æ·»åŠ åˆ†é”€é‡‘é¢è®°å½•
        this.addShopIntegral(goodsorder);
    }
    /**
     * è®¢å•核销
     * @param code
     * @param memberId
     */
    @Override
    public void orderWriteOff(String exchangeCode,Integer memberId){
        Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda()
                .eq(Goodsorder::getExchangeCode,exchangeCode)
                .eq(Goodsorder::getIsdeleted,Constants.ZERO).last("limit 1 "));
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:配送订单,无法进行该操作!");
        }
        if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"操作失败:订单状态已流转,无法进行该操作!");
        }
        Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());/*selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getMemberId,memberId)
                .eq(Shop::getIsdeleted,Constants.ZERO).last("limit 1 ")
        );*/
        if(Objects.isNull(shop)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到订单关联经销商信息,请联系管理员");
        }
        if(!Constants.equalsInteger(shop.getMemberId(),memberId)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"["+shop.getName()+"]非您绑定的经销商,无法进行该操作!");
        }
        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
        goodsorder.setDoneDate(new Date());
        goodsorderMapper.updateById(goodsorder);
        //经销商分销 æ·»åŠ åˆ†é”€é‡‘é¢è®°å½•
        this.addShopIntegral(goodsorder);
    }
    public void addShopIntegral(Goodsorder goodsorder){
        if(Objects.isNull(goodsorder.getDistributionShopId())){
            return;
        }
        List<GoodsorderDetail> detailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
                .isNotNull(GoodsorderDetail::getShopSettlement)
        );
        if(CollectionUtils.isNotEmpty(detailList)){
            BigDecimal settlement = detailList.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(settlement);
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_SETTLEMENT);
            integralService.dealShopIntegral(dealIntegralRequest);
        }
    }
    @Override
@@ -1533,4 +1723,52 @@
    @Override
    public HomeInfoResponse getHomeInfo(int memberId){
        HomeInfoResponse homeInfoResponse = new HomeInfoResponse();
        Member member = memberMapper.selectById(memberId);
        if(Objects.isNull(member)){
            return homeInfoResponse;
        }
        homeInfoResponse.setMember(member);
        homeInfoResponse.setWaitReceiveNum(
                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getMemberId,member.getId())
                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey()))
        );
        homeInfoResponse.setWaitPayNum(
                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getMemberId,member.getId())
                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey()))
        );
        homeInfoResponse.setCartTypeNum(
                shopcartMapper.selectCount(new QueryWrapper<Shopcart>().lambda()
                        .eq(Shopcart::getIsdeleted,Constants.ZERO)
                        .eq(Shopcart::getMemberId,member.getId()))
        );
        homeInfoResponse.setCouponNum(
                memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
                        .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
                        .eq(MemberCoupon::getMemberId,member.getId())
                        .eq(MemberCoupon::getStatus,Constants.ZERO)
                        .apply(" end_date >now() ")
                )
        );
        homeInfoResponse.setCollectNum(
                collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                        .eq(Collect::getIsdeleted,Constants.ZERO)
                        .eq(Collect::getMemberId,member.getId())
                )
        );
        return homeInfoResponse;
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -10,10 +10,12 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.IntegralMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.ShopMapper;
import com.doumee.dao.business.join.IntegralJoinMapper;
import com.doumee.dao.business.model.Fund;
import com.doumee.dao.business.model.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.web.dto.IntegralDTO;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.service.business.AreasService;
@@ -58,6 +60,9 @@
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private ShopMapper shopMapper;
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    @Override
@@ -150,6 +155,7 @@
        integral.setNum(dealIntegralRequest.getIntegralNum());
        integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? member.getIntegral().add(integral.getNum()):member.getIntegral().subtract(integral.getNum()));
        integral.setOrderCode(dealIntegralRequest.getOrderCode());
        integral.setUserType(Constants.ZERO);
        integralMapper.insert(integral);
        if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
            memberMapper.addIntegral(member.getId(),dealIntegralRequest.getIntegralNum(),
@@ -160,7 +166,35 @@
        return integral.getId();
    }
    @Override
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    public Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest) {
        Shop shop = shopMapper.selectById(dealIntegralRequest.getMemberId());
        if(Objects.isNull(shop)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到商户信息");
        }
        Integral integral = new Integral();
        integral.setMemberId(shop.getId());
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
        integral.setNum(dealIntegralRequest.getIntegralNum());
        integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? shop.getIntegral().add(integral.getNum()):shop.getIntegral().subtract(integral.getNum()));
        integral.setOrderCode(dealIntegralRequest.getOrderCode());
        integral.setUserType(Constants.ONE);
        integralMapper.insert(integral);
        if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
            shopMapper.addIntegral(shop.getId(),dealIntegralRequest.getIntegralNum(),
                    dealIntegralRequest.getIntegralObjType().getAddTitle()==Constants.ZERO?dealIntegralRequest.getIntegralNum():BigDecimal.ZERO);
        }else{
            shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum());
        }
        return integral.getId();
    }
    @Override
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.dto.MemberCouponDTO;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.response.MemberCouponResponse;
import com.doumee.dao.web.response.goods.OrderGoodsCalculateResponse;
import com.doumee.service.business.MemberCouponService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -24,6 +25,7 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -52,6 +54,10 @@
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
    private LabelsMapper labelsMapper;
    @Autowired
    private CouponMapper couponMapper;
@@ -202,11 +208,13 @@
     * @return
     */
    @Override
    public IPage<CouponDTO> memberCouponPage(IPage pages, BigDecimal price, Integer memberId,Integer couponType) {
        IPage<CouponDTO> page = memberCouponMapper.memberCouponPage(pages,new QueryWrapper<CouponDTO>()
    public IPage<MemberCouponResponse> memberCouponPage(IPage pages, BigDecimal price, Integer memberId,Integer couponType,Integer status) {
        IPage<MemberCouponResponse> page = memberCouponMapper.memberCouponPage(pages,new QueryWrapper<MemberCouponResponse>()
                .eq("m.MEMBER_ID",memberId)
                .eq("m.TYPE",Constants.ONE)
                .eq("m.STATUS",Constants.ZERO)
                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.ZERO),"m.STATUS = 0 and m.END_DATE >= now()" )
                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.ONE),"m.STATUS = 1" )
                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.TWO),"m.STATUS = 0 and  m.END_DATE < now() " )
                .eq("TYPE",couponType)
                .apply(!Objects.isNull(price)," m.LIMIT_PRICE >= "+price+" ")
                .apply("   now() between m.START_DATE and m.END_DATE ")
@@ -216,6 +224,37 @@
    }
    @Override
    public MemberCouponResponse getMemberCouponDetail(Integer id){
        MemberCoupon memberCoupon = memberCouponJoinMapper.selectById(id);
        if(Objects.isNull(memberCoupon)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        MemberCouponResponse memberCouponResponse = new MemberCouponResponse();
        BeanUtils.copyProperties(memberCoupon,memberCouponResponse);
        if(StringUtils.isNotBlank(memberCouponResponse.getApplyIds())){
            if(Constants.equalsInteger(memberCouponResponse.getApplyType(),Constants.ONE)){
                List<Labels> labelsList = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
                        .eq(Labels::getIsdeleted,Constants.ZERO)
                        .eq(Labels::getType,Constants.LabelsType.GOODSTYPE.getKey())
                        .apply(" find_in_set( id , '"+memberCouponResponse.getApplyIds()+"'  ) ")
                );
                if(CollectionUtils.isNotEmpty(labelsList)){
                    memberCouponResponse.setRelationInfoList(labelsList.stream().map(i->i.getName()).collect(Collectors.toList()));
                }
            }else if(Constants.equalsInteger(memberCouponResponse.getApplyType(),Constants.TWO)){
                List<Goods> labelsList = goodsMapper.selectList(new QueryWrapper<Goods>().lambda()
                        .eq(Goods::getIsdeleted,Constants.ZERO)
                        .apply(" find_in_set( id , '"+memberCouponResponse.getApplyIds()+"'  ) ")
                );
                if(CollectionUtils.isNotEmpty(labelsList)){
                    memberCouponResponse.setRelationInfoList(labelsList.stream().map(i->i.getName()).collect(Collectors.toList()));
                }
            }
        }
        return memberCouponResponse;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -20,16 +20,19 @@
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.WxMiniConfig;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.model.Areas;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Smsrecord;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.MemberRechargeDTO;
import com.doumee.dao.web.dto.MemberOwnDTO;
import com.doumee.dao.web.dto.shop.Position;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.request.DealIntegralRequest;
import com.doumee.dao.web.request.UpdMobileRequest;
import com.doumee.dao.web.request.UpdateMemberRequest;
import com.doumee.dao.web.request.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
@@ -74,6 +77,9 @@
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private SmsrecordMapper smsrecordMapper;
    @Autowired
@@ -328,6 +334,12 @@
    @Override
    public Member updateMember(UpdateMemberRequest updateMemberRequest){
        if(StringUtils.isBlank(updateMemberRequest.getImgurl())
                && StringUtils.isBlank(updateMemberRequest.getNickname())
                && StringUtils.isBlank(updateMemberRequest.getName())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member  = new Member();
        BeanUtils.copyProperties(updateMemberRequest,member);
        member.setId(updateMemberRequest.getMemberId());
@@ -339,6 +351,9 @@
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+dbMember.getImgurl());
        return dbMember;
    }
    @Override
    public MemberOwnDTO getMemberOwnDTO(Integer memberId) {
@@ -405,6 +420,68 @@
        memberMapper.updateById(member);
    }
    @Override
    public void verifyUserPhone(UpdMobileRequest request){
        if(Objects.isNull(request)
                || Objects.isNull(request.getMemberId())
                || StringUtils.isBlank(request.getPhone())
                || StringUtils.isBlank(request.getCode())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member = memberMapper.selectById(request.getMemberId());
        if(StringUtils.isNotBlank(member.getPhone())&&!member.getPhone().equals(request.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号错误");
        }
        this.verifyPhoneCode(request.getCode(),request.getMemberId());
    }
    public void verifyPhoneCode(String code,Integer memberId){
        //验证码
        Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper<Smsrecord>().lambda()
                .eq(Smsrecord::getIsdeleted,Constants.ZERO)
                .eq(Smsrecord::getCode,code)
                .eq(Smsrecord::getMemberId,memberId)
                .last(" limit 1")
        );
        if(Objects.isNull(smsrecord)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码错误!");
        }
        if(!Constants.equalsInteger(smsrecord.getStatus(),Constants.ZERO)){
            if(Constants.equalsInteger(smsrecord.getStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已使用");
            }else{
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码已过期");
            }
        }
        smsrecordMapper.update(new UpdateWrapper<Smsrecord>().lambda()
                .set(Smsrecord::getStatus,Constants.ONE)
                .eq(Smsrecord::getId,smsrecord.getId())
        );
    }
    @Override
    public void updateUserPhone(UpdMobileRequest request){
        if(Objects.isNull(request)
        || Objects.isNull(request.getMemberId())
        || StringUtils.isBlank(request.getPhone())
        || StringUtils.isBlank(request.getCode())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Member member = memberMapper.selectById(request.getMemberId());
        if(StringUtils.isNotBlank(member.getPhone())&&member.getPhone().equals(request.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无法更换相同手机号");
        }
        this.verifyPhoneCode(request.getCode(),request.getMemberId());
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .eq(Member::getPhone,request.getPhone())
                .eq(Member::getId,request.getMemberId())
        );
    }
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    @Override
    public Integer importMemberRechargeBatch(MultipartFile file) {
server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.doumee.api.web.mall;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.doumee.api.web.ApiController;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.dao.web.request.PageRequest;
import com.doumee.dao.web.request.UpdMobileRequest;
import com.doumee.dao.web.response.HomeInfoResponse;
import com.doumee.dao.web.response.OrderDetailResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/12/15 13:59
 */
@Api(tags = "个人中心")
@Trace(exclude = true)
@RestController
@RequestMapping("/web/home")
@Slf4j
public class HomeApi extends ApiController {
    @LoginRequired
    @ApiOperation("我的信息")
    @GetMapping("/myInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<HomeInfoResponse> myInfo() {
        return ApiResponse.success("查询成功",goodsorderService.getHomeInfo(getMemberId()));
    }
    @LoginRequired
    @ApiOperation("验证手机号")
    @PostMapping("/verifyUserPhone")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse verifyUserPhone(@RequestBody UpdMobileRequest request) {
        memberService.verifyUserPhone(request);
        return ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation("更换绑定手机号")
    @PostMapping("/updateUserPhone")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse updateUserPhone(@RequestBody UpdMobileRequest request) {
        memberService.updateUserPhone(request);
        return ApiResponse.success("操作成功");
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
@@ -17,19 +17,24 @@
import com.doumee.dao.web.request.OrderPayRequest;
import com.doumee.dao.web.request.PageRequest;
import com.doumee.dao.web.request.PayDetailRequest;
import com.doumee.dao.web.request.ShopOrderPayRequest;
import com.doumee.dao.web.request.goods.DealOrderRequest;
import com.doumee.dao.web.request.goods.MemberOrderRequest;
import com.doumee.dao.web.request.goods.OrderCommentRequest;
import com.doumee.dao.web.response.MemberCouponResponse;
import com.doumee.dao.web.response.MyPageResponse;
import com.doumee.dao.web.response.OrderCommentResponse;
import com.doumee.dao.web.response.OrderDetailResponse;
import com.doumee.dao.web.response.goods.MemberOrderResponse;
import com.doumee.dao.web.response.goods.PayResponse;
import com.doumee.service.business.HotCityService;
import com.doumee.service.business.impl.MemberCouponServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -86,12 +91,25 @@
            @ApiImplicitParam(paramType = "query", dataType = "Long", name = "current", value = "页码", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Long", name = "size", value = "每页记录数", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "couponType", value = "优惠券类别:0商家优惠券 1平台优惠券", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "满额", required = false)
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "limitPrice", value = "满额", required = false),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "status", value = "状态:0=未使用;1=已使用;2=已过期", required = false)
    })
    public ApiResponse<IPage<CouponDTO>> memberCouponPage(PageRequest pageable, Integer couponType, BigDecimal limitPrice) {
        IPage<CouponDTO> page = memberCouponService.memberCouponPage(pageable.toPage(),limitPrice,getMemberId(),couponType);
    public ApiResponse<IPage<MemberCouponResponse>> memberCouponPage(PageRequest pageable, Integer couponType, BigDecimal limitPrice, Integer status) {
        IPage<MemberCouponResponse> page = memberCouponService.memberCouponPage(pageable.toPage(),limitPrice,getMemberId(),couponType,status);
        return ApiResponse.success("查询成功",page);
    }
    @LoginRequired
    @ApiOperation("会员优惠券详情")
    @GetMapping("/memberCouponDetail")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "主键", required = true)
    })
    public ApiResponse<MemberCouponResponse> memberCouponDetail(Integer id) {
        return ApiResponse.success("查询成功",memberCouponService.getMemberCouponDetail(id));
    }
//    @LoginRequired
//    @ApiOperation("可用优惠券数量")
@@ -128,15 +146,18 @@
        return ApiResponse.success("查询成功",page);
    }
    @Autowired
    public MemberCouponServiceImpl memberCouponServiceImpl;
    @LoginRequired
    @ApiOperation("订单支付")
    @PostMapping("/orderPay")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<PayResponse> orderPay(@Valid @RequestBody  OrderPayRequest orderPayRequest) {
        orderPayRequest.setMemberId(getMemberId());
        return ApiResponse.success("操作成功", goodsorderService.orderPay(orderPayRequest));
    public ApiResponse<PayResponse> orderPay(@Valid @RequestBody  ShopOrderPayRequest request) {
        request.setMemberId(getMemberId());
        return ApiResponse.success("操作成功", goodsorderService.orderPay(request, memberCouponServiceImpl));
    }
    @LoginRequired
@@ -161,7 +182,7 @@
    }
    @LoginRequired
    @ApiOperation("我的订单列表")
    @ApiOperation("订单列表")
    @PostMapping("/orderPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
@@ -191,7 +212,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse cancelOrder(@RequestBody DealOrderRequest dealOrderRequest) {
        goodsorderService.cancelOrder(dealOrderRequest.getOrderId(),getMemberId(),dealOrderRequest.getCancelInfo());
        goodsorderService.cancelOrderNew(dealOrderRequest.getOrderId(),getMemberId(),dealOrderRequest.getCancelInfo());
        return ApiResponse.success("操作成功");
    }
@@ -219,6 +240,30 @@
    @LoginRequired
    @ApiOperation("订单核销")
    @PostMapping("/writeOffOrder")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse writeOffOrder(@RequestBody DealOrderRequest dealOrderRequest) {
        goodsorderService.orderWriteOff(dealOrderRequest.getExchangeCode(),getMemberId());
        return ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation("订单删除")
    @PostMapping("/delOrder")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse delOrder(@RequestBody DealOrderRequest dealOrderRequest) {
        goodsorderService.delOrder(dealOrderRequest.getOrderId(),getMemberId());
        return ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation("订单评论")
    @PostMapping("/orderComment")
    @ApiImplicitParams({
server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java
@@ -113,7 +113,9 @@
                        goodsOrder.setPayStatus(Constants.ONE);
                        goodsOrder.setPayDate(new Date());
                        goodsOrder.setPayOrderId(paymentNo);
                        goodsOrder.setStatus(Constants.equalsInteger(goodsOrder.getReceiveType(),Constants.ZERO)?Constants.OrderStatus.PAY_DONE.getKey():Constants.OrderStatus.WAIT_RECEIVE.getKey());
                        goodsOrder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
                        //生成核销码
                        goodsOrder.setExchangeCode(Constants.equalsInteger(goodsOrder.getReceiveType(),Constants.ZERO)?null:Constants.getRandomNumber());
                        goodsOrder.setPayMethod(Constants.ZERO);
                        goodsorderService.updateById(goodsOrder);
                        Fund fund = new Fund();