rk
2026-02-26 df587a823a6d61f178e43cac10403218b06c3646
小程序   接口开发
已添加1个文件
已修改46个文件
737 ■■■■ 文件已修改
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsSkuMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Activity.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Collect.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/OrderPayConfirmRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/CollectResponse.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/CollectService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/CollectApi.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/GoodsApi.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
@@ -73,7 +73,7 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:shop:update")
    public ApiResponse updateById(@RequestBody Shop shop) {
    public ApiResponse updateById(@RequestBody Shop shop) throws Exception {
        shopService.updateById(shop);
        return ApiResponse.success(null);
    }
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -2,10 +2,7 @@
import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor;
import com.doumee.core.wx.WxMiniConfig;
import com.doumee.dao.business.model.Areas;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.ByteArrayInputStream;
@@ -13,8 +10,6 @@
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
public class Constants {
@@ -899,7 +894,6 @@
        ORDER_DONE_AMOUNT(16,"订单结算","${param1}订单结算成功,获得¥${param}",0,1),//${param}订单编号,${param1}金额
        WITHDRAW_APPLY(17,"余额提现","余额提现已提交,消耗¥${param}",0,1),
        WITHDRAW_APPLY_BACK(19,"提现退回","余额提现失败,获得¥${param}",0,1),
//        ORDER_DONE_AMOUNT_BACK(20,"订单结算退回","${param1}订单结算退回,消耗¥${param}元",0,1),//${param}订单编号,${param1}金额
        SHOP_ORDER_REFUND_CASH(25,"订单退款","${param1}订单退款,扣除结算金额¥${param}",0,0),
@@ -1319,7 +1313,7 @@
        // åœºæ™¯ç ï¼Œä¸Žå‰ç«¯çº¦å®šï¼Œæœ€ç»ˆæ˜¯éœ€è¦å‰ç«¯è§£æž
        body.put("scene", scene);
        // æ­£å¼ç‰ˆä¸º "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
        String env_version = "release";
        String env_version = "develop";
        body.put("env_version", env_version);
        if(isUsePage){
            body.put("page", page);
@@ -1359,4 +1353,12 @@
        }
        return null;
    }
    public static String getBankInfo(String bankName, String bankAccount){
        return bankName + "("+
                        bankAccount.
                                replaceAll("^.*(.{4})$", "$1")
                        + ")";
    }
}
server/dmmall_service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java
@@ -325,6 +325,53 @@
    }
    /**
     * ç”Ÿæˆåˆ†äº«å›¾ç‰‡
     * @param headImg å¤´éƒ¨å›¾ç‰‡
     * @param wxQrCodeImg å¾®ä¿¡å°ç¨‹åºäºŒç»´ç 
     * @return
     * @throws Exception
     */
    public static InputStream generateShopImg(String headImg,InputStream wxQrCodeImg) throws Exception {
        BufferedImage bi =  new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g2.fillRect(0, 0, width, height);
        //背景图片
//        BufferedImage titles = ImageIO.read(new URL(bg));
//        g2.drawImage(titles, 1, 1, 894, 1305, null);
//        g2.drawRect(0, 0, width - 1, height - 1);
        //头部图片
        BufferedImage headBg = ImageIO.read(new URL(headImg));
//        BufferedImage headBg = getImgIO(imgurl);
        g2.drawImage(headBg, 1, 1, 894, 1080, null);
        g2.drawRect(0, 0, width - 1, height - 1);
        g2.setColor(Color.black);
        g2.setFont(new Font("黑体", Font.PLAIN, 40));
        g2.drawString("长按识别小程序", 46, 1180);
        g2.setColor(Color.gray);
        g2.setFont(new Font("黑体", Font.PLAIN, 32));
        g2.drawString("查看更多精彩内容", 48, 1230);
        //设置二维码图片
//        BufferedImage barcodeCode = ImageIO.read(new URL(wxQrCodeImg));
        BufferedImage barcodeCode = getImgIO(wxQrCodeImg);
        g2.drawImage(barcodeCode, 670, 1100, 180, 180,null);
        g2.drawRect(0, 0, width - 1, height - 1);
        InputStream inputStream = bufferedImageToInputStream(bi);
        return inputStream;
//        String fileName = "8701EAC36DEC405A94C530F0E6796589.jpg"; //ID.nextGUID() + ".jpg";
//        GeneratePicUtil.saveFile(inputStream, filePath+ File.separator+fileName);
//        return filePath + File.separator+ fileName;
    }
    /**
     * å›¾ç‰‡è®¾ç½®åœ†è§’
     * @param srcImage
     * @return
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java
@@ -20,7 +20,7 @@
    @Select(" select g.* , " +
            "(( select sum(gd.goods_num) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.`id`  )+ g.SALENUM) as realSaleNum ," +
            "(( select count(1) from goodsorder_detail gd inner join goods_sku gs on gd.GOODS_SKU_ID = gs.id where gs.GOODS_ID = g.`id`  )+ g.SALENUM) as realSaleNum ," +
            //"( select gs.id from goods_sku gs where gs.GOODS_ID = g.id  limit 1 ) as realSaleNum ," +
            " ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = g.id ),0) as minPrice  " +
            " from goods g  " +
@@ -36,9 +36,9 @@
    GoodsInfoResponse getGoodsInfo(@Param("id") Integer id);
    @Select(" select g.* , gs.price as minPrice " +
            " ifnull( ( select   sgr.PRICE from shop_goods_relation sgr where sgr.GOODS_SKU_ID = gs.ID and sgr.ISDELETED = 0 and sgr.`STATUS` = 0  and sgr.SHOP_ID = #{shopId} ) ,0) as exFactoryPrice " +
            " ifnull(( select sum(gd.goods_num) from goodsorder_detail gd  left  join goodsorder go on gd.ORDER_ID = go.id  where gd.GOODS_SKU_ID = gs.`id` and  go.DISTRIBUTION_SHOP_ID = 1 ),0) as realSaleNum " +
    @Select(" select g.* , gs.price as minPrice, " +
            " ifnull( ( select   sgr.PRICE from shop_goods_relation sgr where sgr.GOODS_SKU_ID = gs.ID and sgr.ISDELETED = 0 and sgr.`STATUS` = 0  and sgr.SHOP_ID = #{shopId} ) ,0) as exFactoryPrice ," +
            " ifnull(( select sum(gd.NAME) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where gd.GOODS_SKU_ID = gs.`id` and  go.DISTRIBUTION_SHOP_ID = #{shopId} ),0) as realSaleNum " +
            " from goods g left join goods_sku gs on g.id = gs.GOODS_ID " +
            " ${ew.customSqlSegment} ")
    IPage<GoodsInfoResponse> goodsPageForShop(IPage<GoodsRequest> page, @Param(Constants.WRAPPER) Wrapper wrapper,@Param("shopId") Integer shopId);
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsSkuMapper.java
@@ -20,7 +20,7 @@
     * @param goodsId
     * @return
     */
    @Select(" select s.* , g.IMGURL as goodsImgUrl from goods_sku s  left join goods g on s.GOODS_ID = g.id  where s.goods_Id = #{goodsId} ")
    @Select(" select s.* , g.IMGURL as goodsImgUrl from goods_sku s  left join goods g on s.GOODS_ID = g.id  where   s.isdeleted = 0 and  s.goods_Id = #{goodsId} ")
    List<GoodsSkuResponse> getSkuResponseList(@Param("goodsId") Integer goodsId);
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Activity.java
@@ -166,7 +166,6 @@
    @TableField(exist = false)
    private Integer zanCount;
    @ApiModelProperty(value = "是否点赞:0=否;1=是")
    @TableField(exist = false)
    private Integer zanStatus;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Collect.java
@@ -111,6 +111,10 @@
    private String content;
    @ApiModelProperty(value = "社区封面图")
    @TableField(exist = false)
    private String activityImgurl;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
@@ -102,11 +102,26 @@
    @TableField(exist = false)
    private Date endtime;
    @ApiModelProperty(value = "交易类型")
    @TableField(exist = false)
    @ExcelColumn(name="交易类型",index =5,width = 10)
    private String strObjType;
    @TableField(exist = false)
    @ApiModelProperty(value = "提现状态::0=审批中;1=审批通过;2=审批驳回")
    private Integer withdrawStatus;
    @ApiModelProperty(value = "总收入 ")
    @TableField(exist = false)
    private BigDecimal inAmount;
    @ApiModelProperty(value = "总支出 ")
    @TableField(exist = false)
    private BigDecimal outAmount;
//    public static  Integral createIntegral(Integer memberId, Constants.INTEGRAL_TYPE integralType,Integer objId){
//        Integral integral = new Integral();
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -88,7 +88,7 @@
    @ExcelColumn(name="积分累计获得",width = 10,index = 6)
    private BigDecimal totalIntegral;
    @ApiModelProperty(value = "状态0正常 1异常", example = "1")
    @ApiModelProperty(value = "状态0正常 1异常 2注销", example = "1")
    @ExcelColumn(name="状态",width = 10,index =9,valueMapping = "0=启用;1=禁用")
    private Integer status;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberBank.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -71,4 +72,10 @@
    @ExcelColumn(name="是否默认 0否 1是")
    private Integer isDefault;
    @ApiModelProperty(value = "银行名称信息")
    @TableField(exist = false)
    private String bankInfo;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/WithdrawRecord.java
@@ -69,6 +69,8 @@
    @ExcelColumn(name="银行名称")
    private String bankName;
    @ApiModelProperty(value = "银行账户")
    @ExcelColumn(name="银行账户")
    private String bankAccount;
@@ -119,4 +121,8 @@
    @ApiModelProperty(value = "结束时间 ")
    @TableField(exist = false)
    private Date endtime;
    @ApiModelProperty(value = "银行名称信息")
    @TableField(exist = false)
    private String bankInfo;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java
@@ -1,6 +1,7 @@
package com.doumee.dao.web.dto;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -19,7 +20,21 @@
    @ApiModelProperty(value = "数据类型:0=消费者积分;1=经销商积分;2=经销商结算金额;")
    private Integer userType;
    @ApiModelProperty(value = "获取类型:16=订单结算;17=余额提现;19=提现退回;25=订单退款;")
    private Integer objType;
    @ApiModelProperty(value = "用户主键或商户主键",hidden = true)
    private Integer memberId;
    @ApiModelProperty(value = "开始日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private String startDate;
    @ApiModelProperty(value = "结束日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private String endDate;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java
@@ -22,7 +22,7 @@
    private Integer memberId;
    @ApiModelProperty(value = "用户昵称" )
    private String memberNikeName;
    private String nikeName;
    @ApiModelProperty(value = "用户昵称" )
    private String memberImgUrl;
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopListDTO.java
@@ -12,8 +12,8 @@
@ApiModel("小程序 é€‰æ‹©å•†æˆ·è¯·æ±‚ç±»")
public class ShopListDTO {
    @ApiModelProperty(value = "城市主键", example = "1")
    private Integer cityId;
    @ApiModelProperty(value = "城市名称", example = "1")
    private String cityName;
    @ApiModelProperty(value = "定位维度", example = "1")
    private String lat;
    @ApiModelProperty(value = "定位经度", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/web/request/WxPhoneRequest.java
@@ -40,6 +40,8 @@
    @ApiModelProperty(value = "邀请码")
    private String recId;
    private Integer recId;
    @ApiModelProperty(value = "商户主键")
    private Integer shopId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/OrderPayConfirmRequest.java
@@ -32,7 +32,7 @@
    @ApiModelProperty(value = "优惠券主键", example = "1")
    private Integer couponId;
    @ApiModelProperty(value = "是否使用积分", example = "1")
    @ApiModelProperty(value = "是否使用积分:0=否;1=是;", example = "1")
    private Integer useIntegral;
    @ApiModelProperty(value = "用户主键" ,hidden = true)
server/dmmall_service/src/main/java/com/doumee/dao/web/response/CollectResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.web.response;
import com.doumee.dao.business.model.Member;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/23 9:25
 */
@Data
@ApiModel("收藏数量返回信息")
public class CollectResponse implements Serializable {
    @ApiModelProperty(value = "商品数量")
    private Long goodsNum;
    @ApiModelProperty(value = "社区数量")
    private Long activityNum;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/IntegralDataResponse.java
@@ -26,4 +26,13 @@
    @ApiModelProperty(value = "积分说明")
    private String info;
    @ApiModelProperty(value = "已提现余额")
    private BigDecimal withdrawAmount;
    @ApiModelProperty(value = "待结算余额")
    private BigDecimal waitPayAmount;
    @ApiModelProperty(value = "提现中余额")
    private BigDecimal withdrawIngAmount;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java
@@ -77,4 +77,8 @@
    @ApiModelProperty(value = "省市区")
    private Areas areas;
    @ApiModelProperty(value = "可提现余额")
    private BigDecimal amount;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsInfoResponse.java
@@ -88,7 +88,11 @@
    @ApiModelProperty(value = "收藏状态:0=未收藏;1=已收藏")
    private Integer collectStatus;
    @ApiModelProperty(value = "适用品牌ID集合,([1],[2])")
    private String brandIds ;
    @ApiModelProperty(value = "适用品牌名称")
    private String brandNames ;
//    @ApiModelProperty(value = "商品标签")
//    private List<Labels> labelsList;
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderGoodsCalculateResponse.java
@@ -53,40 +53,37 @@
    private BigDecimal skuPrice;
    @ApiModelProperty(value = "sku总金额")
    private BigDecimal skuAmount;
    private BigDecimal skuAmount ;
    @ApiModelProperty(value = "sku实付总金额")
    private BigDecimal skuPayAmount;
    private BigDecimal skuPayAmount = BigDecimal.ZERO;
    @ApiModelProperty(value = "skuId")
    private Integer skuId;
    @ApiModelProperty(value = "订单中优惠券金额占比", hidden = true)
    private BigDecimal orderCouponRata;
    private BigDecimal orderCouponRata = BigDecimal.ZERO;
    @ApiModelProperty(value = "优惠券抵扣金额", hidden = true)
    private BigDecimal couponDeductCash;
    private BigDecimal couponDeductCash = BigDecimal.ZERO;
    @ApiModelProperty(value = "是否可以使用优惠券", hidden = true)
    private Boolean useCoupon;
    @ApiModelProperty(value = "sku图片")
    private String skuImg;
    @ApiModelProperty(value = "积分最大可抵扣金额", hidden = true)
    private BigDecimal integralMaxDeductCash;
    private BigDecimal integralMaxDeductCash  = BigDecimal.ZERO;
    @ApiModelProperty(value = "积分实际抵扣金额", hidden = true)
    private BigDecimal integralDeductCash;
    private BigDecimal integralDeductCash = BigDecimal.ZERO;
    @ApiModelProperty(value = "实际使用积分", hidden = true)
    private BigDecimal integralDeduct;
    private BigDecimal integralDeduct = BigDecimal.ZERO;
    @ApiModelProperty(value = "订单中积分金额实际占比", hidden = true)
    private BigDecimal orderIntegralRata;
    private BigDecimal orderIntegralRata = BigDecimal.ZERO;
    @ApiModelProperty(value = "库存量")
    private BigDecimal stockNum;
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/OrderPayConfirmResponse.java
@@ -36,9 +36,6 @@
    @ApiModelProperty(value = "剩余积分值", example = "1")
    private BigDecimal surplusIntegral;
    @ApiModelProperty(value = "邮费金额", example = "1")
    private BigDecimal mailAmount;
server/dmmall_service/src/main/java/com/doumee/service/business/CollectService.java
@@ -5,6 +5,7 @@
import com.doumee.dao.business.model.Collect;
import com.doumee.dao.web.dto.CollectDTO;
import com.doumee.dao.web.request.CollectSaveRequest;
import com.doumee.dao.web.response.CollectResponse;
import java.util.List;
import java.util.Map;
@@ -109,5 +110,7 @@
    void saveCollect(CollectSaveRequest request, Integer memberId);
    List<Collect> myCollect(Integer memberId,Integer type);
    PageData<Collect> myCollectPage(PageWrap<Collect> pageWrap,Integer memberId);
    CollectResponse getCollectNum(Integer memberId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
@@ -16,7 +16,7 @@
    InviteInfoResponse getInviteInfo(Integer memberId);
    String createShareImg(Integer userType,Integer memberId) throws Exception;
    String createShareImg(Integer userType,Integer memberId,String posterImg) throws Exception;
    String createShopMiniProgramCode(Integer shopId) throws Exception;
    /**
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -200,4 +200,6 @@
    void logOut(String token,Integer memberId);
    void logOff(String token,Integer memberId);
    void bindShopInfo(Integer memberId,Integer recId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -60,7 +60,7 @@
     *
     * @param shop å®žä½“对象
     */
    void updateById(Shop shop);
    void updateById(Shop shop) throws Exception;
    void updateIsRecById(Shop shop);
@@ -71,7 +71,7 @@
     *
     * @param shops å®žä½“集
     */
    void updateByIdInBatch(List<Shop> shops);
//    void updateByIdInBatch(List<Shop> shops);
    /**
     * æ”¯æŒç»´æŠ¤åº—铺信息
server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java
@@ -102,5 +102,5 @@
     * @param request
     * @param integralService
     */
    void withdrawApply(WithdrawApplyRequest request, IntegralService integralService);
    Integer withdrawApply(WithdrawApplyRequest request, IntegralService integralService);
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java
@@ -16,6 +16,8 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CollectDTO;
import com.doumee.dao.web.request.CollectSaveRequest;
import com.doumee.dao.web.request.ShopOrderRequest;
import com.doumee.dao.web.response.CollectResponse;
import com.doumee.service.business.CollectService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -222,51 +224,66 @@
    @Override
    public List<Collect> myCollect(Integer memberId,Integer type){
        List<Collect> collectList = new ArrayList<>();
        if(Constants.equalsInteger(type,Constants.ZERO)){
            collectList = collectMapper.selectJoinList(Collect.class,new MPJLambdaWrapper<Collect>()
                            .selectAll(Collect.class)
                            .selectAs(Goods::getName,Collect::getName)
                            .selectAs(Goods::getPrice,Collect::getPrice)
                            .selectAs(Goods::getImgurl,Collect::getImgurl)
                            .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t1.id ),0) ", Collect::getLinePrice)
                            .leftJoin(Goods.class,Goods::getId,Collect::getObjId)
    public PageData<Collect> myCollectPage(PageWrap<Collect> pageWrap,Integer memberId){
        IPage<Collect> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Utils.MP.blankToNull(pageWrap.getModel());
        Collect model = pageWrap.getModel();
        if(Constants.equalsInteger(model.getObjType(),Constants.ONE)){
            IPage<Collect> result = collectMapper.selectJoinPage(page, Collect.class, new MPJLambdaWrapper<Collect>()
                    .selectAll(Collect.class)
                    .selectAs(Goods::getName,Collect::getName)
                    .selectAs(Goods::getPrice,Collect::getPrice)
                    .selectAs(Goods::getImgurl,Collect::getActivityImgurl)
                    .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t1.id ),0) ", Collect::getLinePrice)
                    .leftJoin(Goods.class,Goods::getId,Collect::getObjId)
                    .eq(Collect::getIsdeleted,Constants.ZERO)
                    .eq(Collect::getMemberId,memberId)
                    .eq(Collect::getObjType,type)
                    .orderByDesc(Collect::getId)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(collectList)){
                    .eq(Collect::getObjType,Constants.ONE)
                    .orderByDesc(Collect::getId));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
                String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
                collectList.forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
                result.getRecords().forEach(s->s.setImgurl(StringUtils.isNotBlank(s.getActivityImgurl())?preFixPath+s.getActivityImgurl():null));
            }
            return PageData.from(result);
        }else{
            collectList = collectMapper.selectJoinList(Collect.class,new MPJLambdaWrapper<Collect>()
            IPage<Collect> result = collectMapper.selectJoinPage(page, Collect.class, new MPJLambdaWrapper<Collect>()
                    .selectAll(Collect.class)
                    .selectAs(Activity::getName,Collect::getName)
                    .selectAs(Activity::getCreateDate,Collect::getReleaseDate)
                    .selectAs(Activity::getLooknum,Collect::getReadNum)
                    .selectAs(Activity::getImgurl,Collect::getImgurl)
                    .selectAs(Activity::getImgurl,Collect::getActivityImgurl)
                    .selectAs(Labels::getName,Collect::getLabelName)
                    .selectAs(Activity::getContent,Collect::getContent)
                    .leftJoin(Activity.class,Activity::getId,Collect::getObjId)
                    .leftJoin(Labels.class,Labels::getId,Activity::getLabelId)
                    .eq(Collect::getIsdeleted,Constants.ZERO)
                    .eq(Collect::getMemberId,memberId)
                    .eq(Collect::getObjType,type)
                    .orderByDesc(Collect::getId)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(collectList)){
                    .eq(Collect::getObjType,Constants.ZERO)
                    .orderByDesc(Collect::getId));
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
                String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.ACTIVITY_FILE);
                collectList.forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
                collectList.stream().filter(s-> StringUtils.isNotBlank(s.getContent())).forEach(s->s.setContent(RichTextProcessor.extractPlainTextFromHtml(s.getContent())));
                result.getRecords().forEach(s->s.setImgurl(StringUtils.isNotBlank(s.getActivityImgurl())?preFixPath+s.getActivityImgurl():null));
                result.getRecords().stream().filter(s-> StringUtils.isNotBlank(s.getContent())).forEach(s->s.setContent(RichTextProcessor.extractPlainTextFromHtml(s.getContent())));
            }
            return PageData.from(result);
        }
        return collectList;
    }
    @Override
    public CollectResponse getCollectNum(Integer memberId){
        CollectResponse response = new CollectResponse();
        response.setGoodsNum( collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                .eq(Collect::getObjType,Constants.ONE)
                .eq(Collect::getMemberId,memberId)
        ));
        response.setActivityNum( collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                .eq(Collect::getObjType,Constants.ZERO)
                .eq(Collect::getMemberId,memberId)
        ));
        return response;
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java
@@ -89,6 +89,7 @@
            target.setReplyId(reply.getId());
            target.setReplyMemberId(reply.getMemberId());
            target.setCommentId(reply.getId());
            target.setCommentMemberId(reply.getMemberId());
            target.setType(Constants.ONE);
        }
@@ -264,7 +265,7 @@
        replyWrapper.selectAs(Comment::getCommentId,ActivityReplyCommentDTO::getCommentId);
        replyWrapper.selectAs(Comment::getMemberId,ActivityReplyCommentDTO::getMemberId);
        replyWrapper.selectAs(Comment::getContent,ActivityReplyCommentDTO::getContent);
        replyWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getMemberNikeName);
        replyWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getNikeName);
        replyWrapper.selectAs(Member::getImgurl,ActivityReplyCommentDTO::getMemberImgUrl);
        replyWrapper.selectCount(Comment::getId,ActivityReplyCommentDTO::getReplyCount);
        replyWrapper.selectMin(Comment::getCreateDate,ActivityReplyCommentDTO::getCreateDate);
@@ -324,7 +325,7 @@
        MPJLambdaWrapper<Comment> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Comment.class);
        queryWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getMemberNikeName);
        queryWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getNikeName);
        queryWrapper.selectAs(Member::getImgurl,ActivityReplyCommentDTO::getMemberImgUrl);
        if(Objects.isNull(pageWrap.getModel().getMemberId())){
            queryWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus);
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -984,14 +984,32 @@
                goodsMapper.goodsPageForShop(pageWrap.toPage(),wrapper,model.getShopId()) ;
        if (!CollectionUtils.isEmpty(page.getRecords())){
            String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
            for (GoodsInfoResponse goodsInfoResponse:page.getRecords()
                 ) {
                goodsInfoResponse.setImgurl(StringUtils.isNotBlank(goodsInfoResponse.getImgurl())?(preFixPath+goodsInfoResponse.getImgurl()):null);
                //sku基础信息
                this.getSkuInfo(goodsInfoResponse);
                if(Objects.isNull(model.getShopId())){
                    //sku基础信息
                    this.getSkuInfo(goodsInfoResponse);
                }
                if(StringUtils.isNotBlank(goodsInfoResponse.getBrandIds())){
                    List<Labels> allBrands = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
                            .in(Labels::getId,getNumIdByIdsString(goodsInfoResponse.getBrandIds()))
                            .eq(Labels::getType,Constants.LabelsType.APPLICABLE_BRAND.getKey())
                            .eq(Labels::getIsdeleted,Constants.ZERO)
                    );
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(allBrands)){
                        goodsInfoResponse.setBrandNames(String.join("/",allBrands.stream().map(i->i.getName()).collect(Collectors.toList())));
                    }
                }
            }
        }
        if(StringUtils.isNotBlank(model.getGoodsName())&&Objects.nonNull(model.getMemberId())){
            searchHistoryMapper.delete(new QueryWrapper<SearchHistory>().lambda()
                    .eq(SearchHistory::getMemberId,model.getMemberId())
                    .eq(SearchHistory::getContent,model.getGoodsName())
            );
            SearchHistory searchHistory = new SearchHistory();
            searchHistory.setIsdeleted(Constants.ZERO);
            searchHistory.setContent(model.getGoodsName());
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -727,6 +727,8 @@
        goodsorder.setMemberId(member.getId());
        goodsorder.setType(Constants.ZERO);
        goodsorder.setStatus(Constants.ZERO);
        goodsorder.setReceiveType(orderPayRequest.getReceiveType());
        goodsorder.setCouponPrice(BigDecimal.ZERO);
        Shop shop = null;
        if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
            //查询收货地址
@@ -782,6 +784,7 @@
        payConfirmRequest.setAddressId(orderPayRequest.getAddressId());
        payConfirmRequest.setMemberId(member.getId());
        payConfirmRequest.setCouponId(orderPayRequest.getCouponId());
        payConfirmRequest.setUseIntegral(orderPayRequest.getUseIntegral());
        //通过支付确认接口获取生成支付信息
        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(payConfirmRequest,memberCouponService);
        if(Objects.isNull(orderPayConfirmResponse)){
@@ -793,6 +796,7 @@
        goodsorder.setIntegral(orderPayConfirmResponse.getIntegralAmount());
        goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount());
        goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE);
        goodsorder.setGoodsNum(orderPayRequest.getPayDetailRequestList().stream().mapToInt(PayDetailRequest::getGoodsNum).sum());
        if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
            sumPrice = sumPrice.subtract(orderPayConfirmResponse.getMemberCoupon().getPrice());
            goodsorder.setCouponId(orderPayConfirmResponse.getMemberCoupon().getId());
@@ -811,6 +815,7 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"无明细数据,请检查选择数据!");
        }
        List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
        BigDecimal shopSettlement = BigDecimal.ZERO;
        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
            //查询商品
            GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
@@ -843,6 +848,7 @@
            goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
            goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
            goodsOrderDetail.setOrderId(goodsorder.getId());
            goodsOrderDetail.setGoodsId(goodsSku.getGoodsId());
            //判断门店是否设置商品的价格信息
            if(Objects.nonNull(goodsorder.getDistributionShopId())){
@@ -856,7 +862,6 @@
                if(Objects.isNull(shopGoodsRelation)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,经销商未绑定["+goods.getName()+"]商品,请联系管理员!");
                }
                PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
                //经销商优惠承担占比
                BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
@@ -867,8 +872,11 @@
                if(shop.getSaleType().equals(Constants.ONE)){
                    goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
                }else {
                    //平台铺货
                    goodsOrderDetail.setShopSettlement(
                            shopGoodsRelation.getPrice().subtract(shopGoodsRelation.getPrice()).subtract(shopDeductAmount));
                            goodsOrderDetail.getPrice()
                                    .subtract(shopGoodsRelation.getPrice())
                                    .subtract(shopDeductAmount));
                }
                if(goodsOrderDetail.getShopSettlement().compareTo(BigDecimal.ZERO)<Constants.ZERO){
                    goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
@@ -876,12 +884,16 @@
            }else{
                goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
            }
            shopSettlement = shopSettlement.add(goodsOrderDetail.getShopSettlement());
            goodsOrderDetailList.add(goodsOrderDetail);
            //删除购物车商品
            shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
                    .eq(Shopcart::getMemberId,member.getId())
                    .eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
            );
        }
        if(CollectionUtils.isNotEmpty(goodsOrderDetailList)){
            goodsorderDetailMapper.insert(goodsOrderDetailList);
        }
        //积分变动记录
        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
@@ -899,6 +911,8 @@
        if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"商品价格发生变化,请刷新后重新支付!");
        }
        //存在现金支付
        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
            return this.wxPay(goodsorder,member);
@@ -906,6 +920,7 @@
        //无现金支付
        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                .set(Goodsorder::getStatus,Constants.ONE)
                .set(Goodsorder::getShopSettlement,shopSettlement)
                .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
                .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
                .set(Goodsorder::getId,goodsorder.getId())
@@ -993,7 +1008,7 @@
            request.setBody("平台商城");
            request.setAttach("shopGoods");
            request.setOutTradeNo(goodsorder.getCode().toString());
            request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
            request.setTotalFee(1);//BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
          //  request.setTotalFee(2);
            request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss"));
            request.setSpbillCreateIp(this.getIpAddr());
@@ -1244,8 +1259,7 @@
            fundMapper.insert(fund);
        }
        //订单已支付状态 ï¼Œ ä½¿ç”¨äº†ç§¯åˆ† ä¸”积分使用大于0
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO
                &&Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())){
        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
@@ -1291,6 +1305,8 @@
                memberCouponMapper.updateById(memberCoupon);
            }
        }
    }
    public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
@@ -1339,6 +1355,7 @@
        OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                new MPJLambdaWrapper<Goods>()
                        .selectAll(Goods.class)
                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
                        .selectAs(GoodsSku::getId,Goods::getSkuId)
                        .selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
@@ -1349,8 +1366,17 @@
        if(CollectionUtils.isEmpty(goodsList)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未匹配到商品信息");
        }
        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
        List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        for (OrderGoodsCalculateResponse orderGoodsCalculateResponse:goodsCalculateList) {
            orderGoodsCalculateResponse.setSkuImg(StringUtils.isNotBlank(orderGoodsCalculateResponse.getSkuImg())?fullUrl+orderGoodsCalculateResponse.getSkuImg():null);
            if(Objects.isNull(orderGoodsCalculateResponse.getCouponDeductCash())){
                orderGoodsCalculateResponse.setCouponDeductCash(BigDecimal.ZERO);
            }
//            orderGoodsCalculateResponse.setIntegralDeductCash(BigDecimal.ZERO);
        }
        //订单总金额
        BigDecimal amount = BigDecimal.ZERO;
        //优惠券抵扣金额
@@ -1383,7 +1409,7 @@
                if(CollectionUtils.isEmpty(memberCoupons)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"选择的优惠券无效,请刷新重试");
                }
                memberCoupon = memberCouponList.get(Constants.ZERO);
                memberCoupon = memberCoupons.get(Constants.ZERO);
                couponAmount = memberCoupon.getValidAmount();
                memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
                orderPayConfirmResponse.setMemberCoupon(memberCoupon);
@@ -1490,12 +1516,12 @@
        if(Constants.equalsInteger(type,Constants.ZERO)){
            if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
                && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
                integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.multiply(platformConfigDTO.getReturnMemberIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
            }
        }else{
            if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
                    && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
                integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.multiply(platformConfigDTO.getReturnShopIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
            }
        }
        return integralBack;
@@ -1511,14 +1537,14 @@
     */
    public BigDecimal  calculateIntegralRata(OrderPayConfirmResponse orderPayConfirmResponse,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
        //当前选择商品最大可用积分抵扣的金额
        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
        BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO:i.getCouponDeductCash())
                .multiply(i.getDeductRata()).multiply(new BigDecimal("0.01"))).reduce(BigDecimal.ZERO,BigDecimal::add);
        //积分 - çް金 æ¯”例
        //积分-现金兑换比例(XXX积分抵扣1元)
        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.INTEGRAL_EXCHANGE_CASH_RATA).getCode());
        //当前选择商品抵扣需要使用的积分
        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata);
        //获取当前需要支付的现金总额
        BigDecimal payCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
        BigDecimal payCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO:i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
        //如果实际积分少于最大需要积分 éœ€è¦è®¡ç®—比例占比 åŽ»å¯¹åº”æ·»åŠ è‡³å¯¹åº”çš„å•†å“é‡Œ
        //循环下单商品列表 è®¡ç®—应该使用的积分值
@@ -1536,7 +1562,7 @@
        //剩余积分值
        orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
        //实际抵扣使用积分
        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
        return realDeductionCash;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -7,15 +7,11 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
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.*;
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.business.model.*;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.web.dto.IntegralDTO;
import com.doumee.dao.web.dto.IntegralRecordDTO;
@@ -67,6 +63,12 @@
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private WithdrawRecordMapper withdrawRecordMapper;
    @Autowired
    private GoodsorderMapper goodsorderMapper;
    @Autowired
    private NoticeService noticeService;
@@ -445,6 +447,10 @@
                .lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .ge(Objects.nonNull(model.getStartDate()),Integral::getCreateDate,  model.getStartDate()+" 00:00:00")
                .le(Objects.nonNull(model.getEndDate()),Integral::getCreateDate,  model.getEndDate()+" 23:59:59")
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate)
        );
@@ -452,9 +458,46 @@
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
            for (Integral integral:result.getRecords()) {
                integral.setStrObjType(Constants.IntegralObjType.getName(integral.getObjType()));
                //余额提现 å…³è” æçŽ°è®°å½•
                if(Constants.equalsInteger(integral.getObjType(),Constants.IntegralObjType.WITHDRAW_APPLY.getKey())){
                    WithdrawRecord withdrawRecord = withdrawRecordMapper.selectById(integral.getObjId());
                    if(Objects.nonNull(withdrawRecord)){
                        integral.setWithdrawStatus(withdrawRecord.getStatus());
                    }
                }
            }
        }
        return PageData.from(result);
        PageData<Integral> rr =  PageData.from(result);
        if(pageWrap.getPage() == 1  && Constants.equalsInteger(model.getUserType(),Constants.TWO)){
            //如果查询第一页,做数据统计
            rr.setCountData(dealCountIntegralNum(pageWrap));
        }
        return rr;
    }
    private Integral dealCountIntegralNum(PageWrap<IntegralRecordDTO> pageWrap) {
        IntegralRecordDTO model = pageWrap.getModel();
        List<Integral> result = integralMapper.selectList(new QueryWrapper<Integral>()
                .lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .ge(Objects.nonNull(model.getStartDate()),Integral::getCreateDate,  model.getStartDate()+" 00:00:00")
                .le(Objects.nonNull(model.getEndDate()),Integral::getCreateDate,  model.getEndDate()+" 23:59:59")
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate)
        );
        Integral integral = new Integral();
        integral.setInAmount(BigDecimal.ZERO);
        integral.setOutAmount(BigDecimal.ZERO);
        if(CollectionUtils.isEmpty( result)){
            return integral;
        }
        integral.setInAmount(result.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
        integral.setOutAmount(result.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
        return integral;
    }
    @Override
@@ -569,22 +612,47 @@
        IntegralDataResponse integralDataResponse = new IntegralDataResponse();
        integralDataResponse.setSurplusIntegral(BigDecimal.ZERO);
        integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
        Shop shop = shopMapper.selectById(model.getMemberId());
        if (Objects.nonNull(shop)) {
            integralDataResponse.setSurplusIntegral(
                    Constants.equalsInteger(model.getUserType(),Constants.TWO)?shop.getAmount():shop.getIntegral());
        }
        List<Integral> list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
//                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            integralDataResponse.setSurplusIntegral(
                    list.stream().map(i->i.getNum().multiply(new BigDecimal(i.getType().toString()))
                    ).reduce(BigDecimal.ZERO, BigDecimal::add)
            );
            //提现业务数据
            if(Constants.equalsInteger(model.getUserType(),Constants.TWO)){
                integralDataResponse.setWithdrawAmount(
                        withdrawRecordMapper.selectList(new QueryWrapper<WithdrawRecord>().lambda()
                                .eq(WithdrawRecord::getMemberId,model.getMemberId())
                                .eq(WithdrawRecord::getStatus,Constants.ONE)
                        ).stream().map(WithdrawRecord::getAmount)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
                integralDataResponse.setWithdrawIngAmount(
                        withdrawRecordMapper.selectList(new QueryWrapper<WithdrawRecord>().lambda()
                                        .eq(WithdrawRecord::getMemberId,model.getMemberId())
                                        .eq(WithdrawRecord::getStatus,Constants.ZERO)
                                ).stream().map(WithdrawRecord::getAmount)
                                .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
                integralDataResponse.setWaitPayAmount(
                        goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
                                .eq(Goodsorder::getDistributionShopId,model.getMemberId())
                                .in(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey(),
                                        Constants.OrderStatus.PAY_DONE.getKey(),
                                        Constants.OrderStatus.WAIT_RECEIVE.getKey())
                        ).stream().map(Goodsorder::getShopSettlement)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
            }
            //积分失效方式 0长期有效 1按积分产生时间失效
            Integer type  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
            //消费者积分 éœ€è¦æŸ¥è¯¢å³å°†è¿‡æœŸç§¯åˆ†
            if(Constants.equalsInteger(type,Constants.ONE)){
            if(Constants.equalsInteger(type,Constants.ONE)&& Constants.equalsInteger(model.getUserType(),Constants.ONE)){
                Integer validYear  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
                if(validYear.compareTo(Constants.ZERO)>Constants.ZERO){
                     list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
@@ -64,8 +64,6 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private ShopMapper shopMapper;
    @Override
    public InviteInfoResponse getInviteInfo(Integer memberId){
@@ -81,7 +79,7 @@
                        .selectAs(Member::getImgurl,InviteRecord::getImgUrl)
                        .leftJoin(Member.class,Member::getId,InviteRecord::getMemberId)
                        .eq(InviteRecord::getIsdeleted,Constants.ZERO)
                        .eq(InviteRecord::getMemberId,memberId)
                        .eq(InviteRecord::getInviteId,memberId)
                        .orderByDesc(InviteRecord::getId)
        );
@@ -112,32 +110,30 @@
     * @throws Exception
     */
    @Override
    public String createShareImg(Integer userType,Integer memberId) throws Exception {
    public String createShareImg(Integer userType,Integer memberId,String posterImg) throws Exception {
        String imgUrl = systemDictDataBiz.queryByCode(Constants.ORDER_SET,Constants.INVITE_IMG_URL).getCode();
        String suffix = "m_" + memberId;
        String suffix = "uid_"+ memberId;
        if(Constants.equalsInteger(Constants.ONE,userType)){
            Shop shop = shopMapper.selectById(memberId);
            if(Objects.nonNull(shop)
                    && StringUtils.isNotBlank(shop.getPosterImg())){
            if(StringUtils.isNotBlank(posterImg)){
                String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                        + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
                imgUrl = path + shop.getPosterImg();
                imgUrl = path + posterImg;
                suffix = "sid_"+ memberId;
            }
            suffix = "s_"+memberId;
        }
        BufferedImage img1  = GeneratePicUtil.transfromToImage(imgUrl,imgUrl.substring(imgUrl.lastIndexOf(".") + 1));
        if (img1 == null) {
            return imgUrl;
        }
        String url = null;
        String scene = "trial";
        String url = "/pages/index/index";
        String scene = suffix;
        //内容分享海报图片
        InputStream mpCode = Constants.generateWxMiniImgStream(
                scene,
                "",
                url,
                false);//小程序
        InputStream inputStream = GeneratePicUtil.generateShareWithUserImg(
                img1
        InputStream inputStream = GeneratePicUtil.generateShopImg(
                imgUrl
                , mpCode);
        ALiYunUtil obs = new ALiYunUtil(
        systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode()
@@ -147,8 +143,9 @@
        String fileName = shareFolder + key;
        if (obs.uploadOnlineObject(inputStream,systemDictDataBiz.queryByCode(Constants.OSS, Constants.BUCKETNAME).getCode(), fileName,null)) {
            url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() + fileName;
            return key;
        }
        return url;
        return null;
    }
@@ -156,8 +153,8 @@
    public String createShopMiniProgramCode(Integer shopId) throws Exception {
        //内容分享海报图片
        InputStream inputStream = Constants.generateWxMiniImgStream(
                "trial",
                "/page/index/?shopId="+shopId,
                "sid_"+shopId,
                "/pages/index/index",
                true);//小程序
        String url = null;
        ALiYunUtil obs = new ALiYunUtil(
@@ -170,8 +167,9 @@
        String fileName = shareFolder + key;
        if (obs.uploadOnlineObject(inputStream,systemDictDataBiz.queryByCode(Constants.OSS, Constants.BUCKETNAME).getCode(), fileName,null)) {
            url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() + fileName;
            return key;
        }
        return url;
        return null;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberBankServiceImpl.java
@@ -43,7 +43,7 @@
    @Override
    public void deleteById(Integer id) {
        memberBankMapper.deleteById(id);
        memberBankMapper.update(new UpdateWrapper<MemberBank>().lambda().set(MemberBank::getIsdeleted,Constants.ONE).eq(MemberBank::getId,id));
    }
    @Override
@@ -156,9 +156,9 @@
        if(Objects.isNull(request)
                ||Objects.isNull(request.getIsDefault())
                ||Objects.isNull(request.getMemberId())
                || StringUtils.isNotBlank(request.getBankName())
                || StringUtils.isNotBlank(request.getBankAccount())
                || StringUtils.isNotBlank(request.getName())
                || StringUtils.isBlank(request.getBankName())
                || StringUtils.isBlank(request.getBankAccount())
                || StringUtils.isBlank(request.getName())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -176,6 +176,7 @@
            BeanUtils.copyProperties(request,memberBank);
            memberBank.setCreateDate(new Date());
            memberBank.setEditDate(new Date());
            memberBank.setIsdeleted(Constants.ZERO);
            memberBankMapper.insert(memberBank);
        } else {
            MemberBank memberBank = memberBankMapper.selectById(request.getId());
@@ -197,9 +198,11 @@
                .eq(MemberBank::getMemberId,shopId)
                .orderByDesc(MemberBank::getIsDefault,MemberBank::getId)
        );
        for (MemberBank memberBank:memberBanks) {
            memberBank.setBankInfo(Constants.getBankInfo(memberBank.getBankName(),memberBank.getBankAccount()));
        }
        return memberBanks;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -380,7 +380,7 @@
                .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 ")
//                .apply("   now() between m.START_DATE and m.END_DATE ")
                .orderByDesc(" m.PRICE ")
        );
        return page;
@@ -544,6 +544,7 @@
        //查询商品列表
        List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                new MPJLambdaWrapper<Goods>()
                        .selectAll(Goods.class)
                        .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
                        .selectAs(GoodsSku::getId,Goods::getSkuId)
                        .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -312,7 +312,7 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
                            .eq(Member::getIsdeleted,Constants.ZERO)
                            .eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getStatus,Constants.ZERO)
                    .last(" limit 1"));
            AccountResponse accountResponse = new AccountResponse();
            if(Objects.nonNull(member)){
@@ -356,44 +356,43 @@
            if(Objects.isNull(phone)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未获取到手机号");
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, wxPhoneRequest.getOpenid())
                    .eq(Member::getIsdeleted,Constants.ZERO)
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getPhone, phone)
                    .eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getStatus,Constants.ZERO)
                    .last(" limit 1"));
            if (member == null) {
                member = new Member();
                member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
                member.setNickname("微信用户"+ CodeVerifyUtils.createVerificationCode(4));
                member.setCreateDate(new Date());
                member.setIsdeleted(Constants.ZERO);
                member.setType(Constants.ZERO);
                member.setOrigin(Constants.ZERO);
                if(!this.checkIsCreateInvite(phone)){
                    member.setRecId(Constants.getInviteCode(wxPhoneRequest.getRecId()));
                    member.setRecId(wxPhoneRequest.getRecId());
                }
                member.setOpenId(wxPhoneRequest.getOpenid());
                member.setIntegral(BigDecimal.ZERO);
                member.setPhone(phone);
            }
            member.setPhone(phone);
            member.setOpenId(wxPhoneRequest.getOpenid());
            member.setEditDate(new Date());
            member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
            if(Objects.isNull(member.getId())){
                memberMapper.insert(member);
                PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
                this.createRegionReward(member,platformConfigDTO);
                //创建邀请记录
                this.createInviteRecord(member,platformConfigDTO);
                member.setSharingCode(this.createShareCode(member.getId()));
//                member.setSharingCode(this.createShareCode(member.getId()));
                memberMapper.updateById(member);
            }else{
                if(StringUtils.isBlank(member.getSharingCode())){
                    member.setSharingCode(this.createShareCode(member.getId()));
                }
//                if(StringUtils.isBlank(member.getSharingCode())){
//                    member.setSharingCode(this.createShareCode(member.getId()));
//                }
                memberMapper.updateById(member);
            }
//            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
//            String token = JwtTokenUtil.generateToken(payLoad);
            if(Objects.nonNull(wxPhoneRequest.getShopId())){
                this.bindShopInfo(member.getId(),wxPhoneRequest.getShopId());
            }
            String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
@@ -793,8 +792,8 @@
        Member  member = memberMapper.selectById(memberId);
        if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenId())){
            memberMapper.update(new UpdateWrapper<Member>().lambda()
                    .set(Member::getOpenId,null)
                    .set(Member::getPhone,null)
//                    .set(Member::getOpenId,null)
                    .set(Member::getStatus,Constants.TWO)
                    .eq(Member::getId,member.getId())
            );
        }
@@ -802,6 +801,26 @@
    }
    @Override
    public void bindShopInfo(Integer memberId,Integer recId){
        Member  member = memberMapper.selectById(memberId);
        if(Objects.isNull(member)){
            return;
        }
        if (Objects.nonNull(member.getBindShopId())) {
            return;
        }
        Shop shop = shopMapper.selectById(recId);
        if(Objects.nonNull(shop)){
            memberMapper.update(new UpdateWrapper<Member>().lambda()
                    .set(Member::getBindShopId,recId)
                    .set(Member::getBindShopDate,new Date())
                    .eq(Member::getId,member.getId())
            );
        }
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -154,10 +154,18 @@
        shop.setPassword(Utils.Secure.encryptPassword(shop.getPassword(), salt));
        shop.setSalt(salt);
        shopMapper.insert(shop);
        //分享码
        String url = inviteRecordService.createShopMiniProgramCode(shop.getId());
        if(StringUtils.isNotBlank(url)){
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                            .set(Shop::getProgramCode,url)
                    .eq(Shop::getId,shop.getId()));
        }
        //分享海报
        String posterUrl = inviteRecordService.createShareImg(Constants.ONE,shop.getId(),shop.getPosterImg());
        if(StringUtils.isNotBlank(posterUrl)){
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getPosterImgCode,posterUrl)
                    .eq(Shop::getId,shop.getId()));
        }
        return shop.getId();
@@ -238,7 +246,7 @@
    @Override
    @Transactional
    public void updateById(Shop shop) {
    public void updateById(Shop shop) throws Exception {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(shop.getId()==null ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
@@ -251,6 +259,20 @@
        shop.setEditor(user.getId());
        shop.setEditDate(new Date());
        if(StringUtils.isBlank(model.getProgramCode())){
            //分享码
            String url = inviteRecordService.createShopMiniProgramCode(shop.getId());
            if(StringUtils.isNotBlank(url)){
                shop.setProgramCode(url);
            }
        }
        if(StringUtils.isNotBlank(shop.getPosterImg())){
            //分享海报
            String posterUrl = inviteRecordService.createShareImg(Constants.ONE,shop.getId(),shop.getPosterImg());
            if(StringUtils.isNotBlank(posterUrl)){
                shop.setPosterImgCode(posterUrl);
            }
        }
        shopMapper.updateById(shop);
        if(shop.getSaleType() !=null && !Constants.equalsInteger(shop.getSaleType(),model.getSaleType())){
            //如果销售模式发生编码,记录变更记录
@@ -277,15 +299,15 @@
    }
    @Override
    public void updateByIdInBatch(List<Shop> shops) {
        if (CollectionUtils.isEmpty(shops)) {
            return;
        }
        for (Shop shop: shops) {
            this.updateById(shop);
        }
    }
//    @Override
//    public void updateByIdInBatch(List<Shop> shops) {
//        if (CollectionUtils.isEmpty(shops)) {
//            return;
//        }
//        for (Shop shop: shops) {
//            this.updateById(shop);
//        }
//    }
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    @Override
@@ -679,20 +701,20 @@
        && StringUtils.isNotBlank(dto.getLgt())){
            isArea = true;
        }
        List<Shop> shopList = shopJoinMapper.selectList(new MPJLambdaWrapper<Shop>()
        List<Shop> shopList = shopJoinMapper.selectJoinList(Shop.class,new MPJLambdaWrapper<Shop>()
                .selectAll(Shop.class)
                .select(" CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+dto.getLgt()+", "+dto.getLat()+" )) /1000,DECIMAL(15,2))",Shop::getDistance)
                .leftJoin(Areas.class,Areas::getId,Shop::getAreaId)
                .eq(Objects.nonNull(dto.getCityId()),Areas::getParentId,dto.getCityId())
                .like(Objects.nonNull(dto.getShopName()),Shop::getName,dto.getShopName())
                .select(" CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( '"+dto.getLgt()+"' , '"+dto.getLat()+"' )) /1000,DECIMAL(15,2))",Shop::getDistance)
                .leftJoin(SystemUser.class,SystemUser::getId,Shop::getCreator)
                .like(StringUtils.isNotBlank(dto.getCityName()),Shop::getAddr,dto.getCityName())
                .like(StringUtils.isNotBlank(dto.getShopName()),Shop::getName,dto.getShopName())
                .orderByDesc(!isArea,Shop::getId)
                .orderByAsc(isArea,Shop::getDistance)
                .orderByAsc(isArea," distance ")
        );
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
        for(Shop model:shopList){
            model.setImgFullUrl(path+model.getImgurl());
            model.setImgFullUrl(StringUtils.isNotBlank(model.getImgurl())?path+model.getImgurl():null);
        }
        return shopList;
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java
@@ -186,6 +186,7 @@
        if (Objects.isNull(withdrawRecord) ) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        withdrawRecord.setBankInfo(Constants.getBankInfo(withdrawRecord.getBankName(),withdrawRecord.getBankAccount()));
        if(!Constants.equalsInteger(withdrawRecord.getStatus(), Constants.ZERO)){
            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() +
                    systemDictDataBiz.queryByCode(Constants.OSS, Constants.TRANSFER_FILE).getCode();
@@ -315,7 +316,7 @@
    @Override
    public void withdrawApply(WithdrawApplyRequest request, IntegralService integralService){
    public Integer withdrawApply(WithdrawApplyRequest request, IntegralService integralService){
        if (Objects.isNull( request)
            || request.getMemberId() == null
            || request.getBankId() == null
@@ -357,6 +358,7 @@
        dealIntegralRequest.setMemberId(request.getMemberId());
        dealIntegralRequest.setDealType(Constants.ONE);
        integralService.dealShopAmount(dealIntegralRequest);
        return withdrawRecord.getId();
    }
server/dmmall_service/src/main/resources/application-dev.yml
@@ -53,7 +53,7 @@
    appSecret: 3462fa186da7cb06c544df8d8664b63a
    mchId: 1229817002
    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    notifyUrl: https://dmtest.ahapp.net/dmmall_interface/web/api/wxPayNotify
    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify #https://dmtest.ahapp.net/dmmall_interface/web/api/wxPayNotify
    keyPath: /usr/local/apiclient_cert.p12
tencent:
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -17,6 +17,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -153,4 +154,18 @@
        return ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation(value = "商户绑定", notes = "小程序端")
    @GetMapping("/bindShopInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "recId", value = "商户主键", required = true)
    })
    public ApiResponse bindShopInfo(@RequestParam Integer recId) {
        memberService.bindShopInfo(getMemberId(),recId);
        return  ApiResponse.success("操作成功");
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/CollectApi.java
@@ -1,10 +1,17 @@
package com.doumee.api.web;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Collect;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.web.request.CollectSaveRequest;
import com.doumee.dao.web.request.ShopOrderRequest;
import com.doumee.dao.web.response.CollectResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -56,15 +63,24 @@
    @LoginRequired
    @ApiOperation("我的收藏")
    @GetMapping("/myCollectList")
    @PostMapping("/myCollectPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse myCollectList(@RequestParam Integer type) {
        return ApiResponse.success(collectService.myCollect(getMemberId(),type));
    public ApiResponse<PageData<Collect>> myCollectPage(@RequestBody PageWrap<Collect> pageWrap) {
        PageData<Collect> page = collectService.myCollectPage(pageWrap,getMemberId());
        return ApiResponse.success("查询成功",page);
    }
    @LoginRequired
    @ApiOperation("我的收藏数量")
    @GetMapping("/getCollectNum")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<CollectResponse> getCollectNum() {
        return ApiResponse.success("查询成功",collectService.getCollectNum(getMemberId()));
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/MemberBankApi.java
@@ -45,6 +45,18 @@
    }
    @LoginShopRequired
    @ApiOperation(value = "银行卡删除", notes = "小程序端")
    @GetMapping("/deleteById")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse deleteById(@RequestParam Integer id){
        memberBankService.deleteById(id);
        return ApiResponse.success("操作成功");
    }
    @LoginShopRequired
    @ApiOperation(value = "获取我的提现银行卡", notes = "小程序端")
    @GetMapping("/getBankList")
    @ApiImplicitParams({
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java
@@ -56,7 +56,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getMemberShareImg()  throws Exception{
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ZERO,getMemberId()));
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ZERO,getMemberId(),null));
    }
@@ -67,6 +67,6 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getShareImg()  throws Exception{
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ONE,getShopId()));
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ONE,getShopId(),"20251210/6dd8880d-30d1-49d3-8192-99a4127cf785.png"));
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
@@ -100,7 +100,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse getShopList(@RequestBody ShopListDTO dto){
    public ApiResponse<List<Shop>> getShopList(@RequestBody ShopListDTO dto){
        return ApiResponse.success(shopService.getShopList(dto));
    }
@@ -112,12 +112,10 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse withdrawApply(@RequestBody WithdrawApplyRequest request){
    public ApiResponse<Integer> withdrawApply(@RequestBody WithdrawApplyRequest request){
        request.setMemberId(getShopId());
        withdrawRecordService.withdrawApply(request,integralService);
        return ApiResponse.success("操作成功");
        return ApiResponse.success("操作成功",withdrawRecordService.withdrawApply(request,integralService));
    }
    @LoginShopRequired
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java
@@ -13,11 +13,14 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * Created by IntelliJ IDEA.
@@ -53,7 +56,14 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<List<Areas>> getCityInfoList(@RequestBody Areas areas) {
        return  ApiResponse.success("查询成功",areasService.getCityList(areas));
        List<Areas> list = areasService.getCityList(areas);
        if(Objects.nonNull(areas)&&StringUtils.isNotBlank(areas.getName())){
            list =
                    list.stream().filter(item -> item.getName().contains(areas.getName())).collect(Collectors.toList());
        }
        return  ApiResponse.success("查询成功",list);
    }
    @ApiOperation("全部区划树形查询")
server/dmmall_web/src/main/java/com/doumee/api/web/mall/GoodsApi.java
@@ -35,9 +35,6 @@
    @ApiOperation("商品列表")
    @PostMapping("/goodsPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<IPage<GoodsInfoResponse>> goodsPage(@RequestBody PageWrap<GoodsRequest> pageWrap) {
        IPage<GoodsInfoResponse> page = goodsService.getGoodsPage(pageWrap);
        return ApiResponse.success("查询成功",page);
@@ -72,7 +69,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<List<SearchHistory>> searchHistoryList(@RequestParam Integer type) {
    public ApiResponse<List<SearchHistory>> searchHistoryList() {
        return ApiResponse.success(searchHistoryService.findListByType(Constants.ZERO,getMemberId()));
    }
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
@@ -21,11 +21,13 @@
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.request.goods.OrderPayConfirmRequest;
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.OrderPayConfirmResponse;
import com.doumee.dao.web.response.goods.PayResponse;
import com.doumee.service.business.HotCityService;
import com.doumee.service.business.impl.MemberCouponServiceImpl;
@@ -163,7 +165,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<PayResponse> orderPay(@RequestParam Integer orderId) {
    public ApiResponse<PayResponse> replayPay(@RequestParam Integer orderId) {
        return ApiResponse.success("操作成功", goodsorderService.replayPay(orderId));
    }
@@ -288,6 +290,20 @@
    }
    @LoginRequired
    @ApiOperation("订单待支付信息")
    @PostMapping("/orderPayConfirm")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<OrderPayConfirmResponse> orderPayConfirm(@RequestBody OrderPayConfirmRequest request) {
        request.setMemberId(getMemberId());
        return ApiResponse.success("操作成功",goodsorderService.orderPayConfirm(request,memberCouponServiceImpl));
    }
    @LoginRequired
    @ApiOperation("订单统计")
    @GetMapping("/ordersStatistics")
    @ApiImplicitParams({
@@ -297,6 +313,11 @@
        return ApiResponse.success("操作成功",goodsorderService.ordersStatistics(getMemberId()));
    }
    @LoginRequired
    @ApiOperation("物流查询")
    @GetMapping("/queryExpress")