rk
7 小时以前 580f4d3c2ca9eee53eee95a4de2f6610b790780a
小程序   接口开发
已添加3个文件
已修改63个文件
1784 ■■■■ 文件已修改
server/dmmall_admin/src/main/java/com/doumee/api/business/CommentController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ZanController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Activity.java 23 ●●●● 补丁 | 查看 | 原始文档 | 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/Comment.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/SearchHistory.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Zan.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/ShopLoginDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityCommentDTO.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/CommentApplyRequest.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/ArticleRequest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/CommentService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/NoticeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/SearchHistoryService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ZanService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 113 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/SearchHistoryServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ZanServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ActivityApi.java 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/CommentApi.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ZanApi.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/ArticleApi.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/GoodsApi.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/CommentController.java
@@ -30,14 +30,6 @@
    @Autowired
    private CommentService commentService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:comment:create")
    public ApiResponse create(@RequestBody Comment comment) {
        return ApiResponse.success(commentService.create(comment,getMemberId()));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:comment:delete")
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
@@ -38,7 +38,7 @@
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:shop:create")
    public ApiResponse create(@RequestBody Shop shop) {
    public ApiResponse create(@RequestBody Shop shop) throws Exception {
        return ApiResponse.success(shopService.create(shop));
    }
    @PreventRepeat
server/dmmall_admin/src/main/java/com/doumee/api/business/ZanController.java
@@ -3,6 +3,7 @@
import com.doumee.api.BaseController;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
@@ -10,7 +11,8 @@
import com.doumee.service.business.ZanService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -38,13 +40,7 @@
        return ApiResponse.success(zanService.create(zan,null));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:zan:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        zanService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
server/dmmall_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -16,11 +16,20 @@
package com.doumee.config.Jwt;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.dao.business.model.Member;
import com.doumee.service.business.impl.MemberServiceImpl;
import io.jsonwebtoken.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
 * <p>后台系统jwt token工具类</p>
@@ -49,7 +58,8 @@
    private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
    //过期时间(s) 86400L=1天 604800L=7天
    private static final long expire = 86400L;
    //redis过期时间
    private static final Integer redisExpire = 365;
    /**
     * ç”Ÿæˆtoken,根据userId和默认过期时间
     */
@@ -58,6 +68,23 @@
        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
    }
    /**
     * ç”Ÿæˆtoken,根据userId和默认过期时间
     */
    public static String generateTokenForRedis(Integer userId, Integer userType, String userInfo, RedisTemplate<String,Object> redisTemplate) {
        String tokenKey =  userType +""+UUID.randomUUID() + "_" + userId;
        redisTemplate.opsForValue().set(tokenKey,userInfo,redisExpire, TimeUnit.DAYS);
        return tokenKey;
    }
    public void loginOut(RedisTemplate<String,Object> redisTemplate,String token){
        redisTemplate.delete(token);
    }
    /**
     * éªŒè¯token是否失效
@@ -71,14 +98,6 @@
        }
    }
    /**
     * ç”Ÿæˆtoken,根据userId和默认过期时间
     */
    public static String generateTokenOld(JwtPayLoad jwtPayLoad) {
        Long expiredSeconds = getExpireSeconds();
        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
    }
    /**
     * èŽ·å–jwt的payload部分
server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -10,6 +10,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.method.HandlerMethod;
@@ -27,6 +28,9 @@
    @Autowired
    private JdbcTemplate dao;
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    /**
     * æ·»åŠ æ‹¦æˆªå™¨
@@ -81,8 +85,6 @@
                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
                    }
                }
                return true;
            }
        };
@@ -94,17 +96,14 @@
    public Boolean checkMemberLogin(HttpServletRequest request, HttpServletResponse response){
        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
        try {
            //判断Token是否超时
            boolean expiration = JwtTokenUtil.isTokenExpired(token);
            if (expiration) {
            if(!token.startsWith(Constants.ZERO+"")){
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            //获取账号ID
            String memberIdInfo = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
            if(StringUtils.isBlank(memberIdInfo)||!memberIdInfo.startsWith(Constants.MEMBER_PREFIX)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"用户信息出错");
            String tokenRedis = (String) redisTemplate.opsForValue().get(token);
            if(StringUtils.isBlank(tokenRedis)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            Integer memberId = Integer.valueOf(memberIdInfo.replace(Constants.MEMBER_PREFIX,""));
            Integer memberId = getTokenId(token);
            Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from Member where id  = ?", Integer.class, memberId);
            if(isDeleted== Constants.ONE){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
@@ -129,17 +128,14 @@
    public Boolean checkShopLogin(HttpServletRequest request, HttpServletResponse response){
        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
        try {
            //判断Token是否超时
            boolean expiration = JwtTokenUtil.isTokenExpired(token);
            if (expiration) {
            if(!token.startsWith(Constants.ONE+"")){
                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"长时间未操作,请重新登录");
            }
            //获取账号ID
            String shopInfo = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
            if(StringUtils.isBlank(shopInfo)||!shopInfo.startsWith(Constants.SHOP_PREFIX)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"用户信息出错");
            String tokenRedis = (String) redisTemplate.opsForValue().get(token);
            if(StringUtils.isBlank(tokenRedis)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            Integer shopId = Integer.valueOf(shopInfo.replace(Constants.SHOP_PREFIX,""));
            Integer shopId = getTokenId(token);
            Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from shop where id  = ?", Integer.class, shopId);
            if(isDeleted== Constants.ONE){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
@@ -161,6 +157,17 @@
    }
    public Integer getTokenId(String token){
        try {
            Integer lastIndex = token.lastIndexOf("_")+1;
            Integer tokenId = Integer.valueOf(token.substring(lastIndex));
            return tokenId;
        }catch (Exception e){
            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
        }
    }
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -361,6 +361,7 @@
        AFTERSALE_APPLY(8, "申请售后补充说明附件", "申请售后补充说明附件"),
        AFTERSALE_KD(9, "申请售后邮寄说明附件", "申请售后邮寄说明附件"),
        TRANSFER_FILE(10, "打款凭证", "打款凭证"),
        COMMENT_FILE(11, "评论附件", "评论附件"),
        ;
        // æˆå‘˜å˜é‡
        private String name;
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsMapper.java
@@ -21,6 +21,7 @@
    @Select(" select g.* , " +
            "(( 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  " +
            " ${ew.customSqlSegment} ")
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsorderMapper.java
@@ -26,16 +26,16 @@
    @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 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  " +
            " , g.MEMBER_INFO , g.RECEIVE_TYPE as receiveType, s.name as shopName,s.phone as shopPhone ,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.remark as remark ,  g.id as orderId , g.MEMBER_ID as memberId , g.CREATE_DATE as createDate    , g.TYPE as orderType , g.STATUS as orderStatus , g.IS_COMMENT as isComment , g.PAY_STATUS as  payStatus ," +
    @Select(" select g.CODE AS code , g.MEMBER_INFO as memberInfo , g.PAY_ORDER_ID as payOrderId , g.REFUND_MONEY refundMoney , g.REFUND_TIME as refundTime, g.REFUND_INFO as refundInfo,  g.id as orderId , g.MEMBER_ID as memberId , 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 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 " +
            " , g.MEMBER_INFO , g.RECEIVE_TYPE as receiveType, s.name as shopName,s.phone as shopPhone ,s.id as shopId,g.exchange_code as exchangeCode , g.mail_price as mailPrice , g.TOTAL_PRICE as totalPrice " +
            " 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/model/Activity.java
@@ -68,22 +68,18 @@
    @ApiModelProperty(value = "开始时间(type为活动)")
    @ExcelColumn(name="开始时间(type为活动)")
    private Date starttime;
    @ApiModelProperty(value = "结束时间(type为活动)")
    @ExcelColumn(name="结束时间(type为活动)")
    private Date endtime;
    @ApiModelProperty(value = "报名开始时间(type为活动)")
    @ExcelColumn(name="报名开始时间(type为活动)")
    private Date signStarttime;
    @ApiModelProperty(value = "报名结束时间(type为活动)")
    @ExcelColumn(name="报名结束时间(type为活动)")
    private Date signEndtime;
    @ApiModelProperty(value = "活动地址(type为活动)")
@@ -129,6 +125,7 @@
    @ApiModelProperty(value = "所属分类编码(关联labels)", example = "1")
    @ExcelColumn(name="所属分类编码(关联labels)")
    private Integer labelId;
    @ApiModelProperty(value = "所属品牌编码(关联labels)", example = "1")
    @ExcelColumn(name="所属品牌编码(关联labels)")
    private Integer brandId;
@@ -145,6 +142,10 @@
    private String  content;
    @ApiModelProperty(value = "颜色色值")
    @TableField(exist = false)
    private String param;
    @ApiModelProperty(value = "发布用户姓名")
    @TableField(exist = false)
    private String realName;
@@ -156,6 +157,7 @@
    @ApiModelProperty(value = "资讯分类名称")
    @TableField(exist = false)
    private String lablesName;
    @ApiModelProperty(value = "所属品牌名称")
    @TableField(exist = false)
    private String brandName;
@@ -163,6 +165,16 @@
    @ApiModelProperty(value = "点赞数量")
    @TableField(exist = false)
    private Integer zanCount;
    @ApiModelProperty(value = "是否点赞:0=否;1=是")
    @TableField(exist = false)
    private Integer zanStatus;
    @ApiModelProperty(value = "是否收藏:0=否;1=是")
    @TableField(exist = false)
    private Integer collectStatus;
    @ApiModelProperty(value = "收藏数量")
    @TableField(exist = false)
@@ -222,5 +234,8 @@
    @TableField(exist = false)
    private String shopAddr;
    @ApiModelProperty(value = "简要说明")
    @TableField(exist = false)
    private String contentInfo;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Collect.java
@@ -62,8 +62,8 @@
    @ExcelColumn(name="对象编码")
    private Integer objId;
    @ApiModelProperty(value = "对象类型 0活动探店咨询 1商品", example = "1")
    @ExcelColumn(name="对象类型 0活动探店咨询")
    @ApiModelProperty(value = "对象类型 0社区 1商品", example = "1")
    @ExcelColumn(name="对象类型 0社区 1商品")
    private Integer objType;
    @ApiModelProperty(value = "列表图")
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Comment.java
@@ -11,6 +11,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.math.BigDecimal;
import java.util.List;
/**
 * å‘现模块评论管理信息表(资讯、探店)
@@ -115,10 +116,28 @@
    @TableField(exist = false)
    private String nikeName;
    @ApiModelProperty(value = "用户头像" )
    @TableField(exist = false)
    private String memberImgUrl;
    @ApiModelProperty(value = "点赞数" )
    @TableField(exist = false)
    private Integer zanCount;
    @ApiModelProperty(value = "是否点赞:0=否;1=是;" )
    @TableField(exist = false)
    private Integer zanStatus;
    @ApiModelProperty(value = "所属内容" )
    @TableField(exist = false)
    private String activityName;
    @ApiModelProperty(value = "内容类型0商家活动 1平台活动 2探店 3资讯" )
    @TableField(exist = false)
    private String activityType;
    @ApiModelProperty(value = "图片信息", example = "1")
    @TableField(exist = false)
    private List<Multifile> multifileList;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -218,6 +218,9 @@
    @ApiModelProperty(value = "退款操作人", example = "1")
    private Integer refundUserId;
    @ApiModelProperty(value = "退款备注", example = "1")
    private Integer refundInfo;
    @ApiModelProperty(value = "文件地址")
    @TableField(exist = false)
    private String resourcePath;
@@ -255,6 +258,11 @@
    @TableField(exist = false)
    private String imgurl;
    @ApiModelProperty(value = "经销商电话")
    @TableField(exist = false)
    private String shopPhone;
    @ApiModelProperty(value = "收货地址")
    @TableField(exist = false)
    private String addr;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/SearchHistory.java
@@ -59,8 +59,8 @@
    @ExcelColumn(name="搜索词")
    private String content;
    @ApiModelProperty(value = "类型 0发现 1百科 2门店", example = "1")
    @ExcelColumn(name="类型 0发现 1百科 2门店")
    @ApiModelProperty(value = "类型 0商品", example = "1")
    @ExcelColumn(name="类型 0商品")
    private Integer type;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Shop.java
@@ -189,6 +189,14 @@
    @ApiModelProperty(value = "营业结束时间")
    private String brandStory;
    @ApiModelProperty(value = "小程序码地址")
    private String programCode;
    @ApiModelProperty(value = "专属海报码")
    private String posterImgCode;
    @ApiModelProperty(value = "头像")
    @TableField(exist = false)
    private String memberImgurl;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Zan.java
@@ -58,8 +58,8 @@
    @ExcelColumn(name="对象编码")
    private Integer objId;
    @ApiModelProperty(value = "对象类型 0活动探店资讯 1发现评论", example = "1")
    @ExcelColumn(name="对象类型 0活动探店资讯 1发现评论")
    @ApiModelProperty(value = "对象类型 0社区 1评论", example = "1")
    @ExcelColumn(name="对象类型 0社区 1评论")
    private Integer objType;
    @ApiModelProperty(value = "列表图")
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/IntegralRecordDTO.java
@@ -15,10 +15,11 @@
    @ApiModelProperty(value = "收支类型 0收入 1支出")
    private Integer type;
    //数据类型:0=消费者积分;1=经销商积分;2=经销商结算金额;
    @ApiModelProperty(value = "数据类型:0=消费者积分;1=经销商积分;2=经销商结算金额;")
    private Integer userType;
    @ApiModelProperty(value = "用户主键或商户主键")
    @ApiModelProperty(value = "用户主键或商户主键",hidden = true)
    private Integer memberId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/ShopLoginDTO.java
@@ -8,8 +8,8 @@
@ApiModel("经销商登录请求对象")
public class ShopLoginDTO {
    @ApiModelProperty(value = "关联用户主键")
    private Integer memberId;
//    @ApiModelProperty(value = "关联用户主键")
//    private Integer memberId;
    @ApiModelProperty(value = "openid")
    private String openid;
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityCommentDTO.java
@@ -1,8 +1,13 @@
package com.doumee.dao.web.dto.activity;
import com.doumee.dao.business.model.Multifile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("咨询,探店评论")
@@ -10,6 +15,10 @@
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "创建时间", example = "1")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    private Integer memberId;
@@ -50,9 +59,14 @@
    @ApiModelProperty(value = "用户昵称" )
    private String nikeName;
    @ApiModelProperty(value = "用户昵称" )
    @ApiModelProperty(value = "用户头像" )
    private String memberImgUrl;
    @ApiModelProperty(value = "点赞数" )
    private Integer zanCount;
    @ApiModelProperty(value = "是否点赞:0=否;1=是;" )
    private Integer zanStatus;
    @ApiModelProperty(value = "内容类型0商家活动 1平台活动 2探店 3资讯" )
    private String activityType;
@@ -66,6 +80,7 @@
    @ApiModelProperty(value = "回复数量" )
    private Integer replyCount;
    @ApiModelProperty(value = "点赞数" )
    private Integer zanCount;
    @ApiModelProperty(value = "附件信息" )
    private List<Multifile> multifileList;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java
@@ -1,12 +1,14 @@
package com.doumee.dao.web.dto.activity;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.model.Multifile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("咨询,探店评论回复")
@@ -14,6 +16,7 @@
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    private Integer memberId;
@@ -58,7 +61,8 @@
    @ApiModelProperty(value = "操作人编码(关联system_user表)", example = "1")
    private Integer statusUser;
    @ApiModelProperty(value = "是否点赞:0=否;1=是;" )
    private Integer zanStatus;
    @ApiModelProperty(value = "内容类型0商家活动 1平台活动 2探店 3资讯" )
    private String activityType;
@@ -74,4 +78,9 @@
    @ApiModelProperty(value = "点赞数" )
    private Integer zanCount;
    @ApiModelProperty(value = "附件信息" )
    private List<Multifile> multifileList;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/CommentApplyRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.doumee.dao.web.request;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.xpath.operations.Mult;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/23 9:50
 */
@Data
@ApiModel("评论发布请求类")
public class CommentApplyRequest {
    @ApiModelProperty(value = "对象编码(关联activity表)", example = "1")
    private Integer activityId;
    @ApiModelProperty(value = "内容")
    private String content;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "回复记录编码(关联comment表)", example = "1")
    private Integer replyId;
    @ApiModelProperty(value = "一级评论编码(关联comment表)", example = "1")
    private Integer commentId;
    @ApiModelProperty(value = "回复对象用户编码(关联member表", example = "1")
    private Integer replyMemberId;
    @ApiModelProperty(value = "图片信息", example = "1")
    private List<Multifile> multifileList;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/MyCustomerRequest.java
@@ -16,7 +16,7 @@
    @ApiModelProperty(value = "用户昵称、手机号")
    private String memberIfo;
    private String memberInfo;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/SaleReportRequest.java
@@ -23,6 +23,4 @@
    @ApiModelProperty(value = "结束日期 yyyy-MM-dd dateType =  4使用")
    private String endDate;
    @ApiModelProperty(value = "是否查询详情:0=否;1=是;")
    private Integer queryType;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/ShopOrderRequest.java
@@ -11,14 +11,20 @@
 * @create 2023/3/23 9:50
 */
@Data
@ApiModel("我的销售报表请求类")
@ApiModel("经销商订单查询")
public class ShopOrderRequest {
    @ApiModelProperty(value = "订单状态:状态 0待支付 1待发货 2待收货 3交易完成 4已关闭 5部分发货")
    private Integer status;
    @ApiModelProperty(value = "经销商主键")
    @ApiModelProperty(value = "收货类型:0=快递配送;1=门店自提;")
    private Integer receiveType;
    @ApiModelProperty(value = "经销商主键",hidden = true)
    private Integer shopId;
    @ApiModelProperty(value = "用户类型:0=用户端;1=经销商端")
    private Integer userType;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/goods/ArticleRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.request.goods;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/28 11:07
 */
@Data
@ApiModel("社区查询类")
public class ArticleRequest {
    @ApiModelProperty(value = "查询内容", example = "1")
    private String info;
    @ApiModelProperty(value = "分类主键", example = "1")
    private Integer labelId;
    @ApiModelProperty(value = "品牌主键", example = "1")
    private Integer brandId;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/AccountResponse.java
@@ -20,13 +20,15 @@
    @ApiModelProperty(value = "用户token")
    private String token;
    @ApiModelProperty(value = "微信sessionKey")
    private String sessionKey;
    @ApiModelProperty(value = "用户信息")
    private Member member;
    @ApiModelProperty(value = "用户openid")
    private String openid;
    @ApiModelProperty(value = "经销商信息")
    private ShopInfoResponse shop;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/SaleReportResponse.java
@@ -29,7 +29,4 @@
    private BigDecimal profitTotal;
    @ApiModelProperty(value ="订单列表")
    private List<SaleReportOrderResponse> saleReportOrderResponseList;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/ShopInfoResponse.java
@@ -68,4 +68,13 @@
    @ApiModelProperty(value = "法人电话")
    private String legalPersonPhone;
    @ApiModelProperty(value = "专属海报码")
    private String posterImgCode;
    @ApiModelProperty(value = "小程序码")
    private String programCode;
    @ApiModelProperty(value = "省市区")
    private Areas areas;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/MemberOrderResponse.java
@@ -1,8 +1,11 @@
package com.doumee.dao.web.response.goods;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.dao.business.model.GoodsorderDetail;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberCoupon;
import com.doumee.dao.business.model.Shop;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -48,6 +51,10 @@
    @ApiModelProperty(value = "经销商名称", example = "1")
    private String shopName;
    @ApiModelProperty(value = "经销商电话", example = "1")
    private String shopPhone;
    @ApiModelProperty(value = "状态 0待支付 1待发货/待自提 2待收货 3交易完成 4已关闭 5部分发货", example = "1")
    private Integer orderStatus;
@@ -56,6 +63,9 @@
    @ApiModelProperty(value = "支付状态 0未支付 1已支付", example = "1")
    private Integer payStatus;
    @ApiModelProperty(value = "总金额", example = "1")
    private BigDecimal totalPrice;
    @ApiModelProperty(value = "实付金额", example = "1")
    private BigDecimal price;
@@ -73,7 +83,7 @@
    private String linkAddress;
    @ApiModelProperty(value = "订单备注", example = "1")
    private String remark;
    private String memberInfo;
    @ApiModelProperty(value = "订单号", example = "1")
    private String code;
@@ -93,15 +103,31 @@
    @ApiModelProperty(value = "积分抵扣金额", example = "1")
    private BigDecimal integral;
    @ApiModelProperty(value = "邮费金额", example = "1")
    private BigDecimal mailPrice;
    @ApiModelProperty(value = "退款金额", example = "1")
    private BigDecimal refundMoney;
    @ApiModelProperty(value = "退款时间", example = "1")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date refundTime;
    @ApiModelProperty(value = "退款备注", example = "1")
    private Integer refundInfo;
    @ApiModelProperty(value = "快递名称", example = "1")
    private String kdName;
    @ApiModelProperty(value = "支付单号", example = "1")
    private String payOrderId;
    @ApiModelProperty(value = "快递单号", example = "1")
    private String kdCode;
    @ApiModelProperty(value = "订单明细信息", example = "1")
    private List<MemberOrderDetailResponse> memberOrderDetailResponseList;
    @ApiModelProperty(value = "商品集合")
    private   List<GoodsorderDetail> goodsorderDetailList;
    @ApiModelProperty(value = "经销商信息", example = "1")
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java
@@ -5,6 +5,7 @@
import com.doumee.dao.business.model.Activity;
import com.doumee.dao.web.dto.activity.*;
import com.doumee.dao.web.request.ActivityPageListRequest;
import com.doumee.dao.web.request.goods.ArticleRequest;
import java.util.List;
@@ -184,4 +185,11 @@
    PageData<ActivityCardDTO> getUserFollowActivityCard(PageWrap pageWrap,Integer memberId);
    void updateLooknum(Activity model);
    PageData<Activity> getArticlePage(PageWrap<ArticleRequest> pageWrap);
    Activity getArticleInfo(Integer id, Integer memberId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/CommentService.java
@@ -6,6 +6,7 @@
import com.doumee.dao.web.dto.CommentDTO;
import com.doumee.dao.web.dto.activity.ActivityCommentDTO;
import com.doumee.dao.web.dto.activity.ActivityReplyCommentDTO;
import com.doumee.dao.web.request.CommentApplyRequest;
import java.util.Date;
import java.util.List;
@@ -23,7 +24,7 @@
     * @param comment å®žä½“对象
     * @return Integer
     */
    Integer create(Comment comment,Integer memberId );
    Comment apply(CommentApplyRequest comment, Integer memberId);
    /**
     * ä¸»é”®åˆ é™¤
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -182,7 +182,9 @@
     */
    void affirmOrder(Integer orderId,Integer memberId);
    void orderWriteOff(String exchangeCode,Integer memberId);
    void orderWriteOff(Integer orderId,Integer memberId);
    MemberOrderResponse getGoodsOrderDetailByCode(String exchangeCode);
    /**
     * è®¢å•删除
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
@@ -16,9 +16,9 @@
    InviteInfoResponse getInviteInfo(Integer memberId);
    String createShareImg(Integer memberId) throws Exception;
    String createShareImg(Integer userType,Integer memberId) throws Exception;
    String createShopMiniProgramCode(Integer shopId) throws Exception;
    /**
     * åˆ›å»º
     *
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -130,7 +130,7 @@
    AccountResponse wxLogin(String code);
    AccountResponse wxLoginTest( Integer recId);
//    AccountResponse wxLoginTest( Integer recId);
    /**
@@ -144,7 +144,7 @@
     * æ›´æ–°å¾®ä¿¡ç”¨æˆ·ä¿¡æ¯
     * @param updateMemberRequest
     */
    Member updateMember(UpdateMemberRequest updateMemberRequest);
    void updateMember(UpdateMemberRequest updateMemberRequest);
    /**
     * éªŒè¯æ‰‹æœºå·
@@ -197,4 +197,7 @@
    void updateShop(Member member);
    void logOut(String token,Integer memberId);
    void logOff(String token,Integer memberId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/NoticeService.java
@@ -119,7 +119,7 @@
    void saveMemberIntegralNotice(Constants.IntegralObjType integralObjType, Integer type,
                                  Integer memberId,
                                  BigDecimal integral,
                                  Integer objId, String param1);
                                  Integer objId, String info);
    /**
server/dmmall_service/src/main/java/com/doumee/service/business/SearchHistoryService.java
@@ -94,4 +94,8 @@
     * @return long
     */
    long count(SearchHistory searchHistory);
    List<SearchHistory> findListByType(Integer type,Integer memberId);
    void cleanHistory(Integer type,Integer memberId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -32,7 +32,7 @@
     * @param shop å®žä½“对象
     * @return Integer
     */
    Integer create(Shop shop);
    Integer create(Shop shop) throws Exception;
    /**
     * ä¸»é”®åˆ é™¤
@@ -198,11 +198,10 @@
    /**
     * æˆ‘的客户信息
     * @param request
     * @param shopId
     * @return
     */
    List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId);
    PageData<Member> myCustomer(PageWrap<MyCustomerRequest> pageWrap, Integer shopId);
    /**
     * é”€å”®æ˜Žç»†
@@ -216,4 +215,7 @@
    String setGoodsPrice(Shop shop);
    PageData<ShopMoneyVO>  findPageMoney(PageWrap<Shop> pageWrap);
    void logOut(String token,Integer shopId);
}
server/dmmall_service/src/main/java/com/doumee/service/business/ZanService.java
@@ -26,9 +26,9 @@
    /**
     * ä¸»é”®åˆ é™¤
     *
     * @param id ä¸»é”®
     * @param zan
     */
    void deleteById(Integer id);
    void deleteById(Zan zan, Integer memberId);
    /**
     * åˆ é™¤
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
@@ -14,7 +14,6 @@
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.*;
import com.doumee.dao.business.model.*;
@@ -27,11 +26,16 @@
import com.doumee.dao.web.dto.shop.ShopSimpleDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.request.ActivityPageListRequest;
import com.doumee.dao.web.request.goods.ArticleRequest;
import com.doumee.service.business.*;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
@@ -105,6 +109,10 @@
    @Resource
    private ApplicationEventPublisher applicationEventPublisher;
    @Autowired
    private ZanMapper zanMapper;
    @Autowired
    private CollectMapper collectMapper;
    @Override
@@ -673,6 +681,11 @@
    }
    @Override
    public ActivityProbeShopDTO getActivityProbeShopDTO(Integer activityId, Integer memberId) {
@@ -1086,4 +1099,95 @@
        }*/
    }
    @Override
    public PageData<Activity> getArticlePage(PageWrap<ArticleRequest> pageWrap) {
        String basePath = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode();
        String activityPath = basePath + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ACTIVITY_FILE).getCode();
        ArticleRequest model = pageWrap.getModel();
        IPage<Activity> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Activity> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Activity.class)
                .selectAs(Labels::getName,Activity::getLablesName)
                .selectAs(Labels::getParam,Activity::getParam)
                .leftJoin(Labels.class,Labels::getId,Activity::getLabelId)
                .eq(Activity::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(model.getLabelId()),Activity::getLabelId,model.getLabelId())
                .eq(Objects.nonNull(model.getBrandId()),Activity::getBrandId,model.getBrandId())
                .like(StringUtils.isNotBlank(model.getInfo()),Activity::getContent,model.getInfo())
                .orderByDesc(Labels::getId)
        ;
        queryWrapper.orderByDesc(Activity::getCreateDate);
        IPage<Activity> activityIPage = activityJoinMapper.selectJoinPage(page, Activity.class, queryWrapper);
        for (Activity activity:activityIPage.getRecords()) {
            if(StringUtils.isNotBlank(activity.getImgurl())){
                activity.setImgurlfull(activityPath + activity.getImgurl());
            }
            //富文本内容 è¯»å–富文本
            if(Constants.equalsInteger(activity.getContentType(),Constants.ZERO)){
                activity.setContentInfo(
                        this.getContentInfo(activity.getContent())
                );
            }
        }
        return PageData.from(activityIPage);
    }
    public String getContentInfo(String html){
        Document doc = Jsoup.parse(html);
        Elements paragraphs = doc.select("p"); // èŽ·å–æ‰€æœ‰<p>标签
        String content = "";
        for (Element paragraph : paragraphs) {
            content = content + paragraph.text();
        }
        return content;
    }
    @Override
    public Activity getArticleInfo(Integer id,Integer memberId) {
        Activity activity = activityJoinMapper.selectJoinOne(Activity.class,
                new MPJLambdaWrapper<Activity>().selectAll(Activity.class)
                        .selectAs(Labels::getName,Activity::getLablesName)
                        .selectAs(Labels::getParam,Activity::getParam)
                        .leftJoin(Labels.class,Labels::getId,Activity::getLabelId)
                        .eq(Activity::getIsdeleted,Constants.ZERO)
                        .eq(Activity::getId,id)
                        .orderByDesc(Labels::getId)
                        .last(" limit 1 ")
        );
        if (Objects.isNull(activity)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isNotBlank(activity.getImgurl())){
            String basePath = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode();
            String activityPath = basePath + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ACTIVITY_FILE).getCode();
            activity.setImgurlfull(basePath + activityPath + activity.getImgurl());
        }
        activityMapper.update(new UpdateWrapper<Activity>().lambda()
                .setSql(" LOOKNUM = ifnull(LOOKNUM,0) + 1  ")
                .eq(Activity::getId,id)
        );
        if(Objects.nonNull(memberId)){
            activity.setCollectStatus(collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                    .eq(Collect::getMemberId,memberId)
                    .eq(Collect::getObjId,id)
                    .eq(Collect::getObjType,Constants.ZERO)
            )>Constants.ZERO?Constants.ONE:Constants.ZERO);
            activity.setZanStatus(zanMapper.selectCount(new QueryWrapper<Zan>().lambda()
                    .eq(Zan::getMemberId,memberId)
                    .eq(Zan::getObjId,id)
                    .eq(Zan::getObjType,Constants.ZERO)
            )>Constants.ZERO?Constants.ONE:Constants.ZERO);
        }
        return activity;
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -1166,6 +1166,10 @@
        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                .set(Goodsorder::getStatus, Constants.OrderStatus.REFUND.getKey())
                .set(Goodsorder::getRefundTime, DateUtil.getCurrDateTime())
                .set(Goodsorder::getRefundMoney, afterSaleApplyRequest.getMoney())
                .set(Goodsorder::getRefundUserId, loginUserInfo.getId())
                .set(Goodsorder::getRefundInfo, afterSaleApplyRequest.getRemark())
                .eq(Goodsorder::getId, goodsorder.getId())
        );
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java
@@ -1,6 +1,8 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
@@ -27,10 +29,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -201,6 +200,10 @@
    @Override
    public void saveCollect(CollectSaveRequest request, Integer memberId){
        if(Objects.isNull(request)|| Objects.isNull(request.getObjId())
        || Objects.isNull(request.getType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
                .eq(Collect::getMemberId,memberId)
                .eq(Collect::getObjType,request.getType())
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.listener.event.IntegralEvent;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -10,13 +11,17 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CommentJoinMapper;
import com.doumee.dao.business.CommentMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.model.Activity;
import com.doumee.dao.business.model.Comment;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Multifile;
import com.doumee.dao.web.dto.CommentDTO;
import com.doumee.dao.web.dto.ZanDTO;
import com.doumee.dao.web.dto.activity.ActivityCommentDTO;
import com.doumee.dao.web.dto.activity.ActivityReplyCommentDTO;
import com.doumee.dao.web.request.CommentApplyRequest;
import com.doumee.service.business.CommentService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -51,32 +56,39 @@
    private CommentJoinMapper commentJoinMapper;
    @Autowired
    private MemberService memberService;
    private MemberMapper memberMapper;
    @Autowired
    private ZanService zanService;
    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public Integer create(Comment comment,Integer memberId) {
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
    public Comment apply(CommentApplyRequest comment, Integer memberId) {
        Comment target = new Comment();
        target.setCreator(loginUserInfo.getId());
        target.setCreateDate(new Date());
        target.setEditor(loginUserInfo.getId());
        target.setEditDate(new Date());
        target.setRemark(comment.getRemark());
        target.setMemberId(loginUserInfo.getMemberId());
        target.setMemberId(memberId);
        target.setActivityId(comment.getActivityId());
        target.setContent(comment.getContent());
        target.setAnonymous(comment.getAnonymous());
        target.setAnonymous(Constants.ONE);
        target.setStatus(Constants.ZERO);
        target.setType(Constants.ZERO);
        if (comment.getReplyId() != null){
            Comment reply = commentMapper.selectById(comment.getReplyId());
            reply = Optional.ofNullable(reply).orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "回复目标不存在"));
            target.setReplyId(reply.getId());
            target.setReplyMemberId(reply.getMemberId());
            target.setCommentId(reply.getId());
            target.setType(Constants.ONE);
        }
@@ -89,11 +101,38 @@
        target.setRecIntegral(new BigDecimal("0"));
        commentMapper.insert(target);
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() ;
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(comment.getMultifileList())){
             String commentFile = path +        systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode();
            for (Multifile multifile:comment.getMultifileList()) {
                multifile.setCreateDate(new Date());
                multifile.setEditDate(new Date());
                multifile.setObjId(target.getId());
                multifile.setObjType(Constants.MultiFile.COMMENT_FILE.getKey());
                multifile.setFileFullUrl(commentFile + multifile.getFileurl());
            }
            multifileMapper.insert(comment.getMultifileList());
            target.setMultifileList(comment.getMultifileList());
        }
        Member member = memberMapper.selectById(memberId);
        if(Objects.nonNull(member)){
            target.setNikeName(member.getNickname());
            if(StringUtils.isNotBlank(member.getImgurl())){
                String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
                target.setMemberImgUrl(memberFile + member.getImgurl());
            }
        }
        IntegralEvent<Comment> integralEvent = new IntegralEvent(this,target, Constants.CoffeeBeanTask.POST_COMMENTS,memberId);
        applicationEventPublisher.publishEvent(integralEvent);
        return comment.getId();
        target.setZanCount(Constants.ZERO);
        target.setZanStatus(Constants.ZERO);
        return target;
    }
    @Override
    public void deleteById(Integer id) {
@@ -193,13 +232,19 @@
        MPJLambdaWrapper<Comment> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Comment.class);
        if(Objects.isNull(pageWrap.getModel().getMemberId())){
            queryWrapper.select(" 0 ",ActivityCommentDTO::getZanStatus);
        }else{
            queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityCommentDTO::getZanStatus);
        }
        queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0)  ",ActivityCommentDTO::getZanCount);
        queryWrapper.selectAs(Member::getNickname,ActivityCommentDTO::getNikeName);
        queryWrapper.selectAs(Member::getImgurl,ActivityCommentDTO::getMemberImgUrl);
        queryWrapper.selectAs(Member::getImgurl,ActivityCommentDTO::getMemberImgUrl);
        queryWrapper.leftJoin(Member.class,Member::getId,Comment::getMemberId);
        queryWrapper.eq(Comment::getType, Constants.ZERO);
        queryWrapper.eq(Comment::getStatus, Constants.ZERO);
        queryWrapper.eq(Comment::getActivityId,pageWrap.getModel().getActivityId());
        queryWrapper.orderByDesc(Comment::getId);
        IPage<ActivityCommentDTO> result = commentJoinMapper.selectJoinPage(page, ActivityCommentDTO.class, queryWrapper);
        if (CollectionUtils.isEmpty(result.getRecords())){
@@ -207,10 +252,15 @@
        }
        // æŸ¥è¯¢å„个评论 çš„首条回复 å’Œå›žå¤æ€»æ¡æ•°
        List<Integer> commentIds = result.getRecords().stream().map(s -> s.getId()).collect(Collectors.toList());
        MPJLambdaWrapper<Comment> replyWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        replyWrapper.selectAs(Comment::getId,ActivityReplyCommentDTO::getId);
        if(Objects.isNull(pageWrap.getModel().getMemberId())){
            replyWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus);
        }else{
            replyWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityReplyCommentDTO::getZanStatus);
        }
        replyWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0)  ",ActivityReplyCommentDTO::getZanCount);
        replyWrapper.selectAs(Comment::getCommentId,ActivityReplyCommentDTO::getCommentId);
        replyWrapper.selectAs(Comment::getMemberId,ActivityReplyCommentDTO::getMemberId);
        replyWrapper.selectAs(Comment::getContent,ActivityReplyCommentDTO::getContent);
@@ -224,26 +274,47 @@
        replyWrapper.in(Comment::getCommentId,commentIds);
        replyWrapper.groupBy(Comment::getCommentId);
        List<ActivityReplyCommentDTO> activityCommentDTOS = commentJoinMapper.selectJoinList(ActivityReplyCommentDTO.class, queryWrapper);
        List<ActivityReplyCommentDTO> activityCommentDTOS = commentJoinMapper.selectJoinList(ActivityReplyCommentDTO.class, replyWrapper);
        List<Integer> integerStream = activityCommentDTOS.stream().map(s -> s.getId()).collect(Collectors.toList());
        commentIds.addAll(integerStream);
        Map<Integer, ZanDTO> count = zanService.count(commentIds);
        Map<Integer, ActivityReplyCommentDTO> collect = activityCommentDTOS.stream().collect(Collectors.toMap(s -> s.getCommentId(), s -> s));
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode();
        String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
        String commentFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode();
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>()
                .lambda()
                .eq(Multifile::getIsdeleted,Constants.ZERO)
                .in(Multifile::getObjId,commentIds)
                .eq(Multifile::getObjType,Constants.MultiFile.COMMENT_FILE.getKey())
                .orderByDesc(Multifile::getId)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
                multifile.setFileFullUrl(commentFile + multifile.getFileurl());
            }
        }
        result.getRecords().forEach(s->{
            s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null);
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList()));
            }
            ZanDTO object = MapUtils.getObject(count, s.getId());
            ActivityReplyCommentDTO replyCommentDTO = collect.get(s.getId());
            ZanDTO replyZan = MapUtils.getObject(count, replyCommentDTO.getId());
            replyCommentDTO.setZanCount(replyZan != null ? replyZan.getCount() : 0);
            s.setActivityReplyCommentDTO(replyCommentDTO);
            s.setReplyCount(replyCommentDTO.getReplyCount());
            if(Objects.nonNull(replyCommentDTO)){
                ZanDTO replyZan = MapUtils.getObject(count, replyCommentDTO.getId());
                replyCommentDTO.setZanCount(replyZan != null ? replyZan.getCount() : 0);
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                    replyCommentDTO.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList()));
                }
                replyCommentDTO.setMemberImgUrl(StringUtils.isNotBlank(replyCommentDTO.getMemberImgUrl())?memberFile+replyCommentDTO.getMemberImgUrl():null);
                s.setActivityReplyCommentDTO(replyCommentDTO);
                s.setReplyCount(replyCommentDTO.getReplyCount());
            }
            s.setZanCount(object != null ? object.getCount() : 0);
        });
        });
        return PageData.from(result);
    }
@@ -255,6 +326,12 @@
        queryWrapper.selectAll(Comment.class);
        queryWrapper.selectAs(Member::getNickname,ActivityReplyCommentDTO::getMemberNikeName);
        queryWrapper.selectAs(Member::getImgurl,ActivityReplyCommentDTO::getMemberImgUrl);
        if(Objects.isNull(pageWrap.getModel().getMemberId())){
            queryWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus);
        }else{
            queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.MEMBER_ID = "+pageWrap.getModel().getMemberId()+" and z.ISDELETED = 0 and z.OBJ_TYPE = 1) ",ActivityReplyCommentDTO::getZanStatus);
        }
        queryWrapper.select(" (select count(1) from zan z where z.OBJ_ID = t.id and z.ISDELETED = 0 and z.OBJ_TYPE = 0)  ",ActivityReplyCommentDTO::getZanCount);
        queryWrapper.select("reply.NICKNAME as replyMemberNikeName");
        queryWrapper.leftJoin(Member.class,Member::getId,Comment::getMemberId);
        queryWrapper.leftJoin("member reply on reply.id = t.REPLY_MEMBER_ID");
@@ -265,11 +342,29 @@
        if (CollectionUtils.isEmpty(result.getRecords())){
            return PageData.from(result);
        }
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode();
        String memberFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
        String commentFile = path + systemDictDataBiz.queryByCode(Constants.OSS, Constants.COMMENT_FILE).getCode();
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>()
                .lambda()
                .eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjId,pageWrap.getModel().getCommentId())
                .eq(Multifile::getObjType,Constants.MultiFile.COMMENT_FILE.getKey())
                .orderByDesc(Multifile::getId)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
                multifile.setFileFullUrl(commentFile + multifile.getFileurl());
            }
        }
        List<Integer> integerStream = result.getRecords().stream().map(s -> s.getId()).collect(Collectors.toList());
        Map<Integer, ZanDTO> count = zanService.count(integerStream);
        result.getRecords().forEach(s->{
            s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null);
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList()));
            }
            ZanDTO replyZan = MapUtils.getObject(count, s.getId());
            s.setZanCount(replyZan != null ? replyZan.getCount() : 0);
            if (pageWrap.getModel().getCommentId().equals(s.getReplyId())){
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -60,6 +60,9 @@
    @Autowired
    private ShopGoodsRelationMapper shopGoodsRelationMapper;
    @Autowired
    private SearchHistoryMapper searchHistoryMapper;
    @Autowired
@@ -922,7 +925,6 @@
    @Override
    public IPage<GoodsInfoResponse> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
       GoodsRequest model = pageWrap.getModel();
       QueryWrapper<GoodsRequest> wrapper = new QueryWrapper<GoodsRequest>()
                .eq("g.ISDELETED",Constants.ZERO)
                .eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()),
@@ -956,7 +958,20 @@
                goodsMapper.goodsPageForShop(pageWrap.toPage(),wrapper,model.getShopId()) ;
        if (!CollectionUtils.isEmpty(page.getRecords())){
            String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
            page.getRecords().forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
            for (GoodsInfoResponse goodsInfoResponse:page.getRecords()
                 ) {
                goodsInfoResponse.setImgurl(StringUtils.isNotBlank(goodsInfoResponse.getImgurl())?(preFixPath+goodsInfoResponse.getImgurl()):null);
                //sku基础信息
                this.getSkuInfo(goodsInfoResponse);
            }
        }
        if(StringUtils.isNotBlank(model.getGoodsName())&&Objects.nonNull(model.getMemberId())){
            SearchHistory searchHistory = new SearchHistory();
            searchHistory.setIsdeleted(Constants.ZERO);
            searchHistory.setContent(model.getGoodsName());
            searchHistory.setMemberId(model.getMemberId());
            searchHistory.setType(Constants.ZERO);
            searchHistoryMapper.insert(searchHistory);
        }
        return page;
    }
@@ -971,41 +986,42 @@
        List<GoodsSkuResponse>  goodsSkuResponseList = goodsSkuMapper.getSkuResponseList(goodsResponse.getId());
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
//        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
//                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        Integer sumStock = Constants.ZERO;
        for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) {
            if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){
                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl());
            }else{
                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getImgurl());
            }
            //处理数据下标
            String goodsSkuName = goodsSkuResponse.getName();
            List<String> strList = Arrays.asList(goodsSkuName.split(";"));
            StringBuffer indexData = new StringBuffer();
            for (int i = 0; i < strList.size(); i++) {
                //查询sku信息
                Sku sku =  skuMapper.selectOne(new QueryWrapper<Sku>()
                        .eq("GOODS_ID",goodsResponse.getId())
                        .eq("SORTNUM",i+1)
                        .last(" limit 1 ")
                );
                if(Objects.isNull(sku)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
                }
                //查询SKU_ATTR
                SkuAttr skuAttr = skuAttrMapper.selectOne(new QueryWrapper<SkuAttr>()
                        .eq("SKU_ID",sku.getId())
                        .eq("NAME",strList.get(i))
                        .last(" limit 1 ")
                );
                if(Objects.isNull(skuAttr)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
                }
                indexData.append("," + ( skuAttr.getSortnum()-1));
            }
            goodsSkuResponse.setIndexData(indexData.toString().substring(1));
            goodsSkuResponse.setStock(Objects.isNull(goodsSkuResponse.getStock())?Constants.ZERO:goodsSkuResponse.getStock());
//            if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){
//                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl());
//            }else{
//                goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getImgurl());
//            }
//            //处理数据下标
//            String goodsSkuName = goodsSkuResponse.getName();
//            List<String> strList = Arrays.asList(goodsSkuName.split(";"));
//            StringBuffer indexData = new StringBuffer();
//            for (int i = 0; i < strList.size(); i++) {
//                //查询sku信息
//                Sku sku =  skuMapper.selectOne(new QueryWrapper<Sku>()
//                        .eq("GOODS_ID",goodsResponse.getId())
//                        .eq("SORTNUM",i)
//                        .last(" limit 1 ")
//                );
//                if(Objects.isNull(sku)){
//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
//                }
//                //查询SKU_ATTR
//                SkuAttr skuAttr = skuAttrMapper.selectOne(new QueryWrapper<SkuAttr>()
//                        .eq("SKU_ID",sku.getId())
//                        .eq("NAME",strList.get(i))
//                        .last(" limit 1 ")
//                );
//                if(Objects.isNull(skuAttr)){
//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU信息异常,请刷新查看");
//                }
//                indexData.append("," + ( skuAttr.getSortnum()-1));
//            }
//            goodsSkuResponse.setIndexData(indexData.toString().substring(1));
            sumStock = sumStock + goodsSkuResponse.getStock();
        }
        //真实销量 = realSaleNum  - saleNum;
@@ -1023,7 +1039,6 @@
        }
        goodsResponse.setSkuResponsesList(skuResponseList);
    }
    @Override
    public GoodsInfoResponse getGoodsInfo(Integer goodsId,Integer memberId) {
@@ -1056,7 +1071,6 @@
                    .eq(Collect::getObjType,Constants.ONE)
            )>Constants.ZERO?Constants.ONE:Constants.ZERO);
        }
        return goodsResponse;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -1027,14 +1027,31 @@
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        page.getRecords().forEach(i->{
            List<MemberOrderDetailResponse> memberOrderDetailResponseList = goodsorderDetailMapper.getDetailList(i.getOrderId());
            memberOrderDetailResponseList.forEach(j->{
                j.setImgUrl(fullUrl + j.getImgUrl());
            List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                    .eq(GoodsorderDetail::getOrderId,i.getOrderId()));
            goodsorderDetailList.stream().forEach(s ->{
                if(StringUtils.isNotBlank(s.getImgurl())){
                    s.setImgurl(fullUrl + s.getImgurl());
                }
            });
            i.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
            i.setGoodsorderDetailList(goodsorderDetailList);
        });
        return page;
    }
    @Override
    public MemberOrderResponse getGoodsOrderDetailByCode(String exchangeCode){
        Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getExchangeCode,exchangeCode)
                .last(" limit 1")
        );
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到订单信息");
        }
        return this.getGoodsOrderDetail(goodsorder.getId());
    }
    /**
@@ -1049,23 +1066,34 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到订单信息");
        }
        if(memberOrderResponse.getOrderStatus().equals(Constants.OrderStatus.WAIT_PAY.getKey())){
            memberOrderResponse.setCountdown(memberOrderResponse.getCancelDate().getTime()-System.currentTimeMillis());
            memberOrderResponse.setCountdown(memberOrderResponse.getCancelDate().getTime()>System.currentTimeMillis()?memberOrderResponse.getCancelDate().getTime()-System.currentTimeMillis():Constants.ZERO);
        }
        List<MemberOrderDetailResponse> memberOrderDetailResponseList = goodsorderDetailMapper.getDetailList(memberOrderResponse.getOrderId());
        String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
        memberOrderDetailResponseList.forEach(j->{
            j.setImgUrl(fullUrl + j.getImgUrl());
        List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                .eq(GoodsorderDetail::getOrderId,memberOrderResponse.getOrderId()));
        goodsorderDetailList.stream().forEach(s ->{
            if(StringUtils.isNotBlank(s.getImgurl())){
                s.setImgurl(fullUrl + s.getImgurl());
            }
        });
        memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
        memberOrderResponse.setGoodsorderDetailList(goodsorderDetailList);
        Shop shop = shopMapper.selectById(memberOrderResponse.getShopId());
        if(Objects.nonNull(shop)){
            shop.setPassword(null);
            shop.setUsername(null);
            shop.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
            memberOrderResponse.setShopInfo(shop);
        }
        Member member = memberMapper.selectById(memberOrderResponse.getMemberId());
        if(Objects.nonNull(member)){
            String memberfullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode();
            member.setImgFullUrl(memberfullUrl + member.getImgurl());
            if(StringUtils.isNotBlank(member.getImgurl())){
                member.setImgFullUrl(memberfullUrl + member.getImgurl());
            }
            memberOrderResponse.setMember(member);
        }
        return memberOrderResponse;
@@ -1171,9 +1199,7 @@
                }
            }
        }
        SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
        //查询优惠券信息记录
        if(!Objects.isNull(goodsorder.getCouponId())){
            MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
@@ -1578,6 +1604,7 @@
     * @param memberId
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void affirmOrder(Integer orderId,Integer memberId){
        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
        if(!goodsorder.getMemberId().equals(memberId)){
@@ -1687,10 +1714,12 @@
     * @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 "));
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void orderWriteOff(Integer orderId,Integer memberId){
        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);
        }
@@ -1704,9 +1733,9 @@
        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()+"]非您绑定的经销商,无法进行该操作!");
        }
//        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);
@@ -1733,7 +1762,7 @@
            return;
        }
        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ONE);
        if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
        if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(backIntegral);
@@ -1782,12 +1811,12 @@
            return;
        }
        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
        if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
        if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(backIntegral);
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
@@ -2102,12 +2131,13 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        ShopOrderRequest model = pageWrap.getModel();
        queryWrapper.selectAll(Goodsorder.class);
//        queryWrapper.selectAs(Member::getNickname,Goodsorder::getNickName);
//        queryWrapper.selectAs(Member::getPhone,Goodsorder::getPhone);
//        queryWrapper.selectAs(Member::getImgurl,Goodsorder::getImgurl);
        queryWrapper.selectAs(Shop::getName,Goodsorder::getShopName);
        queryWrapper.selectAs(Shop::getPhone,Goodsorder::getShopPhone);
        queryWrapper.leftJoin(Shop.class,Shop::getId,Goodsorder::getDistributionShopId);
        queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(Objects.nonNull(model.getStatus()),Goodsorder::getStatus,model.getStatus());
        queryWrapper.eq(Objects.nonNull(model.getShopId()),Goodsorder::getDistributionShopId,model.getShopId());
        queryWrapper.eq(Objects.nonNull(model.getShopId())&&Constants.equalsInteger(model.getUserType(),Constants.ONE),Goodsorder::getDistributionShopId,model.getShopId());
        queryWrapper.eq(Objects.nonNull(model.getShopId())&&Constants.equalsInteger(model.getUserType(),Constants.ZERO),Goodsorder::getMemberId,model.getShopId());
        queryWrapper.orderByDesc(Goodsorder::getCreateDate);
        IPage<Goodsorder> result = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper);
@@ -2120,8 +2150,8 @@
            List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                    .eq(GoodsorderDetail::getOrderId,goodsorder.getId()));
            goodsorderDetailList.stream().forEach(s ->{
                if(StringUtils.isBlank(s.getImgurl())){
                    s.setImgurl(path + s.getGoodsImgurl());
                if(StringUtils.isNotBlank(s.getImgurl())){
                    s.setImgurl(path + s.getImgurl());
                }
            });
            goodsorder.setGoodsorderDetailList(goodsorderDetailList);
@@ -2131,4 +2161,27 @@
//    public IPage<Shop> getGoodsorderPageForShop(PageWrap pageWrap,String shopId) {
//        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
//
//        IPage<Goodsorder> goodsorderPage = goodsorderJoinMapper.selectJoinPage(page,Goodsorder.class,
//                new MPJLambdaWrapper<Goodsorder>()
//                        .selectAll(Goodsorder.class)
//                        .selectAs(Member::getPhone,Goodsorder::getPhone)
//                        .selectAs(Member::getNickname,Goodsorder::getNickName)
//                        .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId)
//                        .eq(Goodsorder::getIsdeleted,Constants.ZERO)
//                        .eq(Goodsorder::getDistributionShopId,shopId)
//                        .eq(Goodsorder::getStatus,Constants.OrderStatus.PAY_DONE.getKey())
//                        .eq(Goodsorder::getReceiveType,Constants.ONE)
//                        .orderByDesc(Goodsorder::getId)
//        );
//
//
//
//    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -155,7 +155,12 @@
        integral.setCreator(member.getId());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
@@ -174,7 +179,7 @@
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,member.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), dealIntegralRequest.getParam1()
                integral.getId(), info
        );
@@ -193,7 +198,12 @@
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
@@ -203,16 +213,18 @@
        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());
        }
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), dealIntegralRequest.getParam1()
                integral.getId(), info
        );
        return integral.getId();
    }
@@ -230,11 +242,16 @@
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        integral.setNum(dealIntegralRequest.getIntegralNum());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",integral.getNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        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.getAmount().add(integral.getNum()):shop.getAmount().subtract(integral.getNum()));
        integral.setOrderCode(dealIntegralRequest.getOrderCode());
        integral.setUserType(Constants.TWO);
@@ -544,12 +561,17 @@
    }
    @Override
    public IntegralDataResponse getIntegralData(IntegralRecordDTO model){
        if(Objects.isNull(model)
            || Objects.isNull(model.getUserType())
            || Objects.isNull(model.getMemberId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        IntegralDataResponse integralDataResponse = new IntegralDataResponse();
        integralDataResponse.setSurplusIntegral(BigDecimal.ZERO);
        integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
        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(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate));
@@ -562,7 +584,7 @@
            //积分失效方式 0长期有效 1按积分产生时间失效
            Integer type  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
            //消费者积分 éœ€è¦æŸ¥è¯¢å³å°†è¿‡æœŸç§¯åˆ†
            if(Constants.equalsInteger(type,Constants.ZERO)){
            if(Constants.equalsInteger(type,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,6 +64,9 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private ShopMapper shopMapper;
    @Override
    public InviteInfoResponse getInviteInfo(Integer memberId){
        InviteInfoResponse inviteInfoResponse = new InviteInfoResponse();
@@ -101,15 +104,33 @@
    }
    /**
     * ç”Ÿæˆæµ·æŠ¥å›¾
     * @param userType
     * @param memberId
     * @return
     * @throws Exception
     */
    @Override
    public String createShareImg(Integer memberId) throws Exception {
    public String createShareImg(Integer userType,Integer memberId) throws Exception {
        String imgUrl = systemDictDataBiz.queryByCode(Constants.ORDER_SET,Constants.INVITE_IMG_URL).getCode();
        String suffix = "m_" + memberId;
        if(Constants.equalsInteger(Constants.ONE,userType)){
            Shop shop = shopMapper.selectById(memberId);
            if(Objects.nonNull(shop)
                    && StringUtils.isNotBlank(shop.getPosterImg())){
                String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                        + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
                imgUrl = path + shop.getPosterImg();
            }
            suffix = "s_"+memberId;
        }
        BufferedImage img1  = GeneratePicUtil.transfromToImage(imgUrl,imgUrl.substring(imgUrl.lastIndexOf(".") + 1));
        if (img1 == null) {
            return imgUrl;
        }
        String url = null;
        String scene = "m_" + memberId;
        String scene = "trial";
        //内容分享海报图片
        InputStream mpCode = Constants.generateWxMiniImgStream(
                scene,
@@ -121,17 +142,42 @@
        ALiYunUtil obs = new ALiYunUtil(
        systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode()
                ,systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(), systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode());
        String shareFolder = systemDictDataBiz.queryByCode(Constants.RESOURCE_PATH, Constants.SHARES_FILE).getCode();
        String shareFolder = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
        String key = DateUtil.getNowShortDate() + "/" + UUID.randomUUID().toString() + ".jpg";
        String fileName = shareFolder + key;
        if (obs.uploadOnlineObject(inputStream,systemDictDataBiz.queryByCode(Constants.OSS, Constants.BUCKETNAME).getCode(), key,null)) {
        if (obs.uploadOnlineObject(inputStream,systemDictDataBiz.queryByCode(Constants.OSS, Constants.BUCKETNAME).getCode(), fileName,null)) {
            url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode() + fileName;
        }
        return url;
    }
    @Override
    public String createShopMiniProgramCode(Integer shopId) throws Exception {
        //内容分享海报图片
        InputStream inputStream = Constants.generateWxMiniImgStream(
                "trial",
                "/page/index/?shopId="+shopId,
                true);//小程序
        String url = null;
        ALiYunUtil obs = new ALiYunUtil(
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode()
                ,systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode());
        String shareFolder = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
        String key = DateUtil.getNowShortDate() + "/" + UUID.randomUUID().toString() + ".jpg";
        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 url;
    }
    @Override
    public Integer create(InviteRecord inviteRecord) {
        inviteRecordMapper.insert(inviteRecord);
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -57,6 +57,7 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -120,6 +121,9 @@
    @Autowired
    private IntegralService integralService;
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Override
    public Integer create(Member member) {
@@ -316,9 +320,11 @@
                member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                        systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
                //创建token
                JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
                String token = JwtTokenUtil.generateToken(payLoad);
//                JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
//                String token = JwtTokenUtil.generateToken(payLoad);
                String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
                accountResponse.setToken(token);
                accountResponse.setOpenid(openId);
                accountResponse.setMember(member);
            }else{
                accountResponse.setOpenid(openId);
@@ -331,15 +337,16 @@
    }
    @Override
    public AccountResponse wxLoginTest( Integer memberId){
        //创建token
        JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
        String token = JwtTokenUtil.generateToken(payLoad);
        AccountResponse accountResponse = new AccountResponse();
        accountResponse.setToken(token);
        return accountResponse;
    }
//    @Override
//    public AccountResponse wxLoginTest( Integer memberId){
//        //创建token
////        JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
////        String token = JwtTokenUtil.generateToken(payLoad);
//        String token = JwtTokenUtil.generateTokenForRedis(memberId, Constants.ZERO, JSONObject.toJSONString(null), redisTemplate);
//        AccountResponse accountResponse = new AccountResponse();
//        accountResponse.setToken(token);
//        return accountResponse;
//    }
    @Override
    public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){
@@ -385,8 +392,9 @@
                }
                memberMapper.updateById(member);
            }
            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
            String token = JwtTokenUtil.generateToken(payLoad);
//            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
//            String token = JwtTokenUtil.generateToken(payLoad);
            String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
            accountResponse.setMember(member);
@@ -526,23 +534,20 @@
    @Override
    public Member updateMember(UpdateMemberRequest updateMemberRequest){
    public void 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());
        member.setEditor(updateMemberRequest.getMemberId());
        member.setEditDate(new Date());
        memberMapper.updateById(member);
        Member dbMember = memberMapper.selectById(updateMemberRequest.getMemberId());
        dbMember.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+dbMember.getImgurl());
        return dbMember;
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .set(StringUtils.isNotBlank(updateMemberRequest.getImgurl()),Member::getImgurl,updateMemberRequest.getImgurl())
                .set(StringUtils.isNotBlank(updateMemberRequest.getNickname()),Member::getNickname,updateMemberRequest.getNickname())
                .set(StringUtils.isNotBlank(updateMemberRequest.getName()),Member::getName,updateMemberRequest.getName())
                .set(Member::getEditDate,DateUtil.getCurrDateTime())
                .eq(Member::getId,updateMemberRequest.getMemberId())
        );
    }
@@ -626,15 +631,15 @@
        if(StringUtils.isNotBlank(member.getPhone())&&!member.getPhone().equals(request.getPhone())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"手机号错误");
        }
        this.verifyPhoneCode(request.getCode(),request.getMemberId());
        this.verifyPhoneCode(request.getCode(),request.getPhone());
    }
    public void verifyPhoneCode(String code,Integer memberId){
    public void verifyPhoneCode(String code,String phone){
        //验证码
        Smsrecord smsrecord = smsrecordMapper.selectOne(new QueryWrapper<Smsrecord>().lambda()
                .eq(Smsrecord::getIsdeleted,Constants.ZERO)
                .eq(Smsrecord::getCode,code)
                .eq(Smsrecord::getMemberId,memberId)
                .eq(Smsrecord::getPhone,phone)
                .last(" limit 1")
        );
        if(Objects.isNull(smsrecord)){
@@ -662,11 +667,15 @@
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //判断新手机号是否已被使用
        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda().eq(Member::getPhone,request.getPhone()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,新手机号已被绑定,无法进行换绑!");
        }
        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());
        this.verifyPhoneCode(request.getCode(),request.getPhone());
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .eq(Member::getPhone,request.getPhone())
                .eq(Member::getId,request.getMemberId())
@@ -766,9 +775,31 @@
    }
    @Override
    public void logOut(String token,Integer memberId){
        Member  member = memberMapper.selectById(memberId);
        if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenId())){
            memberMapper.update(new UpdateWrapper<Member>().lambda()
                    .set(Member::getOpenId,null)
                    .eq(Member::getId,member.getId())
            );
        }
        redisTemplate.delete(token);
    }
    @Override
    public void logOff(String token,Integer memberId){
        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)
                    .eq(Member::getId,member.getId())
            );
        }
        redisTemplate.delete(token);
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java
@@ -279,19 +279,13 @@
     * @param memberId ç”¨æˆ·ä¸»é”®/商户主键
     * @param integral å˜åŠ¨ç§¯åˆ†/现金值
     * @param objId å…³è”对象主键 - ç§¯åˆ†æµæ°´å˜åŠ¨è®°å½•ä¸»é”®
     * @param param1 param2
     */
    @Override
    public void saveMemberIntegralNotice(Constants.IntegralObjType integralObjType,Integer type,
                                         Integer memberId,
                                         BigDecimal integral,
                                         Integer objId,String param1){
                                         Integer objId,String info){
        String title = integralObjType.getName();
        String info = integralObjType.getNoteinfo();
        info = info.replace("${param}",integral.toString());
        if(StringUtils.isNotBlank(param1)){
            info = info .replace("${param1}",param1);
        }
        this.saveNoticeInfo(
                type,
                Constants.ONE,
server/dmmall_service/src/main/java/com/doumee/service/business/impl/SearchHistoryServiceImpl.java
@@ -2,6 +2,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.SearchHistoryMapper;
import com.doumee.dao.business.model.SearchHistory;
@@ -13,6 +14,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.yaml.snakeyaml.scanner.Constant;
import java.util.List;
@@ -136,4 +138,27 @@
        QueryWrapper<SearchHistory> wrapper = new QueryWrapper<>(searchHistory);
        return searchHistoryMapper.selectCount(wrapper);
    }
    @Override
    public List<SearchHistory> findListByType(Integer type,Integer memberId) {
        return searchHistoryMapper.selectList(new QueryWrapper<SearchHistory>().lambda()
                .eq(SearchHistory::getIsdeleted, Constants.ZERO)
                .eq(SearchHistory::getMemberId,memberId)
                .eq(SearchHistory::getType,type)
                .last("limit 10")
                .orderByDesc(SearchHistory::getId)
        );
    }
    @Override
    public void cleanHistory(Integer type,Integer memberId) {
        searchHistoryMapper.update(new UpdateWrapper<SearchHistory>().lambda()
                .set(SearchHistory::getIsdeleted, Constants.ONE)
                .eq(SearchHistory::getMemberId,memberId)
                .eq(SearchHistory::getType,type)
        );
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -43,6 +43,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -116,6 +117,9 @@
    private MemberCouponService memberCouponService;
    @Autowired
    private InviteRecordService inviteRecordService;
    @Autowired
    private ShopNewsService shopNewsService;
    @Autowired
    private LabelsMapper labelsMapper;
@@ -126,9 +130,12 @@
    @Autowired
    private IntegralMapper integralMapper;
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Override
    public Integer create(Shop shop) {
    public Integer create(Shop shop) throws Exception {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        isCreateParamValid(shop,user);
        shop.setCreator(user.getId());
@@ -147,6 +154,12 @@
        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()));
        }
        return shop.getId();
    }
@@ -694,6 +707,11 @@
     */
    @Override
    public AccountResponse shopOpenidLogin(ShopLoginDTO dto){
        if(Objects.isNull(dto)
                || StringUtils.isBlank(dto.getOpenid())
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"静默登录失败,请联系管理员");
        }
        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, dto.getOpenid())
                .eq(Shop::getIsdeleted,Constants.ZERO)
                .last("limit 1")
@@ -701,17 +719,9 @@
        AccountResponse accountResponse = new AccountResponse();
        accountResponse.setOpenid(dto.getOpenid());
        if(Objects.nonNull(shop)){
            if(Objects.isNull(dto.getMemberId())
                    && ( Objects.isNull(shop.getMemberId())
                    || !Constants.equalsInteger(shop.getMemberId(),dto.getMemberId()))){
                shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                        .set(Shop::getMemberId,dto.getMemberId())
                        .eq(Shop::getId,shop.getId())
                );
            }
            JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
            String token = JwtTokenUtil.generateToken(payLoad);
            String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.ONE, JSONObject.toJSONString(shop), redisTemplate);
            accountResponse.setToken(token);
            accountResponse.setShop(this.getShopResponseInfo(shop));
        }
        return accountResponse;
    }
@@ -726,7 +736,6 @@
    public AccountResponse shopPasswordLogin(ShopLoginDTO dto){
        if(StringUtils.isBlank(dto.getUserName())
                || StringUtils.isBlank(dto.getPassword())
                || StringUtils.isBlank(dto.getOpenid())
        ){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户名或密码不能为空");
        }
@@ -743,20 +752,24 @@
            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
        }
        //创建token
        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
        String token = JwtTokenUtil.generateToken(payLoad);
//        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
//        String token = JwtTokenUtil.generateToken(payLoad);
        String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.ONE, JSONObject.toJSONString(shop), redisTemplate);
        AccountResponse accountResponse = new AccountResponse();
        accountResponse.setToken(token);
        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                .set(Shop::getOpenId,dto.getOpenid())
                .set(Shop::getMemberId,dto.getMemberId())
                .eq(Shop::getId,shop.getId())
        );
        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                .set(Shop::getOpenId,null)
                .eq(Shop::getOpenId,dto.getOpenid())
                .ne(Shop::getId,shop.getId())
        );
        accountResponse.setShop(this.getShopResponseInfo(shop));
        if(StringUtils.isNotBlank(dto.getOpenid())){
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,dto.getOpenid())
                    .eq(Shop::getId,shop.getId())
            );
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,null)
                    .eq(Shop::getOpenId,dto.getOpenid())
                    .ne(Shop::getId,shop.getId())
            );
        }
        return accountResponse;
    }
@@ -765,49 +778,62 @@
    @Override
    public ShopInfoResponse getShopInfo(Integer shopId){
        ShopInfoResponse response = new ShopInfoResponse();
        Shop shop = shopMapper.selectById(shopId);
        if(Objects.isNull(shop)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
        BeanUtils.copyProperties(shop,response);
        response.setImgurl(path + shop.getImgurl());
        response.setIdcardImg(path + shop.getIdcardImg());
        response.setIdcardImgBack(path + shop.getIdcardImgBack());
        response.setBusinessImg(path + shop.getBusinessImg());
        return this.getShopResponseInfo(shop)   ;
    }
    public ShopInfoResponse getShopResponseInfo(Shop shop){
        ShopInfoResponse response = new ShopInfoResponse();
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() ;
        String shopFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
        BeanUtils.copyProperties(shop,response);
        response.setImgurl(StringUtils.isNotBlank(shop.getImgurl())?(path + shopFile + shop.getImgurl()):"");
        response.setIdcardImg(StringUtils.isNotBlank(shop.getIdcardImg())?(path + shopFile + shop.getIdcardImg()):"");
        response.setIdcardImgBack(StringUtils.isNotBlank(shop.getIdcardImgBack())?(path + shopFile + shop.getIdcardImgBack()):"");
        response.setBusinessImg(StringUtils.isNotBlank(shop.getBusinessImg())?(path + shopFile + shop.getBusinessImg()):"");
        response.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
        if(StringUtils.isNotBlank(shop.getProgramCode())){
            String sharesFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
            response.setProgramCode(path + sharesFile + shop.getProgramCode());
        }
        if(StringUtils.isNotBlank(shop.getPosterImgCode())){
            String sharesFile = systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHARES_FILE).getCode();
            response.setPosterImgCode(path + sharesFile + shop.getPosterImgCode());
        }
        return response;
    }
    @Override
    public List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId){
        List<Member>  memberList = memberJoinMapper.selectJoinList(Member.class,
                new MPJLambdaWrapper<Member>()
                        .selectAll(Member.class)
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .eq(Member::getBindShopId,shopId)
                        .and(StringUtils.isNotBlank(request.getMemberIfo()),i->i.like(Member::getPhone,request.getMemberIfo()).or().like(Member::getNickname,request.getMemberIfo()))
    public PageData<Member> myCustomer(PageWrap<MyCustomerRequest> pageWrap, Integer shopId){
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Utils.MP.blankToNull(pageWrap.getModel());
        MyCustomerRequest model = pageWrap.getModel();
        IPage<Member> result = memberJoinMapper.selectJoinPage(page,Member.class, new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getBindShopId,shopId)
                .and(StringUtils.isNotBlank(model.getMemberInfo()),i->i.like(Member::getPhone,model.getMemberInfo()).or().like(Member::getNickname,model.getMemberInfo()))
        );
        List<MyCustomerResponse> responseList = new ArrayList<>();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
            String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                    + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
            memberList.forEach(member -> {
                MyCustomerResponse response = new MyCustomerResponse();
                response.setNickName(member.getNickname());
                response.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
                response.setBindShopDate(member.getBindShopDate());
                response.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():"");
                responseList.add(response);
            result.getRecords().forEach(member -> {
                member.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
                member.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():"");
            });
        }
        return responseList;
        return PageData.from(result);
    }
    @Override
    public SaleReportResponse saleReport(SaleReportRequest request,Integer shopId){
@@ -825,39 +851,23 @@
                        .eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getDistributionShopId,shopId)
                        //今日
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW())  ")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW())  ")
                        //当月
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
                        //上月
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
                        //固定月份
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
                        //自定义日期
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
                        .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  t.CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  t.CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
                        .ne(Goodsorder::getStatus,Constants.OrderStatus.CLOSE.getKey())
                        .orderByDesc(Goodsorder::getId)
        );
        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(goodsorderList)) {
            saleReportResponse.setSaleTotal(goodsorderList.stream().map(i->i.getPrice().subtract(i.getMailPrice())).reduce(BigDecimal.ZERO, BigDecimal::add));
            saleReportResponse.setOrderNum(goodsorderList.size());
            if(Constants.equalsInteger(request.getQueryType(),Constants.ONE)){
                List<SaleReportOrderResponse> list = new ArrayList<>();
                goodsorderList.stream().forEach(goodsorder -> {
                    SaleReportOrderResponse response = new SaleReportOrderResponse();
                    response.setId(goodsorder.getId());
                    response.setCode(goodsorder.getCode());
                    response.setPrice(goodsorder.getPrice());
                    response.setMailPrice(goodsorder.getMailPrice());
                    response.setCreateDate(goodsorder.getCreateDate());
                    response.setNickName(goodsorder.getNickName());
                    response.setPhone(goodsorder.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
                    response.setShopSettlement(goodsorder.getShopSettlement());
                    list.add(response);
                });
                saleReportResponse.setSaleReportOrderResponseList(list);
            }
        }
        List<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
                .eq(Integral::getIsdeleted,Constants.ZERO)
@@ -923,4 +933,22 @@
        shopGoodsRelationMapper.insert(add);
        return "操作成功";
    }
    @Override
    public void logOut(String token,Integer shopId){
        Shop shop = shopMapper.selectById(shopId);
        if(Objects.nonNull(shop)&&StringUtils.isNotBlank(shop.getOpenId())){
            shopMapper.update(new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getOpenId,null)
                    .eq(Shop::getId,shop.getId())
            );
        }
        redisTemplate.delete(token);
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java
@@ -265,8 +265,8 @@
    public UserCenterVO getPlatformAboutUs(){
        UserCenterVO userCenterVO = new UserCenterVO();
        userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
        userCenterVO.setIntegralRule(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INTERALSET_INTEGRALRULEINFO).getCode()));
        userCenterVO.setInvitelRule(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INVITE_RULE).getCode()));
        userCenterVO.setIntegralRule(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET,Constants.INTERALSET_INTEGRALRULEINFO).getCode()));
        userCenterVO.setInvitelRule(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.ORDER_SET,Constants.INVITE_RULE).getCode()));
        userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
        userCenterVO.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_PHONE).getCode()));
        userCenterVO.setUserAgreement(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.USER_AGREEMENT).getCode()));
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ZanServiceImpl.java
@@ -1,5 +1,7 @@
package com.doumee.service.business.impl;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
@@ -19,6 +21,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -34,25 +37,33 @@
    @Override
    public Integer create(Zan zan,Integer memberId) {
//        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(Objects.isNull(zan)
            || Objects.isNull(zan.getObjId())
            || Objects.isNull(zan.getObjType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Zan target = new Zan();
//        target.setCreator(userInfo.getId());
        target.setCreateDate(new Date());
//        target.setEditor(userInfo.getId());
        target.setEditDate(new Date());
        target.setMemberId(memberId);
        target.setObjId(zan.getObjId());
        target.setObjType(zan.getObjType());
        target.setImgurl(zan.getImgurl());
        target.setTitle(zan.getTitle());
        target.setObjMemberId(zan.getObjMemberId());
        zanMapper.insert(target);
        return zan.getId();
    }
    @Override
    public void deleteById(Integer id) {
        zanMapper.deleteById(id);
    public void deleteById(Zan zan, Integer memberId) {
        if(Objects.isNull(zan)
                || Objects.isNull(zan.getObjId())
                || Objects.isNull(zan.getObjType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        zanMapper.delete(new QueryWrapper<Zan>().lambda()
                .eq(Zan::getObjId,zan.getObjId())
                .eq(Zan::getObjType,zan.getObjType())
                .eq(Zan::getMemberId,memberId)
        );
    }
    @Override
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -1,6 +1,8 @@
package com.doumee.api.web;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
@@ -15,9 +17,12 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;
@@ -53,14 +58,14 @@
        return  ApiResponse.success(memberService.wxPhone(wxPhoneRequest));
    }
    @ApiOperation(value = "测试登陆接口", notes = "小程序端")
    @GetMapping("/testLogin")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "memberId", value = "用户编码", required = false)
    })
    public ApiResponse testLogin(@RequestParam   Integer memberId) {
        return  ApiResponse.success(memberService.wxLoginTest(memberId));
    }
//    @ApiOperation(value = "测试登陆接口", notes = "小程序端")
//    @GetMapping("/testLogin")
//    @ApiImplicitParams({
//            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "memberId", value = "用户编码", required = false)
//    })
//    public ApiResponse testLogin(@RequestParam   Integer memberId) {
//        return  ApiResponse.success(memberService.wxLoginTest(memberId));
//    }
    @ApiOperation(value = "获取系统配置", notes = "小程序端")
    @GetMapping("/getPlatformAboutUs")
@@ -74,10 +79,12 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<Member> updateMember(@RequestBody UpdateMemberRequest UpdateMemberRequest) {
    public ApiResponse updateMember(@RequestBody UpdateMemberRequest UpdateMemberRequest) {
        UpdateMemberRequest.setMemberId(getMemberId());
        return  ApiResponse.success("操作成功",memberService.updateMember(UpdateMemberRequest));
        memberService.updateMember(UpdateMemberRequest);
        return  ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation(value = "获取用户信息", notes = "小程序端")
@@ -87,9 +94,11 @@
    })
    public ApiResponse<Member> getUserInfo() {
        Member member = memberService.findById(getMemberId());
        member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()
                +member.getImgurl());
        if(StringUtils.isNotBlank(member.getImgurl())){
            member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()
                    +member.getImgurl());
        }
        Areas areas = areasService.findById(member.getCityId(), Constants.ONE);
        member.setCityName(Optional.ofNullable(areas).map(s->s.getName()).orElse(""));
        return  ApiResponse.success("获取成功",member);
@@ -120,4 +129,28 @@
        return  ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation("消费者 - é€€å‡ºç™»å½•")
    @GetMapping("/logOut")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse logOut(HttpServletRequest request) {
        memberService.logOut(request.getHeader(JwtTokenUtil.HEADER_KEY),getMemberId());
        return ApiResponse.success("操作成功");
    }
    @LoginRequired
    @ApiOperation("用户注销")
    @GetMapping("/logOff")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse logOff(HttpServletRequest request) {
        memberService.logOff(request.getHeader(JwtTokenUtil.HEADER_KEY),getMemberId());
        return ApiResponse.success("操作成功");
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/ActivityApi.java
@@ -30,17 +30,17 @@
@Slf4j
public class ActivityApi extends ApiController{
    @LoginRequired
    @ApiOperation(value = "活动报名", notes = "小程序端")
    @PostMapping("/activitySign")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    @Transactional(rollbackFor = Exception.class)
    public ApiResponse<ActivitySignResponse> activitySign(@RequestBody ActivitySignRequest activitySignRequest) {
        activitySignRequest.setMemberId(getMemberId());
        return  ApiResponse.success("操作成功",activitySignService.signActivity(activitySignRequest));
    }
//    @LoginRequired
//    @ApiOperation(value = "活动报名", notes = "小程序端")
//    @PostMapping("/activitySign")
//    @ApiImplicitParams({
//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
//    })
//    @Transactional(rollbackFor = Exception.class)
//    public ApiResponse<ActivitySignResponse> activitySign(@RequestBody ActivitySignRequest activitySignRequest) {
//        activitySignRequest.setMemberId(getMemberId());
//        return  ApiResponse.success("操作成功",activitySignService.signActivity(activitySignRequest));
//    }
    /**
@@ -48,7 +48,7 @@
     * @param pageWrap
     * @return
     */
    @LoginRequired
//    @LoginRequired
    @ApiOperation(value = "分页获取 èµ„讯/探店/活动列表", notes = "小程序端")
    @PostMapping("/getActivityCard")
    public ApiResponse<PageData<ActivityCardDTO>> getActivityCard(@RequestBody PageWrap<ActivityPageListRequest> pageWrap){
@@ -67,53 +67,53 @@
        return ApiResponse.success(activityService.getActivity(activityId,getMemberId()));
    }
    /**
     * èŽ·å–æ´»åŠ¨id
     * @param activityId æ´»åЍID
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "商户中心-获取活动详情信息", notes = "小程序端")
    @GetMapping("/getShopOrgActivity")
    public ApiResponse<BaseActivity> getShopOrgActivity(Integer activityId){
        return ApiResponse.success(activityService.getActivity(activityId));
    }
//    /**
//     * èŽ·å–æ´»åŠ¨id
//     * @param activityId æ´»åЍID
//     * @return
//     */
//    @LoginRequired
//    @ApiOperation(value = "商户中心-获取活动详情信息", notes = "小程序端")
//    @GetMapping("/getShopOrgActivity")
//    public ApiResponse<BaseActivity> getShopOrgActivity(Integer activityId){
//        return ApiResponse.success(activityService.getActivity(activityId));
//    }
    /**
     * å’¨è¯¢ã€æŽ¢åº—详细信息
     * @param activityId
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "咨询、探店详细信息", notes = "小程序端")
    @GetMapping("/getActivityProbeShopDTO")
    public ApiResponse<ActivityProbeShopDTO> getActivityProbeShopDTO(Integer activityId){
        return ApiResponse.success(activityService.getActivityProbeShopDTO(activityId,getMemberId()));
    }
//    @LoginRequired
//    @ApiOperation(value = "咨询、探店详细信息", notes = "小程序端")
//    @GetMapping("/getActivityProbeShopDTO")
//    public ApiResponse<ActivityProbeShopDTO> getActivityProbeShopDTO(Integer activityId){
//        return ApiResponse.success(activityService.getActivityProbeShopDTO(activityId,getMemberId()));
//    }
    /**
     * èŽ·å–è¯¥åŸŽå¸‚ä¸‹çš„æœ€çƒ­æŽ¢åº—è§†é¢‘
     * @param pageWrap
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "获取该城市下的最热探店视频列表", notes = "小程序端")
    @PostMapping("/getActivityVideoDTO")
    public ApiResponse<PageData<ActivityVideoDTO>> getActivityVideoDTO(PageWrap<Integer> pageWrap){
        return ApiResponse.success(activityService.getActivityVideoDTO(pageWrap));
    }
//    @LoginRequired
//    @ApiOperation(value = "获取该城市下的最热探店视频列表", notes = "小程序端")
//    @PostMapping("/getActivityVideoDTO")
//    public ApiResponse<PageData<ActivityVideoDTO>> getActivityVideoDTO(PageWrap<Integer> pageWrap){
//        return ApiResponse.success(activityService.getActivityVideoDTO(pageWrap));
//    }
    /**
     *获取收藏的 èµ„讯/探店/活动分页列表
     * @param pageWrap
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "获取收藏的 èµ„讯/探店/活动 åˆ†é¡µåˆ—表", notes = "小程序端")
    @PostMapping("/getUserCollectActivityCard")
    public ApiResponse<PageData<ActivityCardDTO>> getUserCollectActivityCard(@RequestBody  PageWrap pageWrap){
        return ApiResponse.success(activityService.getUserCollectActivityCard(pageWrap,getMemberId()));
    }
//    @LoginRequired
//    @ApiOperation(value = "获取收藏的 èµ„讯/探店/活动 åˆ†é¡µåˆ—表", notes = "小程序端")
//    @PostMapping("/getUserCollectActivityCard")
//    public ApiResponse<PageData<ActivityCardDTO>> getUserCollectActivityCard(@RequestBody  PageWrap pageWrap){
//        return ApiResponse.success(activityService.getUserCollectActivityCard(pageWrap,getMemberId()));
//    }
    /**
@@ -121,12 +121,12 @@
     * @param pageWrap
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "获取我参与活动列表 not_start  having  over", notes = "小程序端")
    @PostMapping("/getUserActivitySignCard")
    public ApiResponse<PageData<MemberActivitySignDTO>> getUserActivitySignCard(@RequestBody PageWrap<String> pageWrap){
        return ApiResponse.success(activityService.getUserActivitySignCard(pageWrap,getMemberId()));
    }
//    @LoginRequired
//    @ApiOperation(value = "获取我参与活动列表 not_start  having  over", notes = "小程序端")
//    @PostMapping("/getUserActivitySignCard")
//    public ApiResponse<PageData<MemberActivitySignDTO>> getUserActivitySignCard(@RequestBody PageWrap<String> pageWrap){
//        return ApiResponse.success(activityService.getUserActivitySignCard(pageWrap,getMemberId()));
//    }
    /**
@@ -134,24 +134,24 @@
     * @param pageWrap
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "获取商家活动列表", notes = "小程序端")
    @PostMapping("/getShopActivitySignCard")
    public ApiResponse<PageData<ShopActivitySignDTO>> getShopActivitySignCard(@RequestBody PageWrap<ShopActivitySignDTO> pageWrap){
        return ApiResponse.success(activityService.getShopActivitySignCard(pageWrap));
    }
//    @LoginRequired
//    @ApiOperation(value = "获取商家活动列表", notes = "小程序端")
//    @PostMapping("/getShopActivitySignCard")
//    public ApiResponse<PageData<ShopActivitySignDTO>> getShopActivitySignCard(@RequestBody PageWrap<ShopActivitySignDTO> pageWrap){
//        return ApiResponse.success(activityService.getShopActivitySignCard(pageWrap));
//    }
    /**
     *获取活动参加用户
     * @param pageWrap
     * @return
     */
    @LoginRequired
    @ApiOperation(value = "获取活动参加用户", notes = "小程序端")
    @PostMapping("/getActivitySignUserDTO")
    public ApiResponse<PageData<ActivitySignUserDTO>> getActivitySignUserDTO(@RequestBody PageWrap<Integer> pageWrap){
        return ApiResponse.success(activityService.getActivitySignUserDTO(pageWrap));
    }
//    @LoginRequired
//    @ApiOperation(value = "获取活动参加用户", notes = "小程序端")
//    @PostMapping("/getActivitySignUserDTO")
//    public ApiResponse<PageData<ActivitySignUserDTO>> getActivitySignUserDTO(@RequestBody PageWrap<Integer> pageWrap){
//        return ApiResponse.success(activityService.getActivitySignUserDTO(pageWrap));
//    }
    /**
@@ -159,14 +159,14 @@
     *商家 æ–°å¢ž/编辑活动
     * @param baseActivity
     */
    @LoginRequired
    @ApiOperation(value = "获取我参与活动列表 not_start  having  over", notes = "小程序端")
    @PostMapping("/creatOrUpdateShopOrgActivity")
    public ApiResponse creatOrUpdateShopOrgActivity(@RequestBody BaseActivity baseActivity){
        activityService.creatOrUpdateShopOrgActivity(baseActivity,getMemberId());
        return ApiResponse.success(null);
    }
//    @LoginRequired
//    @ApiOperation(value = "获取我参与活动列表 not_start  having  over", notes = "小程序端")
//    @PostMapping("/creatOrUpdateShopOrgActivity")
//    public ApiResponse creatOrUpdateShopOrgActivity(@RequestBody BaseActivity baseActivity){
//
//        activityService.creatOrUpdateShopOrgActivity(baseActivity,getMemberId());
//        return ApiResponse.success(null);
//    }
server/dmmall_web/src/main/java/com/doumee/api/web/ApiController.java
@@ -57,6 +57,9 @@
    public GoodsorderService goodsorderService;
    @Autowired
    public SearchHistoryService searchHistoryService;
    @Autowired
    public ShopService shopService;
    @Autowired
@@ -158,6 +161,14 @@
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        return request;
    }
    protected String getToken() {
        Object obj = this.getRequest().getAttribute(JwtTokenUtil.HEADER_KEY);
        return obj != null ? (String) obj : null;
    }
    /**
     * èŽ·å–ç”¨æˆ·ID
     *
server/dmmall_web/src/main/java/com/doumee/api/web/CommentApi.java
@@ -1,5 +1,6 @@
package com.doumee.api.web;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
@@ -8,6 +9,7 @@
import com.doumee.dao.web.dto.CommentDTO;
import com.doumee.dao.web.dto.activity.ActivityCommentDTO;
import com.doumee.dao.web.dto.activity.ActivityReplyCommentDTO;
import com.doumee.dao.web.request.CommentApplyRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -26,12 +28,11 @@
public class CommentApi extends ApiController{
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:comment:create")
    public ApiResponse create(@RequestBody Comment comment) {
        return ApiResponse.success(commentService.create(comment,getMemberId()));
    @LoginRequired
    @ApiOperation("发布评论")
    @PostMapping("/apply")
    public ApiResponse<Comment> apply(@RequestBody CommentApplyRequest comment) {
        return ApiResponse.success(commentService.apply(comment,getMemberId()));
    }
@@ -41,7 +42,6 @@
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Comment>
     */
    @PreventRepeat
    @ApiOperation("分页活动探店评论查询")
    @PostMapping("/findActivityCommentDTOPage")
    public ApiResponse<PageData<ActivityCommentDTO>> findActivityCommentDTOPage(@RequestBody PageWrap<CommentDTO> pageWrap){
@@ -54,7 +54,7 @@
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Comment>
     */
    @PreventRepeat
    @LoginRequired
    @ApiOperation("分页活动探店评论回复查询")
    @PostMapping("/findActivityReplyCommentDTOPage")
    public ApiResponse<PageData<ActivityReplyCommentDTO>> findActivityReplyCommentDTOPage(@RequestBody PageWrap<CommentDTO> pageWrap){
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java
@@ -1,8 +1,10 @@
package com.doumee.api.web;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Shares;
import com.doumee.dao.web.request.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
@@ -49,13 +51,22 @@
    @LoginRequired
    @ApiOperation(value = "生成邀请海报", notes = "小程序端")
    @GetMapping("/getMemberShareImg")
    @ApiImplicitParams({
            @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()));
    }
    @LoginShopRequired
    @ApiOperation(value = "商户生成邀请海报", notes = "小程序端")
    @GetMapping("/getShareImg")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getShareImg()  throws Exception{
        return  ApiResponse.success(inviteRecordService.createShareImg(getMemberId()));
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ONE,getShopId()));
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
@@ -1,13 +1,18 @@
package com.doumee.api.web;
import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.annotation.trace.Trace;
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.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.business.model.WithdrawRecord;
import com.doumee.dao.web.dto.IntegralRecordDTO;
import com.doumee.dao.web.dto.ShopLoginDTO;
import com.doumee.dao.web.dto.shop.*;
import com.doumee.dao.web.request.MyCustomerRequest;
@@ -25,6 +30,7 @@
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
@@ -46,11 +52,11 @@
     * @param shopId
     * @return
     */
    @ApiOperation(value = "获取店铺门面信息", notes = "小程序端")
    @GetMapping("/shopFaceDetailDTO")
    public ApiResponse<ShopFaceDetailDTO> getShopFaceDetailDTO(@RequestParam Integer shopId){
        return ApiResponse.success(shopService.getShopFaceDetailDTO(shopId,getMemberId()));
    }
//    @ApiOperation(value = "获取店铺门面信息", notes = "小程序端")
//    @GetMapping("/shopFaceDetailDTO")
//    public ApiResponse<ShopFaceDetailDTO> getShopFaceDetailDTO(@RequestParam Integer shopId){
//        return ApiResponse.success(shopService.getShopFaceDetailDTO(shopId,getMemberId()));
//    }
    /**
     * æŽ¨èå•†é“ºåˆ—表
@@ -127,18 +133,12 @@
    @ApiOperation("经销商 - è´¦å·å¯†ç ç™»å½•")
    @PostMapping("/shopPasswordLogin")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<AccountResponse> shopPasswordLogin(@RequestBody ShopLoginDTO dto) {
        return ApiResponse.success(shopService.shopPasswordLogin(dto));
    }
    @ApiOperation("经销商 - é™é»˜ç™»å½•")
    @PostMapping("/shopOpenidLogin")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<AccountResponse> shopOpenidLogin(@RequestBody ShopLoginDTO dto) {
        return ApiResponse.success(shopService.shopOpenidLogin(dto));
    }
@@ -156,24 +156,34 @@
    @LoginShopRequired
    @ApiOperation("经销商 - æˆ‘的客户信息")
    @GetMapping("/myCustomer")
    @PostMapping("/myCustomer")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<List<MyCustomerResponse>> myCustomer(MyCustomerRequest request) {
    public ApiResponse<PageData<Member>> myCustomer(@RequestBody PageWrap<MyCustomerRequest> request) {
        return ApiResponse.success(shopService.myCustomer(request,getShopId()));
    }
    @LoginShopRequired
    @ApiOperation("经销商 - é”€å”®æ˜Žç»†")
    @GetMapping("/saleReport")
    @PostMapping("/saleReport")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<SaleReportResponse> saleReport(SaleReportRequest request) {
    public ApiResponse<SaleReportResponse> saleReport(@RequestBody SaleReportRequest request) {
        return ApiResponse.success(shopService.saleReport(request,getShopId()));
    }
    @LoginShopRequired
    @ApiOperation("经销商 - é€€å‡ºç™»å½•")
    @GetMapping("/logOut")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse logOut(HttpServletRequest request) {
        shopService.logOut(request.getHeader(JwtTokenUtil.HEADER_KEY),getShopId());
        return ApiResponse.success("操作成功");
    }
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java
@@ -56,9 +56,8 @@
        return  ApiResponse.success("查询成功",areasService.getCityList(areas));
    }
    @ApiOperation("全部树形查询")
    @ApiOperation("全部区划树形查询")
    @PostMapping("/treeList")
//    @RequiresPermissions("business:areas:query")
    public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
server/dmmall_web/src/main/java/com/doumee/api/web/ZanApi.java
@@ -1,34 +1,45 @@
package com.doumee.api.web;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.dao.business.model.Zan;
import com.doumee.service.business.ZanService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/03/21 15:48
 */
@Api(tags = "用户点赞信息表")
//@RestController
@Trace(exclude = true)
@RestController
@RequestMapping("/web/zan")
@Slf4j
public class ZanApi extends ApiController{
    @PreventRepeat
    @ApiOperation("新建")
    @LoginRequired
    @ApiOperation("点赞")
    @PostMapping("/create")
    @RequiresPermissions("business:zan:create")
    public ApiResponse create(@RequestBody Zan zan) {
        return ApiResponse.success(zanService.create(zan,getMemberId()));
    }
    @LoginRequired
    @ApiOperation("取消点赞")
    @PostMapping("/cancel")
    public ApiResponse cancel(@RequestBody Zan zan) {
        zanService.deleteById(zan,getMemberId());
        return ApiResponse.success(null);
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/mall/ArticleApi.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.doumee.api.web.mall;
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.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Activity;
import com.doumee.dao.web.dto.activity.ActivityCardDTO;
import com.doumee.dao.web.request.ActivityPageListRequest;
import com.doumee.dao.web.request.goods.ArticleRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2026/2/11 14:13
 */
@Api(tags = "社区资讯")
@Trace(exclude = true)
@RestController
@RequestMapping("/web/article")
@Slf4j
public class ArticleApi extends ApiController {
    @ApiOperation(value = "社区资讯", notes = "小程序端")
    @PostMapping("/getArticlePage")
    public ApiResponse<PageData<Activity>> getArticlePage(@RequestBody PageWrap<ArticleRequest> pageWrap){
        return  ApiResponse.success(activityService.getArticlePage(pageWrap));
    }
    @ApiOperation(value = "社区详情", notes = "小程序端")
    @GetMapping("/getArticleDetail")
    public ApiResponse<Activity> getArticleInfo(@RequestParam Integer id,Integer memberId){
        return  ApiResponse.success(activityService.getArticleInfo(id,memberId));
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/mall/GoodsApi.java
@@ -6,6 +6,8 @@
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.SearchHistory;
import com.doumee.dao.web.request.goods.GoodsRequest;
import com.doumee.dao.web.response.goods.GoodsInfoResponse;
import io.swagger.annotations.Api;
@@ -14,6 +16,8 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
@@ -42,7 +46,6 @@
    @ApiOperation("商品详情")
    @GetMapping("/goodsInfo")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "goodsId", value = "商品主键", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "memberId", value = "用户主键", required = true),
    })
@@ -63,4 +66,28 @@
        return ApiResponse.success("生成成功",path);
    }
    @LoginRequired
    @ApiOperation("商品搜索历史")
    @GetMapping("/searchHistoryList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<List<SearchHistory>> searchHistoryList(@RequestParam Integer type) {
        return ApiResponse.success(searchHistoryService.findListByType(Constants.ZERO,getMemberId()));
    }
    @LoginRequired
    @ApiOperation("清空搜索历史")
    @GetMapping("/cleanSearchHistory")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse cleanSearchHistory(@RequestParam Integer type) {
        searchHistoryService.cleanHistory(Constants.ZERO,getMemberId());
        return ApiResponse.success("操作成功");
    }
}
server/dmmall_web/src/main/java/com/doumee/api/web/mall/HomeApi.java
@@ -50,6 +50,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse verifyUserPhone(@RequestBody UpdMobileRequest request) {
        request.setMemberId(getMemberId());
        memberService.verifyUserPhone(request);
        return ApiResponse.success("操作成功");
    }
@@ -62,6 +63,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse updateUserPhone(@RequestBody UpdMobileRequest request) {
        request.setMemberId(getMemberId());
        memberService.updateUserPhone(request);
        return ApiResponse.success("操作成功");
    }
server/dmmall_web/src/main/java/com/doumee/api/web/mall/IntegralApi.java
@@ -2,10 +2,12 @@
import com.doumee.api.web.ApiController;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.annotation.trace.Trace;
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.Integral;
import com.doumee.dao.web.dto.IntegralRecordDTO;
import com.doumee.dao.web.response.IntegralDataResponse;
@@ -15,10 +17,7 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
 * Created by IntelliJ IDEA.
@@ -35,27 +34,63 @@
    @LoginRequired
    @ApiOperation("获取用户的积分记录")
    @PostMapping("/findUserIntegralRecordPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<PageData<Integral>> findUserIntegralRecordPage (@RequestBody PageWrap<IntegralRecordDTO> pageWrap) {
        pageWrap.getModel().setMemberId(getMemberId());
        pageWrap.getModel().setUserType(Constants.ZERO);
        return ApiResponse.success(integralService.findIntegralRecordPage(pageWrap));
    }
    @LoginShopRequired
    @ApiOperation("获取经销商的积分记录")
    @PostMapping("/findIntegralRecordPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<PageData<Integral>> findIntegralRecordPage (@RequestBody PageWrap<IntegralRecordDTO> pageWrap) {
        pageWrap.getModel().setMemberId(getShopId());
        return ApiResponse.success(integralService.findIntegralRecordPage(pageWrap));
    }
    @LoginRequired
    @ApiOperation("获取用户剩余积分与待清空积分信息")
    @PostMapping("/getIntegralData")
    @ApiOperation("用户积分情况")
    @GetMapping("/getUserIntegralData")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<IntegralDataResponse> getIntegralData (@RequestBody IntegralRecordDTO dto) {
    public ApiResponse<IntegralDataResponse> getUserIntegralData () {
        IntegralRecordDTO dto = new IntegralRecordDTO();
        dto.setMemberId(getMemberId());
        dto.setUserType(Constants.ZERO);
        return ApiResponse.success(integralService.getIntegralData(dto));
    }
    @LoginShopRequired
    @ApiOperation("经销商积分与结算金额情况")
    @GetMapping("/getIntegralData")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "integer", name = "userType", value = "查询类型:1=经销商积分;2=经销商结算金额;", required = true),
    })
    public ApiResponse<IntegralDataResponse> getIntegralData (@RequestParam Integer userType) {
        IntegralRecordDTO dto = new IntegralRecordDTO();
        dto.setMemberId(getShopId());
        dto.setUserType(userType);
//        try {
//            System.out.println(inviteRecordService.createShopMiniProgramCode(getShopId()));
//        }catch (Exception e){
//            e.printStackTrace();
//        }
        return ApiResponse.success(integralService.getIntegralData(dto));
    }
server/dmmall_web/src/main/java/com/doumee/api/web/mall/OrderApi.java
@@ -8,6 +8,7 @@
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.core.utils.kuaidi100.DeliveryDTO;
import com.doumee.core.utils.kuaidi100.ExpressUtils;
import com.doumee.core.wx.SendWxMessage;
@@ -177,17 +178,19 @@
        return ApiResponse.success("查询成功", goodsorderService.getGoodsOrderDetail(orderId));
    }
    @LoginRequired
    @ApiOperation("订单列表")
    @PostMapping("/orderPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<IPage<MemberOrderResponse>> orderPage(@RequestBody PageWrap<MemberOrderRequest> pageWrap) {
        pageWrap.getModel().setMemberId(getMemberId());
        IPage<MemberOrderResponse> page = goodsorderService.getGoodsOrderPage(pageWrap);
        return ApiResponse.success("查询成功",page);
    }
//    @LoginRequired
//    @ApiOperation("订单列表")
//    @PostMapping("/orderPage")
//    @ApiImplicitParams({
//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
//    })
//    public ApiResponse<IPage<MemberOrderResponse>> orderPage(@RequestBody PageWrap<MemberOrderRequest> pageWrap) {
//        pageWrap.getModel().setMemberId(getMemberId());
//        IPage<MemberOrderResponse> page = goodsorderService.getGoodsOrderPage(pageWrap);
//        return ApiResponse.success("查询成功",page);
//    }
    @LoginRequired
    @ApiOperation("修改订单收货地址")
@@ -235,16 +238,29 @@
    }
    @LoginRequired
    @LoginShopRequired
    @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());
        goodsorderService.orderWriteOff(dealOrderRequest.getOrderId(),getShopId());
        return ApiResponse.success("操作成功");
    }
    @LoginShopRequired
    @ApiOperation("根据核销码获取订单详情")
    @PostMapping("/getOrderDetailByCode")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<MemberOrderResponse> getOrderDetailByCode(@RequestBody DealOrderRequest dealOrderRequest) {
        return ApiResponse.success("操作成功",goodsorderService.getGoodsOrderDetailByCode(dealOrderRequest.getExchangeCode()));
    }
    @LoginRequired
    @ApiOperation("订单删除")
@@ -305,11 +321,25 @@
    })
    public ApiResponse<PageData<Goodsorder>> shopOrderPage(@RequestBody PageWrap<ShopOrderRequest> pageWrap) {
        pageWrap.getModel().setShopId(getShopId());
        pageWrap.getModel().setUserType(Constants.ONE);
        PageData<Goodsorder> page = goodsorderService.shopOrderPage(pageWrap);
        return ApiResponse.success("查询成功",page);
    }
    @LoginRequired
    @ApiOperation("订单列表")
    @PostMapping("/orderPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<PageData<Goodsorder>> orderPage(@RequestBody PageWrap<ShopOrderRequest> pageWrap) {
        pageWrap.getModel().setShopId(getMemberId());
        pageWrap.getModel().setUserType(Constants.ZERO);
        PageData<Goodsorder> page = goodsorderService.shopOrderPage(pageWrap);
        return ApiResponse.success("查询成功",page);
    }
    @LoginShopRequired
    @ApiOperation("订单详情 - ç»é”€å•†")
    @GetMapping("/shopOrderDetail")
server/dmmall_web/src/main/java/com/doumee/api/web/mall/ShopCartApi.java
@@ -48,7 +48,7 @@
    }
    @LoginRequired
    @ApiOperation("购物车列表")
    @ApiOperation("购物车数量")
    @GetMapping("/cartGoodsTypeNum")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
server/pom.xml
@@ -284,6 +284,7 @@
      <version>1.15.3</version>
    </dependency>
    <!--<dependency>
      <groupId>com.aliyun.openservices</groupId>
      <artifactId>ons-client</artifactId>