MrShi
3 天以前 d295f1f7706e51b158cb7252b6ac633b1f9a1982
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dingyuannongji
已添加4个文件
已修改79个文件
1212 ■■■■ 文件已修改
.vscode/launch.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/settings.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/.vscode/settings.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ActivityController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/AftersaleController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/CommentController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/task/ScheduleTool.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsSkuMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/IntegralMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Areas.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Collect.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDepartment.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDepartmentUser.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDict.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDictData.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemMenu.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPermission.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPosition.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPositionUser.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRole.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRoleMenu.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRolePermission.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemUser.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemUserRole.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/NoticeCardDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/UserCenterVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityCommentDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopUpdatePwdDTO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/request/AfterSaleApplyRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsSkuResponse.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/CommentService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java 3 ●●●● 补丁 | 查看 | 原始文档 | 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/impl/AftersaleServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderDetailServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/application-dev.yml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/application-pro.yml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/application-test.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemDataPermissionMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemDepartmentMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemDictDataMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemDictMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemMenuMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemPermissionMapper.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemPositionMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemRoleMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/mappers/SystemUserMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/common/PublicController.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/CommentApi.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/launch.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
{
    // ä½¿ç”¨ IntelliSense äº†è§£ç›¸å…³å±žæ€§ã€‚
    // æ‚¬åœä»¥æŸ¥çœ‹çŽ°æœ‰å±žæ€§çš„æè¿°ã€‚
    // æ¬²äº†è§£æ›´å¤šä¿¡æ¯ï¼Œè¯·è®¿é—®: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "AdminApplication",
            "request": "launch",
            "mainClass": "com.doumee.AdminApplication",
            "projectName": "dmmall_admin"
        },
        {
            "type": "java",
            "name": "CodeGenerator",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.CodeGenerator",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "CodeVerifyUtils",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.CodeVerifyUtils",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "Constants",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.Constants",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "DateUtil",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.DateUtil",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "GeneratePicUtil",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.GeneratePicUtil",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "HttpsUtil",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.HttpsUtil",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "PinYinUtil",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.PinYinUtil",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "ALiYunUtil",
            "request": "launch",
            "mainClass": "com.doumee.core.utils.aliyun.ALiYunUtil",
            "projectName": "dmmall_service"
        },
        {
            "type": "java",
            "name": "InterfaceApplication",
            "request": "launch",
            "mainClass": "com.doumee.InterfaceApplication",
            "projectName": "dmmall_web"
        }
    ]
}
.vscode/settings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
    "java.compile.nullAnalysis.mode": "disabled"
}
server/.gitignore
@@ -27,3 +27,4 @@
mini-program/unpackage/
mini-program/node_modules/
mini-program/mp-weixin/
/CLAUDE.md
server/.vscode/settings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
    "java.compile.nullAnalysis.mode": "automatic"
}
server/dmmall_admin/src/main/java/com/doumee/api/business/ActivityController.java
@@ -50,6 +50,7 @@
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:activity:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
server/dmmall_admin/src/main/java/com/doumee/api/business/AftersaleController.java
@@ -2,7 +2,6 @@
import com.doumee.api.BaseController;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
@@ -16,8 +15,6 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
server/dmmall_admin/src/main/java/com/doumee/api/business/CommentController.java
@@ -30,13 +30,13 @@
    @Autowired
    private CommentService commentService;
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:comment:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        commentService.deleteById(id);
        return ApiResponse.success(null);
    }
//    @ApiOperation("根据ID删除")
//    @GetMapping("/delete/{id}")
//    @RequiresPermissions("business:comment:delete")
//    public ApiResponse deleteById(@PathVariable Integer id) {
//        commentService.deleteById(id);
//        return ApiResponse.success(null);
//    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
server/dmmall_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -131,6 +131,24 @@
    }
    /**
     * å®šæ—¶è‡ªåŠ¨å®Œæˆ 7 å¤©æœªç¡®è®¤æ”¶è´§çš„物流发货订单
     * æ¯ 10 åˆ†é’Ÿæ‰§è¡Œä¸€æ¬¡
     */
    @Scheduled(fixedDelay = 1000L * 60 * 10L )
    public void autoCompleteOrder(){
        if (timing) {
            System.out.println("开始执行订单自动完成任务--------Begin------");
            try {
                goodsorderService.autoCompleteOrder();
                System.out.println("订单自动完成任务执行成功--------End------");
            } catch (Exception e) {
                System.out.println("订单自动完成任务执行失败:" + e.getMessage());
            }
        }
    }
    /**
     * å®šæ—¶å®Œæˆå”®åŽå•状态
     */
//    @Scheduled(fixedDelay = 1000L * 10L )
server/dmmall_admin/src/main/resources/application.yml
@@ -8,7 +8,7 @@
  #  application:
  #    name: doumeemes
  profiles:
    active: dev
    active: pro
  # JSON返回配置
  jackson:
server/dmmall_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -1,10 +1,13 @@
package com.doumee.config.Jwt;
import com.alibaba.fastjson.JSONObject;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.LoginShopRequired;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Shop;
import io.jsonwebtoken.JwtException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,7 +23,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Objects;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@@ -103,19 +106,28 @@
            if(StringUtils.isBlank(tokenRedis)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            Member member = JSONObject.parseObject(tokenRedis, Member.class);
            if(Objects.isNull(member)||StringUtils.isBlank(member.getOpenId())){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            String openid = member.getOpenId();
            Integer memberId = getTokenId(token);
            Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from Member where id  = ?", Integer.class, memberId);
            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(),"用户已删除,请联系管理员");
            }
            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0)  from Member where id  = ?", Integer.class, memberId);
            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0)  from member where id  = ?", Integer.class, memberId);
            if(isForbidden == Constants.ONE){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
            }
            if(isForbidden == Constants.TWO){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已注销,请联系管理员");
            }
            Integer count = dao.queryForObject("select count(1) from Member where id  = ?", Integer.class, memberId);
            String dbOpenid = dao.queryForObject(" select ifnull(open_id,'')  from member where id  = ?", String.class, memberId);
            if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"已过期,请重新登录");
            }
            Integer count = dao.queryForObject("select count(1) from member where id  = ?", Integer.class, memberId);
            if (count != null && count > 0) {
                request.setAttribute(JwtTokenUtil.UserId_Name, memberId);
                return true;
@@ -138,6 +150,11 @@
            if(StringUtils.isBlank(tokenRedis)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            Shop shop = JSONObject.parseObject(tokenRedis, Shop.class);
            if(Objects.isNull(shop)||StringUtils.isBlank(shop.getOpenId())){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录");
            }
            String openid = shop.getOpenId();
            Integer shopId = getTokenId(token);
            Integer isDeleted = dao.queryForObject(" select COALESCE(ISDELETED,0)  from shop where id  = ?", Integer.class, shopId);
            if(isDeleted== Constants.ONE){
@@ -147,6 +164,10 @@
            if(isForbidden== Constants.ONE){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员");
            }
            String dbOpenid = dao.queryForObject(" select ifnull(open_id,'')  from shop where id  = ?", String.class, shopId);
            if(StringUtils.isBlank(dbOpenid)||!openid.equals(dbOpenid)){
                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"已过期,请重新登录");
            }
            Integer count = dao.queryForObject("select count(1) from shop where id  = ?", Integer.class, shopId);
            if (count != null && count > 0) {
                request.setAttribute(JwtTokenUtil.ShopId_Name, shopId);
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1385,7 +1385,7 @@
        // åœºæ™¯ç ï¼Œä¸Žå‰ç«¯çº¦å®šï¼Œæœ€ç»ˆæ˜¯éœ€è¦å‰ç«¯è§£æž
        body.put("scene", scene);
        // æ­£å¼ç‰ˆä¸º "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
        String env_version = "develop";
        String env_version = "trial";
        body.put("env_version", env_version);
        if(isUsePage){
            body.put("page", page);
server/dmmall_service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java
@@ -24,7 +24,7 @@
@Slf4j
public class GeneratePicUtil {
    static String bg="https://shoeslxkj.oss-cn-beijing.aliyuncs.com/file/20230404/SysBaseBackGround/D56231512C0B4A4C9D06B02F9566B0B0.png";
    static String bg="https://dynometacn.oss-cn-shanghai.aliyuncs.com/goods/20260319/feccd954-32f7-47e2-96fb-be102b643f1f.png";
    static String headUrl = "https://shoeslxkj.oss-cn-beijing.aliyuncs.com/file/20230404/SysBaseBackGround/B802B64FE31447DCB030F13ECC7CA9F9.png";
@@ -339,22 +339,22 @@
        g2.fillRect(0, 0, width, height);
        //背景图片
//        BufferedImage titles = ImageIO.read(new URL(bg));
//        g2.drawImage(titles, 1, 1, 894, 1305, null);
//        g2.drawRect(0, 0, width - 1, height - 1);
        BufferedImage titles = ImageIO.read(new URL(bg));
        g2.drawImage(titles, 1, 1, 894, 1305, null);
        g2.drawRect(0, 0, width - 1, height - 1);
        //头部图片
        BufferedImage headBg = ImageIO.read(new URL(headImg));
//        BufferedImage headBg = getImgIO(imgurl);
        g2.drawImage(headBg, 1, 1, 894, 1080, null);
        g2.drawRect(0, 0, width - 1, height - 1);
        g2.setColor(Color.black);
        g2.setFont(new Font("黑体", Font.PLAIN, 40));
        g2.drawString("长按识别小程序", 46, 1180);
        g2.setColor(Color.gray);
        g2.setFont(new Font("黑体", Font.PLAIN, 32));
        g2.drawString("查看更多精彩内容", 48, 1230);
//        g2.setColor(Color.black);
//        g2.setFont(new Font("黑体", Font.PLAIN, 40));
//        g2.drawString("长按识别小程序", 46, 1180);
//
//        g2.setColor(Color.gray);
//        g2.setFont(new Font("黑体", Font.PLAIN, 32));
//        g2.drawString("查看更多精彩内容", 48, 1230);
        //设置二维码图片
//        BufferedImage barcodeCode = ImageIO.read(new URL(wxQrCodeImg));
server/dmmall_service/src/main/java/com/doumee/core/utils/aliyun/ALiYunSmSUtil.java
@@ -30,7 +30,7 @@
         * accessSecret è‡ªå·±çš„用户accessSecret
         */
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-hangzhou", "LTAI5tP56bE38bWvqqfSRkCQ", "lXcIyDrc9K01x3FjSgZqcKlrHwsE8b");
                "cn-hangzhou", "LTAI5tDuA9DXBJvVfJfMb19L", "IUsWIhUXd9pEgTNEkz1b3POI3javKN");
        IAcsClient client = new DefaultAcsClient(profile);
        // æž„建请求:
        CommonRequest request = new CommonRequest();
@@ -42,9 +42,9 @@
        // æ‰‹æœºå·
        request.putQueryParameter("PhoneNumbers", phone);
        // çŸ­ä¿¡ç­¾å
        request.putQueryParameter("SignName", "豆米科技");
        request.putQueryParameter("SignName", "合肥鼎元旋压科技");
        // çŸ­ä¿¡æ¨¡ç‰ˆCODE
        request.putQueryParameter("TemplateCode", "SMS_243960729");
        request.putQueryParameter("TemplateCode", "SMS_332555204");
        // æž„建短信验证码
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(codeMap));
        try {
server/dmmall_service/src/main/java/com/doumee/dao/business/GoodsSkuMapper.java
@@ -20,7 +20,7 @@
     * @param goodsId
     * @return
     */
    @Select(" select s.* , g.IMGURL as goodsImgUrl from goods_sku s  left join goods g on s.GOODS_ID = g.id  where   s.isdeleted = 0 and  s.goods_Id = #{goodsId} ")
    @Select(" select s.* , s.stock as stockStr , g.IMGURL as goodsImgUrl from goods_sku s  left join goods g on s.GOODS_ID = g.id  where   s.isdeleted = 0 and  s.goods_Id = #{goodsId} ")
    List<GoodsSkuResponse> getSkuResponseList(@Param("goodsId") Integer goodsId);
}
server/dmmall_service/src/main/java/com/doumee/dao/business/IntegralMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Integral;
import com.github.yulichang.base.mapper.MPJJoinMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/03/21 15:48
 */
public interface IntegralMapper extends BaseMapper<Integral> {
public interface IntegralMapper extends MPJJoinMapper<Integral> {
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Areas.java
@@ -136,58 +136,4 @@
        }
    }
    /**
     * ç”¨æˆ·ä¿¡æ¯æ“ä½œè®°å½•表
     * @author æ±Ÿè¹„蹄
     * @date 2023/03/21 15:17
     */
    @Data
    @ApiModel("用户信息操作记录表")
    @TableName("`member_history`")
    public static class MemberHistory {
        @ApiModelProperty(value = "主键", example = "1")
        @ExcelColumn(name="主键")
        private Integer id;
        @ApiModelProperty(value = "创建人编码", example = "1")
        @ExcelColumn(name="创建人编码")
        private Integer creator;
        @ApiModelProperty(value = "创建时间")
        @ExcelColumn(name="创建时间")
        private Date createDate;
        @ApiModelProperty(value = "更新人编码", example = "1")
        @ExcelColumn(name="更新人编码")
        private Integer editor;
        @ApiModelProperty(value = "更新时间")
        @ExcelColumn(name="更新时间")
        private Date editDate;
        @ApiModelProperty(value = "是否删除0否 1是", example = "1")
        @ExcelColumn(name="是否删除0否 1是")
        private Integer isdeleted;
        @ApiModelProperty(value = "备注")
        @ExcelColumn(name="备注")
        private String remark;
        @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
        @ExcelColumn(name="用户编码(关联member表)")
        private Integer memberId;
        @ApiModelProperty(value = "类型 0禁用 1启用", example = "1")
        @ExcelColumn(name="类型 0禁用 1启用")
        private Integer type;
        @ApiModelProperty(value = "操作备注")
        @ExcelColumn(name="操作备注")
        private String info;
    }
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Collect.java
@@ -110,11 +110,19 @@
    @TableField(exist = false)
    private String content;
    @ApiModelProperty(value = "最低价" )
    @TableField(exist = false)
    private BigDecimal minPrice;
    @ApiModelProperty(value = "社区封面图")
    @TableField(exist = false)
    private String activityImgurl;
    @ApiModelProperty(value = "分类颜色")
    @TableField(exist = false)
    private String param;
}
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -221,6 +221,9 @@
    @ApiModelProperty(value = "退款备注", example = "1")
    private Integer refundInfo;
    @ApiModelProperty(value = "退款配置信息", example = "1")
    private String refundConfigInfo;
    @ApiModelProperty(value = "文件地址")
    @TableField(exist = false)
    private String resourcePath;
server/dmmall_service/src/main/java/com/doumee/dao/business/model/InviteRecord.java
@@ -55,7 +55,7 @@
    private String phone;
    @ApiModelProperty(value = "是否完成首单:0否 1是", example = "1")
    @ExcelColumn(name="完成极端" ,index =4,width = 10,valueMapping = "0=已注册;1=完成首单;")
    @ExcelColumn(name="完成阶段" ,index =4,width = 10,valueMapping = "0=已注册;1=完成首单;")
    private Integer firstOrderStatus;
    @ApiModelProperty(value = "完成首单时间")
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -20,7 +20,7 @@
 */
@Data
@ApiModel("数据权限配置")
@TableName("SYSTEM_DATA_PERMISSION")
@TableName("system_data_permission")
public class SystemDataPermission implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDepartment.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -21,6 +22,7 @@
 */
@Data
@ApiModel("部门")
@TableName("system_department")
public class SystemDepartment implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDepartmentUser.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,6 +17,7 @@
 */
@Data
@ApiModel("部门用户")
@TableName("system_department_user")
public class SystemDepartmentUser implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDict.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -19,6 +20,7 @@
 */
@Data
@ApiModel("字典")
@TableName("system_dict")
public class SystemDict implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemDictData.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -19,6 +20,7 @@
 */
@Data
@ApiModel("字典数据")
@TableName("system_dict_data")
public class SystemDictData implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -18,6 +19,7 @@
 */
@Data
@ApiModel("登录日志")
@TableName("system_login_log")
public class SystemLoginLog {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemMenu.java
@@ -1,12 +1,9 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.*;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@@ -21,6 +18,7 @@
 */
@Data
@ApiModel("系统菜单")
@TableName("system_menu")
public class SystemMenu implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPermission.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -19,6 +20,7 @@
 */
@Data
@ApiModel("系统权限")
@TableName("system_permission")
public class SystemPermission implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPosition.java
@@ -1,12 +1,9 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.*;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@@ -21,6 +18,7 @@
 */
@Data
@ApiModel("岗位")
@TableName("system_position")
public class SystemPosition implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemPositionUser.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -16,6 +17,7 @@
 */
@Data
@ApiModel("岗位用户")
@TableName("system_position_user")
public class SystemPositionUser implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRole.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.constants.OperaType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -19,6 +20,7 @@
 */
@Data
@ApiModel("系统角色")
@TableName("`system_role`")
public class SystemRole implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRoleMenu.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -16,6 +17,7 @@
 */
@Data
@ApiModel("角色菜单关联")
@TableName("system_role_menu")
public class SystemRoleMenu implements Serializable {
    @ApiModelProperty(value = "主键", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemRolePermission.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -16,6 +17,7 @@
 */
@Data
@ApiModel("角色权限关联")
@TableName("system_role_permission")
public class SystemRolePermission implements Serializable {
    @ApiModelProperty(value = "主键", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -17,6 +18,7 @@
 */
@Data
@ApiModel("跟踪日志")
@TableName("system_trace_log")
public class SystemTraceLog implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -24,7 +24,7 @@
 */
@Data
@ApiModel("系统用户")
@TableName("`SYSTEM_USER`")
@TableName("`system_user`")
public class SystemUser implements Serializable {
    @TableId(type = IdType.AUTO)
server/dmmall_service/src/main/java/com/doumee/dao/system/model/SystemUserRole.java
@@ -1,5 +1,6 @@
package com.doumee.dao.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -16,6 +17,7 @@
 */
@Data
@ApiModel("用户角色关联")
@TableName("`system_user_role`")
public class SystemUserRole implements Serializable {
    @ApiModelProperty(value = "主键", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/NoticeCardDTO.java
@@ -31,7 +31,7 @@
    @ApiModelProperty(value = "对象编码", example = "1")
    private Integer objId;
    @ApiModelProperty(value = "对象类型 0商城订单 1积分流水 2互动评价 3优惠券 4现金流水", example = "1")
    @ApiModelProperty(value = "对象类型 0商城订单 1积分流水 2优惠券发放 3过期提醒 4社区消息", example = "1")
    private Integer objType;
    @ApiModelProperty(value = "消息类型 0订单通知 1系统消息 2互动消息 3优惠券提醒 4官方客服  5活动推荐 6我的关注", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/UserCenterVO.java
@@ -17,6 +17,7 @@
    @ApiModelProperty(value = "积分规则")
    private String integralRule;
    @ApiModelProperty(value = "邀请规则说明")
    private String invitelRule;
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityCommentDTO.java
@@ -1,5 +1,6 @@
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;
@@ -20,6 +21,9 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    private Integer isdeleted;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    private Integer memberId;
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/activity/ActivityReplyCommentDTO.java
@@ -17,14 +17,16 @@
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    private Integer isdeleted;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    private Integer memberId;
    @ApiModelProperty(value = "用户昵称" )
    @ApiModelProperty(value = "发布用户昵称" )
    private String nikeName;
    @ApiModelProperty(value = "用户昵称" )
    @ApiModelProperty(value = "用户头像" )
    private String memberImgUrl;
    @ApiModelProperty(value = "对象编码(关联activity表)", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/shop/ShopUpdatePwdDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.doumee.dao.web.dto.shop;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("经销商修改密码请求")
public class ShopUpdatePwdDTO {
    @ApiModelProperty("旧密码")
    private String oldPassword;
    @ApiModelProperty("新密码")
    private String newPassword;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/request/AfterSaleApplyRequest.java
@@ -24,7 +24,7 @@
    @ApiModelProperty(value = "是否扣除返还经销商积分:0=否;1=是")
    private Integer returnShopIntegralStatus;
    @ApiModelProperty(value = "是否扣除返还用户积分:0=否;1=是")
    @ApiModelProperty(value = "是否扣除已返还用户积分:0=否;1=是")
    private Integer returnIntegralStatus;
    @ApiModelProperty(value = "是否扣除返还经销商结算金额:0=否;1=是")
server/dmmall_service/src/main/java/com/doumee/dao/web/response/goods/GoodsSkuResponse.java
@@ -57,4 +57,6 @@
    @ApiModelProperty(value = "下标数据", example = "1")
    private String indexData;
    @ApiModelProperty(value = "库存量Str", example = "1")
    private String stockStr;
}
server/dmmall_service/src/main/java/com/doumee/service/business/ActivityService.java
@@ -23,7 +23,6 @@
     * @return Integer
     */
    Integer create(Activity activity);
    /**
     * ä¸»é”®åˆ é™¤
     *
server/dmmall_service/src/main/java/com/doumee/service/business/CommentService.java
@@ -31,7 +31,7 @@
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    void deleteById(Integer id,Integer memberId);
    /**
     * åˆ é™¤
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -245,4 +245,6 @@
    void autoCancelOrder();
    void autoCompleteOrder();
}
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
@@ -19,6 +19,14 @@
    String createShareImg(Integer userType,Integer memberId,String posterImg) throws Exception;
    String createShopMiniProgramCode(Integer shopId) throws Exception;
    /**
     * ç”Ÿæˆä¼šå‘˜ç«¯å°ç¨‹åºåˆ†äº«ç ï¼ˆçº¯å°ç¨‹åºç ï¼Œæ— æµ·æŠ¥åˆæˆï¼‰
     * @param memberId ä¼šå‘˜ID
     * @return OSS文件路径
     * @throws Exception
     */
    String createMemberMiniProgramCode(Integer memberId) throws Exception;
    /**
     * åˆ›å»º
     *
server/dmmall_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -12,6 +12,7 @@
import com.doumee.dao.web.request.UpdateMemberRequest;
import com.doumee.dao.web.request.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
@@ -127,7 +128,7 @@
     * @param code
     * @return
     */
    AccountResponse wxLogin(String code);
    AccountResponse wxLogin(String code) throws WxErrorException;
    AccountResponse wxLoginTest( Integer memberId);
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -218,4 +218,12 @@
    void logOut(String token,Integer shopId);
    /**
     * ç»é”€å•†ä¿®æ”¹å¯†ç 
     * @param shopId å•†æˆ·ID
     * @param oldPassword æ—§å¯†ç 
     * @param newPassword æ–°å¯†ç 
     */
    void updatePwd(Integer shopId, String oldPassword, String newPassword);
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -1049,13 +1050,13 @@
        aftersale.setReturnShopSettlement(BigDecimal.ZERO);
        aftersale.setCode(getNextInCode());
        //订单退回 æ‰£é™¤å·²ç»“ç®— è®¢å•赠送积分 - ç»é”€å•†
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopIntegralStatus(),Constants.ONE)){
        //订单退回返回给经销商的积分
        if(Objects.nonNull(goodsorder.getDistributionShopId())){
            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
            //经销商存在剩余积分
            if(Objects.nonNull(shop)&&shop.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还经销商积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopIntegralStatus(),Constants.ONE)){
                    //记录扣除经销商积分值
                    aftersale.setReturnShopIntegral(shop.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
                            ?goodsorder.getReturnCustomerIntegral():shop.getIntegral());
@@ -1071,41 +1072,45 @@
            }
        }
        //订单退回 ç»é”€å•†ç»“算余额
        //订单退回 æ‰£é™¤å·²ç»“ç®— ç»“算余额 - ç»é”€å•†
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopSettlementStatus(),Constants.ONE)){
        if(Objects.nonNull(goodsorder.getDistributionShopId())){
            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
            //经销商存在剩余积分
            if(Objects.nonNull(shop)&&shop.getAmount().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还经销商积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopSettlementStatus(),Constants.ONE)){
                //查询订单明细经销商结算金额
                List<GoodsorderDetail> list = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
                        .eq(GoodsorderDetail::getIsdeleted,Constants.ZERO)
                        .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
                        .isNotNull(GoodsorderDetail::getShopSettlement)
                );
                //经销商存在剩余余额
                if(Objects.nonNull(shop)&&shop.getAmount().compareTo(BigDecimal.ZERO)>Constants.ZERO&&list.size()>Constants.ZERO){
                        BigDecimal total = list.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO, BigDecimal::add);
                    //记录扣除经销商积分值
                    aftersale.setReturnShopSettlement(shop.getAmount().compareTo(goodsorder.getShopSettlement())>Constants.ZERO
                            ?goodsorder.getShopSettlement():shop.getAmount());
                        aftersale.setReturnShopSettlement(shop.getAmount().compareTo(total)>Constants.ZERO
                                ?total:shop.getAmount());
                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
                        dealIntegralRequest.setIntegralNum(aftersale.getReturnShopSettlement());
                    dealIntegralRequest.setDealType(Constants.ONE);
                    dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
                    dealIntegralRequest.setObjId(goodsorder.getId());
                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_REFUND_CASH);
                        dealIntegralRequest.setParam1(goodsorder.getCode().toString());
                    integralService.dealShopAmount(dealIntegralRequest);
                }
            }
        }
        //订单退回 è¿”还给客户的积分
        if(Objects.nonNull(goodsorder.getDistributionShopId())){
        //扣除已返还用户积分 - ç”¨æˆ·
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)){
            Member member = memberMapper.selectById(goodsorder.getMemberId());
            //客户存在剩余积分
            if(Objects.nonNull(member)&&member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                //开启了扣除返还客户积分
                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)){
                    //记录扣除经销商积分值
                    aftersale.setReturnIntegral(member.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
                            ?goodsorder.getReturnCustomerIntegral():member.getIntegral());
                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
                    dealIntegralRequest.setIntegralNum(aftersale.getReturnIntegral());
                    dealIntegralRequest.setDealType(Constants.ONE);
                    dealIntegralRequest.setMemberId(member.getId());
                    dealIntegralRequest.setObjId(goodsorder.getId());
@@ -1114,13 +1119,12 @@
                    integralService.dealIntegral(dealIntegralRequest,null);
                }
            }
        }
        //订单退款 è¿”还客户使用的积分
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)
        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnUseIntegralStatus(),Constants.ONE)
            && goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
            dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
@@ -1172,6 +1176,7 @@
                .set(Goodsorder::getRefundMoney, afterSaleApplyRequest.getMoney())
                .set(Goodsorder::getRefundUserId, loginUserInfo.getId())
                .set(Goodsorder::getRefundInfo, afterSaleApplyRequest.getRemark())
                .set(Goodsorder::getRefundConfigInfo, JSONObject.toJSONString(afterSaleApplyRequest))
                .eq(Goodsorder::getId, goodsorder.getId())
        );
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CollectServiceImpl.java
@@ -234,7 +234,8 @@
                    .selectAs(Goods::getName,Collect::getName)
                    .selectAs(Goods::getPrice,Collect::getPrice)
                    .selectAs(Goods::getImgurl,Collect::getActivityImgurl)
                    .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t1.id ),0) ", Collect::getLinePrice)
                    .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t1.id and gs.ISDELETED = 0  ),0)   ",Collect::getMinPrice)
                    .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t1.id and gs.ISDELETED = 0 ),0)   ",Collect::getLinePrice)
                    .leftJoin(Goods.class,Goods::getId,Collect::getObjId)
                    .eq(Collect::getIsdeleted,Constants.ZERO)
                    .eq(Collect::getMemberId,memberId)
@@ -252,6 +253,7 @@
                    .selectAs(Activity::getCreateDate,Collect::getReleaseDate)
                    .selectAs(Activity::getLooknum,Collect::getReadNum)
                    .selectAs(Activity::getImgurl,Collect::getActivityImgurl)
                    .selectAs(Labels::getParam,Collect::getParam)
                    .selectAs(Labels::getName,Collect::getLabelName)
                    .selectAs(Activity::getContent,Collect::getContent)
                    .leftJoin(Activity.class,Activity::getId,Collect::getObjId)
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CommentServiceImpl.java
@@ -1,5 +1,7 @@
package com.doumee.service.business.impl;
import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest;
import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -12,14 +14,9 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
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.core.wx.WxMiniConfig;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.dto.CommentDTO;
import com.doumee.dao.web.dto.ZanDTO;
import com.doumee.dao.web.dto.activity.ActivityCommentDTO;
@@ -28,6 +25,7 @@
import com.doumee.service.business.CommentService;
import com.doumee.service.business.ZanService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
@@ -57,6 +55,9 @@
    private MemberMapper memberMapper;
    @Autowired
    private NoticeMapper noticeMapper;
    @Autowired
    private ZanService zanService;
    @Autowired
@@ -70,6 +71,26 @@
    @Override
    public Comment apply(CommentApplyRequest comment, Integer memberId) {
        if (StringUtils.isNotBlank(comment.getContent())) {
            try {
                WxMaMsgSecCheckCheckRequest checkRequest = WxMaMsgSecCheckCheckRequest.builder()
                        .version("2")
                        .scene(3)
                        .openid(getMemberOpenId(memberId))
                        .content(comment.getContent())
                        .build();
                WxMaMsgSecCheckCheckResponse checkResponse = WxMiniConfig.wxMaService.getSecurityService().checkMessage(checkRequest);
                if (checkResponse.getResult() != null && checkResponse.getResult().getSuggest() != null) {
                    String suggest = checkResponse.getResult().getSuggest();
                    if ("risky".equalsIgnoreCase(suggest)) {
                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "评论内容包含违规信息,请修改后重新发布");
                    }
                }
            } catch (WxErrorException e) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "内容安全检测失败,请稍后重试");
            }
        }
        Comment target = new Comment();
        target.setCreateDate(new Date());
        target.setEditDate(new Date());
@@ -90,13 +111,22 @@
            );
            reply = Optional.ofNullable(reply).orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "回复目标不存在"));
            target.setReplyId(reply.getId());
            target.setReplyMemberId(reply.getMemberId());
            target.setReplyMemberNikeName(reply.getReplyMemberNikeName());
            target.setCommentId(reply.getId());
            target.setCommentMemberId(reply.getMemberId());
            target.setCommentId(Objects.isNull(reply.getCommentId())?reply.getId():reply.getCommentId());
            target.setType(Constants.ONE);
            target.setCommentId(reply.getCommentId());
            target.setCommentMemberId(reply.getCommentMemberId());
            target.setCommentMemberId(reply.getMemberId());
            if(!Constants.equalsInteger(memberId,reply.getMemberId())){
                Member member = memberMapper.selectById(memberId);
                //评论发送用户消息
                //发送核销通知
                Notice notice = Notice.getNotice(
                        Constants.NoticeType.COMMENT,
                        reply.getMemberId(),
                        reply.getActivityId()
                );
                notice.setContent(notice.getContent().replace("{param}",member.getNickname()));
                noticeMapper.insert(notice);
            }
        }else if (comment.getCommentId() != null ){
            Comment reply = commentMapper.selectById(comment.getCommentId());
            reply = Optional.ofNullable(reply).orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "一级评论目标不存在"));
@@ -138,8 +168,18 @@
    @Override
    public void deleteById(Integer id) {
        commentMapper.deleteById(id);
    public void deleteById(Integer id,Integer memberId) {
        Comment comment = commentMapper.selectById(id);
        if(Objects.isNull(comment)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "评论不存在");
        }
        if(!Constants.equalsInteger(memberId,comment.getMemberId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "非您的评论无权限删除");
        }
        commentMapper.update(new UpdateWrapper<Comment>().lambda()
                .set(Comment::getIsdeleted,Constants.ONE)
                .eq(Comment::getId,id)
        );
    }
    @Override
@@ -247,7 +287,7 @@
        queryWrapper.eq(Comment::getType, Constants.ZERO);
        queryWrapper.eq(Comment::getStatus, Constants.ZERO);
        queryWrapper.eq(Comment::getActivityId,pageWrap.getModel().getActivityId());
        queryWrapper.orderByDesc(Comment::getId);
        queryWrapper.orderByAsc(Comment::getId);
        IPage<ActivityCommentDTO> result = commentJoinMapper.selectJoinPage(page, ActivityCommentDTO.class, queryWrapper);
        if (CollectionUtils.isEmpty(result.getRecords())){
@@ -258,6 +298,8 @@
        MPJLambdaWrapper<Comment> replyWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        replyWrapper.selectAs(Comment::getId,ActivityReplyCommentDTO::getId);
        replyWrapper.selectAs(Comment::getReplyId,ActivityReplyCommentDTO::getReplyId);
        replyWrapper.selectAs(Comment::getIsdeleted,ActivityReplyCommentDTO::getIsdeleted);
        if(Objects.isNull(pageWrap.getModel().getMemberId())){
            replyWrapper.select(" 0 ",ActivityReplyCommentDTO::getZanStatus);
        }else{
@@ -271,11 +313,12 @@
        replyWrapper.selectAs(Member::getImgurl,ActivityReplyCommentDTO::getMemberImgUrl);
        replyWrapper.selectCount(Comment::getId,ActivityReplyCommentDTO::getReplyCount);
        replyWrapper.selectMin(Comment::getCreateDate,ActivityReplyCommentDTO::getCreateDate);
        replyWrapper.select("reply.NICKNAME",ActivityReplyCommentDTO::getReplyMemberNikeName);
        replyWrapper.leftJoin(Member.class,Member::getId,Comment::getMemberId);
        replyWrapper.leftJoin("member reply on reply.id = t.REPLY_MEMBER_ID");
        replyWrapper.eq(Comment::getType, Constants.ONE);
        replyWrapper.eq(Comment::getStatus, Constants.ZERO);
        replyWrapper.in(Comment::getCommentId,commentIds);
        replyWrapper.orderByDesc(Comment::getId);
        replyWrapper.groupBy(Comment::getCommentId);
        List<ActivityReplyCommentDTO> activityCommentDTOS = commentJoinMapper.selectJoinList(ActivityReplyCommentDTO.class, replyWrapper);
@@ -300,17 +343,25 @@
            }
        }
        result.getRecords().forEach(s->{
            s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null);
            if(Constants.equalsInteger(s.getIsdeleted(),Constants.ONE)){
                s.setContent("该评论已被原作者删除");
            }else{
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList()));
            }
            }
            s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null);
            ZanDTO object = MapUtils.getObject(count, s.getId());
            ActivityReplyCommentDTO replyCommentDTO = collect.get(s.getId());
            if(Objects.nonNull(replyCommentDTO)){
                ZanDTO replyZan = MapUtils.getObject(count, replyCommentDTO.getId());
                replyCommentDTO.setZanCount(replyZan != null ? replyZan.getCount() : 0);
                if(Constants.equalsInteger(replyCommentDTO.getIsdeleted(),Constants.ONE)){
                    replyCommentDTO.setContent("该评论已被原作者删除");
                }else{
                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.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(replyCommentDTO.getId())).collect(Collectors.toList()));
                    }
                }
                replyCommentDTO.setMemberImgUrl(StringUtils.isNotBlank(replyCommentDTO.getMemberImgUrl())?memberFile+replyCommentDTO.getMemberImgUrl():null);
                s.setActivityReplyCommentDTO(replyCommentDTO);
@@ -338,11 +389,11 @@
        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");
        queryWrapper.leftJoin("member reply on reply.id = t.COMMENT_MEMBER_ID");
        queryWrapper.eq(Comment::getType, Constants.ONE);
        queryWrapper.eq(Comment::getStatus, Constants.ZERO);
        queryWrapper.eq(Comment::getCommentId,pageWrap.getModel().getCommentId());
        queryWrapper.orderByDesc(Comment::getId);
        queryWrapper.orderByAsc(Comment::getId);
        IPage<ActivityReplyCommentDTO> result = commentJoinMapper.selectJoinPage(page, ActivityReplyCommentDTO.class, queryWrapper);
        if (CollectionUtils.isEmpty(result.getRecords())){
            return PageData.from(result);
@@ -363,13 +414,16 @@
            }
        }
        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(Constants.equalsInteger(s.getIsdeleted(),Constants.ONE)){
                s.setContent("该评论已被原作者删除");
            }else{
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                s.setMultifileList(multifileList.stream().filter(t -> t.getObjId().equals(s.getId())).collect(Collectors.toList()));
            }
            }
            s.setMemberImgUrl(StringUtils.isNotBlank(s.getMemberImgUrl())?memberFile+s.getMemberImgUrl():null);
            ZanDTO replyZan = MapUtils.getObject(count, s.getId());
            s.setZanCount(replyZan != null ? replyZan.getCount() : 0);
            if (pageWrap.getModel().getCommentId().equals(s.getReplyId())){
@@ -378,4 +432,9 @@
        });
        return PageData.from(result);
    }
    private String getMemberOpenId(Integer memberId) {
        Member member = memberMapper.selectById(memberId);
        return member != null ? member.getOpenId() : null;
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -372,17 +372,9 @@
                    .eq(GoodsSku::getIsdeleted,Constants.ZERO)
                    .in(GoodsSku::getGoodsId,idList));
        }
        long shopNum   = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
                .eq(Shop::getIsdeleted,Constants.ZERO)
                .eq(Shop::getStatus,Constants.ZERO));
        MPJLambdaWrapper<Goods> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Goods.class);
        queryWrapper.select("(select count(s.id) from shop_goods_relation s  " +
                "left join shop g on s.SHOP_ID =g.id " +
                "where g.status=0 and s.ISDELETED=0 and s.GOODS_ID=t.id) as pricedShopNum ");
        queryWrapper.eq(GoodsSku::getIsdeleted,Constants.ZERO);
        queryWrapper.in(Goods::getId,idList);
        List<Goods> goodsList= goodsAdminJoinMapper.selectJoinList(Goods.class,queryWrapper);
        List<Goods> goodsList= goodsMapper.selectList(new QueryWrapper<Goods>().lambda()
                .eq(Goods::getIsdeleted,Constants.ZERO)
                .in(Goods::getId,idList));
        if(goodsList==null || goodsList.size() == 0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商品信息查询无效 ");
        }
@@ -409,14 +401,6 @@
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":商品商品尚未设置零售价,无法上架");
                }
            }
            if(Constants.formatLongNum(goods.getPricedShopNum()) < shopNum){
                //默认sku信息
                s =false;
                if(idList.size()==1){
                  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":有未设置供货价的经销商,无法上架");
                }
            }
            if(s){
                idList2.add(param.getId());
            }
@@ -432,7 +416,7 @@
        if(successNum != idList.size()){
            if( idList.size()>1){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "成功上架商品数:【"+successNum+"】,上架失败:【"+(idList.size()-successNum)+"】个商品,请确保待上架商品的均销售价和供货价已设置");
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "成功上架商品数:【"+successNum+"】,上架失败:【"+(idList.size()-successNum)+"】个商品,请确保待上架商品的销售价已设置");
            }else {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode()," ä¸Šæž¶å¤±è´¥");
            }
@@ -889,9 +873,9 @@
        queryWrapper.eq(pageWrap.getModel().getBrandId() != null, Goods::getBrandId, pageWrap.getModel().getBrandId());
        queryWrapper.eq(pageWrap.getModel().getStatus() != null, Goods::getStatus, pageWrap.getModel().getStatus());
        queryWrapper.in(pageWrap.getModel().getIdList() != null && pageWrap.getModel().getIdList().size()>0, Goods::getId, pageWrap.getModel().getIdList());
        if(pageWrap.getModel().getShopId() !=null){
            queryWrapper.orderByAsc("shopPrice");
        }
//        if(pageWrap.getModel().getShopId() !=null){
//            queryWrapper.orderByAsc("shopPrice");
//        }
        queryWrapper.orderByDesc(Goods::getId);
        IPage<Goods> result = goodsAdminJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
        initResult(result.getRecords(),pageWrap.getModel().getShopId()==null);
@@ -972,8 +956,8 @@
       GoodsRequest model = pageWrap.getModel();
        MPJLambdaWrapper<Goods> wrapper = new MPJLambdaWrapper<Goods>()
                .selectAll(Goods.class)
                .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getMinPrice)
                .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getLinePrice)
                .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id and gs.ISDELETED = 0  ),0)   ",Goods::getMinPrice)
                .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id and gs.ISDELETED = 0 ),0)   ",Goods::getLinePrice)
                .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
                .eq(Goods::getIsdeleted,Constants.ZERO)
                .eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()),
@@ -989,10 +973,10 @@
                .like(StringUtils.isNotBlank(model.getGoodsName()),Goods::getName,model.getGoodsName());
        if(Objects.nonNull(model.getShopId())){
            wrapper.select("  ifnull( ( select sgr.PRICE from shop_goods_relation sgr where sgr.GOODS_ID = t.ID and sgr.ISDELETED = 0 and sgr.`STATUS` = 0  and sgr.SHOP_ID = "+model.getShopId()+" ) ,0) ",Goods::getExFactoryPrice);
            wrapper.select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where gd.GOODS_ID = t.`id` and  go.DISTRIBUTION_SHOP_ID = "+model.getShopId()+" ),0) ",Goods::getRealSaleNum);
            wrapper.select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where go.PAY_STATUS = 1 and gd.GOODS_ID = t.`id` and  go.DISTRIBUTION_SHOP_ID = "+model.getShopId()+" ),0) ",Goods::getRealSaleNum);
        }else{
            wrapper.select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd  where gd.GOODS_ID =  t.id  )) ",Goods::getRealSaleNum);
            wrapper.select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where go.PAY_STATUS = 1 and gd.GOODS_ID = t.`id` ),0) ",Goods::getRealSaleNum);
        }
        if(Objects.nonNull(model.getSortInfo())){
@@ -1000,11 +984,11 @@
            if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
                wrapper.orderByDesc("t.CREATE_DATE");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
                wrapper.orderByAsc("(realSaleNum + t.SALENUM)");
                wrapper.orderByAsc("(realSaleNum + ifnull(t.SALENUM,0))");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
                wrapper.orderByAsc("minPrice");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
                wrapper.orderByDesc("(realSaleNum + t.SALENUM)");
                wrapper.orderByDesc("(realSaleNum + ifnull(t.SALENUM,0))");
            }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
                wrapper.orderByDesc("minPrice");
            }
@@ -1056,13 +1040,21 @@
        List<GoodsSkuResponse>  goodsSkuResponseList = goodsSkuMapper.getSkuResponseList(goodsResponse.getId());
        Integer sumStock = Constants.ZERO;
        Boolean noRestrictions = true;
        for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) {
            goodsSkuResponse.setStock(Objects.isNull(goodsSkuResponse.getStock())?Constants.ZERO:goodsSkuResponse.getStock());
            sumStock = sumStock + goodsSkuResponse.getStock();
            if(StringUtils.isNotBlank(goodsSkuResponse.getStockStr())){
                noRestrictions  = false;
            }
        }
        //真实销量 = realSaleNum  - saleNum;
        //真实库存= sumStock - (realSaleNum  - saleNum)
        if(noRestrictions){
            goodsResponse.setStock(-Constants.ONE);
        }else{
        goodsResponse.setStock(sumStock);
        }
        goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList);
        //Sku基础信息
        List<SkuResponse> skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId());
@@ -1084,9 +1076,9 @@
        Goods goodsResponse = goodsMapper.selectOne(
                 new MPJLambdaWrapper<Goods>()
                        .selectAll(Goods.class)
                        .select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd  where gd.GOODS_ID =  t.id  )) ",Goods::getRealSaleNum)
                        .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getMinPrice)
                         .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0)   ",Goods::getLinePrice)
                        .select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd  inner join goodsorder go on gd.ORDER_ID = go.id  where go.PAY_STATUS = 1 and gd.GOODS_ID = t.`id`  ),0) ",Goods::getRealSaleNum)
                        .select("  ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id and gs.ISDELETED = 0),0)   ",Goods::getMinPrice)
                         .select("  ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id and gs.ISDELETED = 0),0)   ",Goods::getLinePrice)
                        .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
//                        .eq(Goods::getIsdeleted,Constants.ZERO)
//                        .eq(Goods::getStatus, Constants.ZERO)
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderDetailServiceImpl.java
@@ -2,7 +2,6 @@
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.GoodsorderDetailMapper;
import com.doumee.dao.business.PlanorderDetailMapper;
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -286,7 +286,7 @@
                    Constants.UserActionType.CHANGE_ORDER_KD,
                    userActionMapper,
                    update.getEditDate(),
                    new String[]{goodsorder.getKdInfo()},
                    StringUtils.isNotBlank(goodsorder.getKdInfo())?new String[]{query.getKdInfo()}:null,
                    JSONObject.toJSONString(update) ,
                    query.getKdName()+"(单号:"+query.getKdCode()+")",
                    goodsorder.getKdName()+"(单号:"+goodsorder.getKdCode()+")");
@@ -296,7 +296,7 @@
        //发送发货站内信
        Notice notice = Notice.getNotice(
                Constants.NoticeType.NOTICE_ORDER_SEND,
                goodsorder.getMemberId(),
                query.getMemberId(),
                goodsorder.getId()
        );
        notice.setContent(notice.getContent().replace("{param}",goodsorder.getCode().toString()));
@@ -787,12 +787,13 @@
            if(Objects.isNull(member.getBindShopId())){
                memberMapper.update(new UpdateWrapper<Member>().lambda()
                        .set(Member::getBindShopId,shop.getId())
                        .set(Member::getBindShopDate,new Date())
                        .eq(Member::getId,member.getId())
                );
            }
            goodsorder.setPickUpShopId(shop.getId());
            goodsorder.setDistributionShopId(shop.getId());
            goodsorder.setLinkname(member.getName());
            goodsorder.setLinkname(StringUtils.isNotBlank(member.getName())?member.getName():member.getNickname());
            goodsorder.setLinkphone(member.getPhone());
            if(Objects.isNull(member.getBindShopId())){
                member.setBindShopId(shop.getId());
@@ -835,8 +836,8 @@
                    .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId())
            );
        }
        goodsorder.setReturnCustomerIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ONE));
        goodsorder.setReturnMemberIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ZERO));
        goodsorder.setReturnCustomerIntegral(getBackIntegral(goodsorder.getPrice().subtract(goodsorder.getMailPrice()),Constants.ONE));
        goodsorder.setReturnMemberIntegral(getBackIntegral(goodsorder.getPrice().subtract(goodsorder.getMailPrice()),Constants.ZERO));
        goodsorderMapper.insert(goodsorder);
        List<OrderGoodsCalculateResponse> goodsCalculateList  = orderPayConfirmResponse.getGoodsCalculateList();
        if(CollectionUtils.isEmpty(goodsCalculateList)){
@@ -844,7 +845,8 @@
        }
        List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
        BigDecimal shopSettlement = BigDecimal.ZERO;
        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
        for (int i = 0; i < goodsCalculateList.size(); i++) {
            OrderGoodsCalculateResponse payDetailRequest = goodsCalculateList.get(i);
            //查询商品
            GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
            if(Objects.isNull(goodsSku)||!Constants.equalsInteger(goodsSku.getIsdeleted(),Constants.ZERO)){
@@ -896,10 +898,10 @@
                //经销商优惠承担占比
                BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
                //计算经销商优惠承担金额  ï¼ˆä¼˜æƒ åˆ¸æŠµæ‰£é‡‘额 + ç§¯åˆ†æŠµæ‰£é‡‘额) * å æ¯”比例
                BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(payDetailRequest.getIntegralDeductCash())
                BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(Constants.equalsInteger(orderPayRequest.getUseIntegral(),Constants.ONE)?payDetailRequest.getIntegralDeductCash():BigDecimal.ZERO)
                        .multiply(shopRate).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
                //根据经销商销售模式 è®¡ç®—应结算金额
                if(shop.getSaleType().equals(Constants.ONE)){
                if(Constants.equalsInteger(shop.getSaleType(),Constants.ONE)&&Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
                    goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
                }else {
                    //平台铺货
@@ -944,6 +946,10 @@
        //存在现金支付
        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
            goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                    .set(Goodsorder::getShopSettlement,shopSettlement)
                    .eq(Goodsorder::getId,goodsorder.getId())
            );
            PayResponse payResponse = this.wxPay(goodsorder,member);
            payResponse.setLockKey(lockKey);
            return payResponse;
@@ -954,7 +960,7 @@
                .set(Goodsorder::getShopSettlement,shopSettlement)
                .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
                .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
                .set(Goodsorder::getId,goodsorder.getId())
                .eq(Goodsorder::getId,goodsorder.getId())
        );
        PayResponse payResponse = new PayResponse();
        payResponse.setOrderId(goodsorder.getId());
@@ -1312,7 +1318,7 @@
                    Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
                    goodsName = goods.getName();
                }
                if(!Objects.isNull(goodsSku)){
                if(!Objects.isNull(goodsSku)&&Objects.nonNull(goodsSku.getStock())){
                    goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
                    goodsSkuMapper.updateById(goodsSku);
                }
@@ -1441,7 +1447,7 @@
                amount = amount.add(response.getSkuAmount());
            }
        }
        MemberCoupon memberCoupon = new MemberCoupon();
        MemberCoupon memberCoupon = null;
        orderPayConfirmResponse.setCouponAmount(couponAmount);
        //获取可以使用的优惠券
        List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId());
@@ -1467,6 +1473,11 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"无可用优惠券,请刷新查看");
            }
        }
        if(Objects.nonNull(memberCoupon)){
            //计算优惠券占比
            memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
        }
        //查询用户总积分
        Member member = memberMapper.selectById(request.getMemberId());
        //最低可用启用积分
@@ -1480,6 +1491,7 @@
        orderPayConfirmResponse.setDeductIntegral(deductIntegral);
        orderPayConfirmResponse.setIntegralAmount(integralAmount);
        if(Constants.equalsInteger(orderPayConfirmResponse.getIntegralStatus(),Constants.ZERO)){
            //计算积分占比
            integralAmount = this.calculateIntegralRata(orderPayConfirmResponse,goodsCalculateList,member.getIntegral());
        }else{
            orderPayConfirmResponse.setSurplusIntegral(member.getIntegral());
@@ -1566,15 +1578,16 @@
        if(Constants.equalsInteger(type,Constants.ZERO)){
            if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
                && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
                integralBack = payAmount.multiply(platformConfigDTO.getReturnMemberIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),2,BigDecimal.ROUND_DOWN);
            }
        }else{
            if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
                    && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
                integralBack = payAmount.multiply(platformConfigDTO.getReturnShopIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
                integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),2,BigDecimal.ROUND_DOWN);
            }
        }
        return integralBack;
        //积分获取向下取整
        return integralBack.setScale(0, BigDecimal.ROUND_DOWN);
    }
@@ -1591,6 +1604,12 @@
                .multiply(i.getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN)).reduce(BigDecimal.ZERO,BigDecimal::add);
        //积分-现金兑换比例(XXX积分抵扣1元)
        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET,Constants.INTERALSET_DEDUCTINTEGRALLIMIT).getCode());
        //积分最大可抵扣金额
        BigDecimal deductionCash = totalIntegral.divide(cashToIntegralRata,2,RoundingMode.DOWN);
        BigDecimal surDeductionCash = deductionCash;
        BigDecimal goodUseIntegral = BigDecimal.ZERO;
        BigDecimal surUseIntegral = totalIntegral;
        //当前选择商品抵扣需要使用的积分
        BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata);
        //获取当前需要支付的现金总额
@@ -1601,20 +1620,32 @@
        BigDecimal realDeductionCash = BigDecimal.ZERO;
        for (int j = 0; j < goodsCalculateList.size(); j++) {
            //获取最大可抵扣金额
            BigDecimal deductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash())
            BigDecimal goodDeductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash())
                    .multiply(goodsCalculateList.get(j).getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN);
            goodsCalculateList.get(j).setIntegralMaxDeductCash(deductionCash);
            goodsCalculateList.get(j).setIntegralMaxDeductCash(goodDeductionCash);
            BigDecimal rata = goodDeductionCash.divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
            //如果剩余积分大于可以使用积分 åˆ™ç›´æŽ¥æ»¡é¢è®¡ç®— åä¹‹ å‰©ä½™ç§¯åˆ†ä¸èƒ½æ»¡è¶³å…¨éƒ¨æŠµæ‰£ å•独计算每个商品占比
            if(totalIntegral.compareTo(maxDeductionIntegral)<Constants.ZERO){
                deductionCash  = deductionCash.divide(payCash).multiply(totalIntegral);
                if(Constants.equalsInteger(j+1,goodsCalculateList.size())){
                    goodDeductionCash = surDeductionCash;
                    goodUseIntegral = surUseIntegral;
                }else{
                    goodDeductionCash  = (goodDeductionCash.multiply(deductionCash)).divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
                    surDeductionCash = surDeductionCash.subtract(goodDeductionCash);
                    goodUseIntegral = (goodDeductionCash.multiply(totalIntegral)).divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
                    surUseIntegral = totalIntegral.subtract(goodUseIntegral);
            }
            goodsCalculateList.get(j).setIntegralDeductCash(deductionCash);
            realDeductionCash = realDeductionCash.add(deductionCash);
            }
            goodsCalculateList.get(j).setIntegralDeductCash(goodDeductionCash);
            goodsCalculateList.get(j).setIntegralDeduct(goodUseIntegral);
            realDeductionCash = realDeductionCash.add(goodDeductionCash);
        }
        //剩余积分值
        orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
        //实际抵扣使用积分
        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
        //实际抵扣使用积分(向上取整)
        BigDecimal deductIntegralValue = totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO?totalIntegral:maxDeductionIntegral;
        orderPayConfirmResponse.setDeductIntegral(deductIntegralValue.setScale(0, BigDecimal.ROUND_UP));
        return realDeductionCash;
    }
@@ -1757,7 +1788,22 @@
                if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
                    continue;
                }
                if(coupon.getNum()>Constants.ZERO){
                    //查询已领取数量
                    Integer getNum = memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
                            .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
                            .eq(MemberCoupon::getCouponId,couponId)
                            .ne(MemberCoupon::getGetMethod,Constants.TWO)
                    ).intValue();
                    if(getNum >= coupon.getNum()){
                        continue;
                    }
                    if(num>(coupon.getNum() - getNum)){
                        num = coupon.getNum().intValue() - getNum;
                    }
                }
                MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,inviteMember,new Date(),Constants.ONE,null);
                for (int i = 0; i < num; i++) {
                    //满减卷不会生成maxPrice éœ€è¦æ ¹æ®ä¼˜æƒ åˆ¸å‡å°‘金额设置
                    if(Constants.equalsInteger(coupon.getCouponType(),Constants.ZERO)){
@@ -1823,9 +1869,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.getId(),memberId)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,当前订单核销门店为["+shop.getName()+"],您无法进行该操作!");
        }
        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
        goodsorder.setDoneDate(new Date());
        goodsorderMapper.updateById(goodsorder);
@@ -1862,11 +1908,10 @@
        if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
            return;
        }
        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ONE);
        if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
        if (goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO) > 0) {
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(backIntegral);
            dealIntegralRequest.setIntegralNum(goodsorder.getReturnCustomerIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
            dealIntegralRequest.setObjId(goodsorder.getId());
@@ -1911,11 +1956,10 @@
        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
            return;
        }
        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
        if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
        if (goodsorder.getReturnMemberIntegral().compareTo(BigDecimal.ZERO) > 0) {
            //更新余额信息 æ·»åŠ ç§¯åˆ†å˜åŠ¨è®°å½•
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(backIntegral);
            dealIntegralRequest.setIntegralNum(goodsorder.getReturnMemberIntegral());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
            dealIntegralRequest.setObjId(goodsorder.getId());
@@ -2099,9 +2143,6 @@
        }
        //加入redis缓存,刷新今天售后编号0开始
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.WITHDRAW_KEY,countWithdraw);
    }
@@ -2214,7 +2255,7 @@
                        .eq(Notice::getIsdeleted,Constants.ZERO)
                        .eq(Notice::getMemberId,member.getId())
                        .eq(Notice::getStatus,Constants.ZERO)
                )>=Constants.ZERO?Constants.ZERO:Constants.ONE
                )>Constants.ZERO?Constants.ZERO:Constants.ONE
        );
        return homeInfoResponse;
@@ -2329,16 +2370,67 @@
        List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
                .eq(Goodsorder::getIsdeleted, Constants.ZERO)
                .eq(Goodsorder::getStatus, Constants.OrderStatus.WAIT_PAY.getKey())
                        .apply(" CREATE_DATE >  DATE_SUB(NOW(), INTERVAL 15 MINUTE) ")
                        .apply(" CREATE_DATE <  DATE_SUB(NOW(), INTERVAL 15 MINUTE) ")
        );
        if(CollectionUtils.isNotEmpty(goodsorderList)){
            for (Goodsorder goodsorder:goodsorderList) {
                this.cancel(goodsorder,null,"订单未支付超时自动取消");
            }
        }
    }
    /**
     * è‡ªåŠ¨å®Œæˆ 7 å¤©æœªç¡®è®¤æ”¶è´§çš„物流发货订单
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void autoCompleteOrder(){
        //查询发货后 7 å¤©æœªç¡®è®¤æ”¶è´§çš„订单数据(仅处理快递配送订单)
        List<Goodsorder> goodsOrderList = goodsorderMapper.selectList(
                new QueryWrapper<Goodsorder>()
                        .eq("STATUS", Constants.OrderStatus.WAIT_RECEIVE.getKey())
                        .eq("RECEIVE_TYPE", Constants.ZERO)  // ä»…处理快递配送订单
                        .isNotNull("KD_CODE")  // æœ‰ç‰©æµå•号
                        .ne("KD_CODE", "")  // ç‰©æµå•号不为空
                        .apply(" KD_DATE IS NOT NULL ")  // æœ‰å‘è´§æ—¶é—´
                        .apply(" NOW() >= DATE_SUB(KD_DATE, INTERVAL -7 DAY) ")  // å‘货后 7 å¤©
        );
        if (!goodsOrderList.isEmpty()) {
            for (Goodsorder order : goodsOrderList) {
                try {
                    Goodsorder updateOrder = new Goodsorder();
                    updateOrder.setId(order.getId());
                    updateOrder.setStatus(Constants.OrderStatus.DONE.getKey());
                    updateOrder.setDoneDate(new Date());
                    updateOrder.setDoneInfo("发货 7 å¤©åŽç³»ç»Ÿè‡ªåŠ¨ç¡®è®¤æ”¶è´§");
                    goodsorderMapper.updateById(updateOrder);
                    //存在现金支付 èµ é€ ç§¯åˆ†
                    if(Constants.equalsInteger(updateOrder.getPayMethod(),Constants.ZERO)){
                        //赠送消费者积分
                        this.orderAddMemberIntegral(order);
                        //下单完成 æ ¹æ®ä¿¡æ¯ç¡®è®¤æ˜¯å¦éœ€è¦èµ é€é‚€è¯·è€…优惠券
                        this.orderDoneRewardInviteCoupon(order);
                        //经销商 æ·»åŠ èµ é€ç§¯åˆ†
                        this.orderAddShopIntegral(order);
                        //经销商 ç»“算金额
                        this.orderAddShopCash(order);
                    }
                    System.out.println("订单自动完成:订单 ID=" + order.getId() + ", è®¢å•编号=" + order.getCode());
                } catch (Exception e) {
                    System.out.println("订单自动完成失败:订单 ID=" + order.getId() + ", é”™è¯¯ï¼š" + e.getMessage());
                }
            }
        }
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -68,6 +68,9 @@
    private GoodsorderMapper goodsorderMapper;
    @Autowired
    private GoodsorderDetailMapper goodsorderDetailMapper;
    @Autowired
    private NoticeService noticeService;
    @Autowired
@@ -147,6 +150,14 @@
    @Override
    @Transactional(rollbackFor = {Exception.class, BusinessException.class})
    public Integer dealIntegral(DealIntegralRequest dealIntegralRequest,Member member) {
        // ç§¯åˆ†å–整:获取向下取整,消耗向上取整
        if(dealIntegralRequest.getIntegralNum() != null){
            if(Constants.equalsInteger(dealIntegralRequest.getDealType(),Constants.ZERO)){
                dealIntegralRequest.setIntegralNum(dealIntegralRequest.getIntegralNum().setScale(0, BigDecimal.ROUND_DOWN));
            }else{
                dealIntegralRequest.setIntegralNum(dealIntegralRequest.getIntegralNum().setScale(0, BigDecimal.ROUND_UP));
            }
        }
        if(member == null){
              member = memberMapper.selectById(dealIntegralRequest.getMemberId());
        }
@@ -160,7 +171,7 @@
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().intValue()+"");
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toBigInteger().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
@@ -185,7 +196,7 @@
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ONE,member.getId(),dealIntegralRequest.getIntegralNum(),
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,member.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), info
        );
        return integral.getId();
@@ -193,6 +204,14 @@
    @Override
    public Integer dealShopIntegral(DealIntegralRequest dealIntegralRequest,Shop shop) {
        // ç§¯åˆ†å–整:获取向下取整,消耗向上取整
        if(dealIntegralRequest.getIntegralNum() != null){
            if(Constants.equalsInteger(dealIntegralRequest.getDealType(),Constants.ZERO)){
                dealIntegralRequest.setIntegralNum(dealIntegralRequest.getIntegralNum().setScale(0, BigDecimal.ROUND_DOWN));
            }else{
                dealIntegralRequest.setIntegralNum(dealIntegralRequest.getIntegralNum().setScale(0, BigDecimal.ROUND_UP));
            }
        }
        if(shop ==null){
            shop = shopMapper.selectById(dealIntegralRequest.getMemberId());
        }
@@ -205,7 +224,7 @@
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle( dealIntegralRequest.getIntegralObjType()!=null?dealIntegralRequest.getIntegralObjType().getName():"");
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toBigInteger().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
@@ -268,9 +287,9 @@
        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                .eq(Shop::getId,shop.getId())
                .set(Shop::getEditDate,new Date())
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"total_integral = ifnull(total_integral,0)+" + dealIntegralRequest.getIntegralNum())//累计增加
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"integral = ifnull(integral,0)+" +  dealIntegralRequest.getIntegralNum())
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ONE),"integral = ifnull(integral,0)-" + dealIntegralRequest.getIntegralNum()));
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"TOTAL_AMOUNT = ifnull(TOTAL_AMOUNT,0)+" + dealIntegralRequest.getIntegralNum())//累计增加
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ZERO),"AMOUNT = ifnull(AMOUNT,0)+" +  dealIntegralRequest.getIntegralNum())
                .setSql(dealIntegralRequest.getDealType().equals(Constants.ONE),"AMOUNT = ifnull(AMOUNT,0)-" + dealIntegralRequest.getIntegralNum()));
        return integral.getId();
    }
@@ -615,12 +634,14 @@
                                .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
                integralDataResponse.setWaitPayAmount(
                        goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
                        goodsorderDetailMapper.selectJoinList(GoodsorderDetail.class,new MPJLambdaWrapper<GoodsorderDetail>()
                                .selectAll(GoodsorderDetail.class)
                                .leftJoin(Goodsorder.class,Goodsorder::getId,GoodsorderDetail::getOrderId)
                                .eq(Goodsorder::getDistributionShopId,model.getMemberId())
                                .in(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey(),
                                        Constants.OrderStatus.PAY_DONE.getKey(),
                                        Constants.OrderStatus.WAIT_RECEIVE.getKey())
                        ).stream().map(Goodsorder::getShopSettlement)
                        ).stream().map(GoodsorderDetail::getShopSettlement)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
            }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
@@ -173,6 +173,30 @@
    }
    @Override
    public String createMemberMiniProgramCode(Integer memberId) throws Exception {
        InputStream inputStream = Constants.generateWxMiniImgStream(
                "uid_"+memberId,
                "/pages/index/index",
                true);
        if (inputStream == null) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "小程序分享码生成失败");
        }
        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)) {
            return key;
        }
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "小程序分享码上传失败");
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -165,6 +165,7 @@
    private List<Member> getMemberListByParam(MemberCouponAddDTO memberCoupon) {
        List<Member>  list = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
                .eq(memberCoupon.getAddType() == Constants.ZERO,Member::getId,memberCoupon.getAddMemberIds())
                .in(memberCoupon.getAddType() == Constants.ONE,Member::getPhone,memberCoupon.getPhones()));
        if(list == null || list.size()==0){
@@ -400,8 +401,7 @@
                .apply(Objects.nonNull(status)&&Constants.equalsInteger(status,Constants.TWO),"m.STATUS = 0 and  m.END_DATE < now() " )
                .eq("TYPE",couponType)
                .apply(!Objects.isNull(price)," m.LIMIT_PRICE >= "+price+" ")
//                .apply("   now() between m.START_DATE and m.END_DATE ")
                .orderByDesc(" m.PRICE ")
                .orderByDesc( " m.CREATE_DATE ")
        );
        return page;
    }
@@ -589,8 +589,7 @@
                        .apply("  now() between START_DATE and  END_DATE ")
                        .orderByDesc(MemberCoupon::getMaxPrice)
                        .orderByAsc(MemberCoupon::getEndDate)
        )
                ;
        );
        if(CollectionUtils.isNotEmpty(allCoupon)){
            for (MemberCoupon memberCoupon:allCoupon) {
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -85,6 +85,8 @@
    @Autowired
    private CouponMapper couponMapper;
    @Autowired
    private MemberCouponMapper memberCouponMapper;
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
    private IntegralMapper integralMapper;
@@ -310,22 +312,25 @@
    @Override
    public AccountResponse wxLogin(String code){
        try {
            //获取微信敏感数据
    public AccountResponse wxLogin(String code) throws WxErrorException {
            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
            String openId = session.getOpenid();
            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
                            .eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getStatus,Constants.ZERO)
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq(Member::getOpenId, openId)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
                    .last(" limit 1"));
            AccountResponse accountResponse = new AccountResponse();
            if(Objects.nonNull(member)){
                memberMapper.updateById(member);
                member.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                        systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl():null);
            String ossPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode();
            String memberPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode();
            if(StringUtils.isNotBlank(member.getImgurl())){
                member.setImgFullUrl(ossPath + memberPath + member.getImgurl());
            }
                String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
                accountResponse.setToken(token);
                accountResponse.setOpenid(openId);
@@ -334,10 +339,6 @@
                accountResponse.setOpenid(openId);
            }
            return accountResponse;
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
    }
@@ -444,6 +445,20 @@
                    if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
                        continue;
                    }
                    if(coupon.getNum()>Constants.ZERO) {
                        //查询已领取数量
                        Integer getNum = memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
                                .eq(MemberCoupon::getIsdeleted, Constants.ZERO)
                                .eq(MemberCoupon::getCouponId, couponId)
                                .ne(MemberCoupon::getGetMethod, Constants.TWO)
                        ).intValue();
                        if (getNum >= coupon.getNum()) {
                            continue;
                        }
                        if (num > (coupon.getNum() - getNum)) {
                            num = coupon.getNum().intValue() - getNum;
                        }
                    }
                    MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,member,new Date(),Constants.ZERO,null);
                    for (int i = 0; i < num; i++) {
                        //满减卷不会生成maxPrice éœ€è¦æ ¹æ®ä¼˜æƒ åˆ¸å‡å°‘金额设置
@@ -486,6 +501,10 @@
        //赠送邀请积分
        //开启邀请注册送积分
        if(Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)){
            member = memberMapper.selectById(member.getRecId());
            if(Objects.isNull(member)){
                return;
            }
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(platformConfigDTO.getShareIntegralReward());
            dealIntegralRequest.setDealType(Constants.ZERO);
@@ -493,8 +512,6 @@
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.INVITENEWUSER);
            dealIntegralRequest.setParam1(member.getNickname());
            integralService.dealIntegral(dealIntegralRequest,member);
            //添加消息记录
        }
    }
@@ -690,7 +707,7 @@
        }
        this.verifyPhoneCode(request.getCode(),request.getPhone());
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .eq(Member::getPhone,request.getPhone())
                .set(Member::getPhone,request.getPhone())
                .eq(Member::getId,request.getMemberId())
        );
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java
@@ -224,7 +224,7 @@
        Notice notice = pageWrap.getModel();
        queryWrapper.ne(Objects.nonNull(notice.getQueryType()),
        queryWrapper.eq(Objects.nonNull(notice.getQueryType()),
                        Notice::getType,notice.getQueryType())
                    .eq(Notice::getMemberId,notice.getMemberId())
                .orderByAsc(Notice::getStatus)
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -162,12 +162,15 @@
                            .set(Shop::getProgramCode,url)
                    .eq(Shop::getId,shop.getId()));
        }
        if(StringUtils.isNotBlank(shop.getPosterImg())) {
        //分享海报
        String posterUrl = inviteRecordService.createShareImg(Constants.ONE,shop.getId(),shop.getPosterImg());
        if(StringUtils.isNotBlank(posterUrl)){
            //生成失败会生成字符串 1
            if (StringUtils.isNotBlank(posterUrl)&&!posterUrl.equals("1")) {
            shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
                    .set(Shop::getPosterImgCode,posterUrl)
                    .eq(Shop::getId,shop.getId()));
            }
        }
        return shop.getId();
    }
@@ -260,17 +263,16 @@
        shop.setEditor(user.getId());
        shop.setEditDate(new Date());
        if(StringUtils.isBlank(model.getProgramCode())){
            //分享码
            String url = inviteRecordService.createShopMiniProgramCode(shop.getId());
            if(StringUtils.isNotBlank(url)){
                shop.setProgramCode(url);
            }
        }
        if(StringUtils.isNotBlank(shop.getPosterImg())){
            //分享海报
            String posterUrl = inviteRecordService.createShareImg(Constants.ONE,shop.getId(),shop.getPosterImg());
            if(StringUtils.isNotBlank(posterUrl)){
            //生成失败会生成字符串 1
            if (StringUtils.isNotBlank(posterUrl)&&!posterUrl.equals("1")) {
                shop.setPosterImgCode(posterUrl);
            }
        }
@@ -284,8 +286,8 @@
                    shop.getEditDate(),
                    new String[]{user.getUsername(), DateUtil.getPlusTime2(shop.getEditDate())},
                    JSONObject.toJSONString(shop) ,
                    Constants.equalsInteger(model.getSaleType(),Constants.ONE)?"自由采购":"平台铺货",
                    Constants.equalsInteger(shop.getSaleType(),Constants.ONE)?"自由采购":"平台铺货");
                    Constants.equalsInteger(model.getSaleType(),Constants.ONE)?"自主采购":"平台铺货",
                    Constants.equalsInteger(shop.getSaleType(),Constants.ONE)?"自主采购":"平台铺货");
        }
    }
@@ -782,6 +784,7 @@
        if(!pwd.equals(shop.getPassword())){
            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
        }
        shop.setOpenId(dto.getOpenid());
        //创建token
//        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
//        String token = JwtTokenUtil.generateToken(payLoad);
@@ -892,34 +895,53 @@
                        //自定义日期
                        .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())
                        .in(Goodsorder::getStatus,Constants.OrderStatus.PAY_DONE.getKey(),Constants.OrderStatus.WAIT_RECEIVE.getKey(),Constants.OrderStatus.DONE.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.setSaleTotal(goodsorderList.stream().map(i->i.getTotalPrice().subtract(i.getMailPrice())).reduce(BigDecimal.ZERO, BigDecimal::add));
            saleReportResponse.setOrderNum(goodsorderList.size());
        }
        List<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
                .eq(Integral::getIsdeleted,Constants.ZERO)
                .eq(Integral::getMemberId,shopId)
                .eq(Integral::getUserType,Constants.TWO)
                .eq(Integral::getType,Constants.ZERO)
                .eq(Integral::getObjType,Constants.IntegralObjType.ORDER_DONE_AMOUNT.getKey())
//        List<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
//                .eq(Integral::getIsdeleted,Constants.ZERO)
//                .eq(Integral::getMemberId,shopId)
//                .eq(Integral::getUserType,Constants.TWO)
//                .eq(Integral::getType,Constants.ZERO)
//                .eq(Integral::getObjType,Constants.IntegralObjType.ORDER_DONE_AMOUNT.getKey())
//                //今日
//                .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(CREATE_DATE) = DATE(NOW())  ")
//                //当月
//                .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
//                //上月
//                .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(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(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()), "  CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
//                .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
//        );
        goodsorderList = goodsorderJoinMapper.selectJoinList(Goodsorder.class,
                new MPJLambdaWrapper<Goodsorder>()
                        .selectAll(Goodsorder.class)
                        .eq(Goodsorder::getIsdeleted,Constants.ZERO)
                        .eq(Goodsorder::getDistributionShopId,shopId)
                //今日
                .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(CREATE_DATE) = DATE(NOW())  ")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.DONE_DATE) = DATE(NOW())  ")
                //当月
                .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.DONE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
                //上月
                .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), "  DATE_FORMAT(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.DONE_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(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.DONE_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()), "  CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
                .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), "  t.DONE_DATE >= '"+request.getStartDate()+" 00:00:00'")
                        .apply(Objects.nonNull(request.getDateType())&&Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), "  t.DONE_DATE <= '"+request.getEndDate()+" 23:59:59'")
                        .in(Goodsorder::getStatus,Constants.OrderStatus.DONE.getKey())
                        .orderByDesc(Goodsorder::getId)
        );
        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(integralList)) {
            saleReportResponse.setProfitTotal(integralList.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(goodsorderList)) {
            saleReportResponse.setProfitTotal(goodsorderList.stream().filter(i->Objects.nonNull(i.getShopSettlement())).map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO, BigDecimal::add));
        }
        return  saleReportResponse;
    }
@@ -978,8 +1000,29 @@
        redisTemplate.delete(token);
    }
    @Override
    public void updatePwd(Integer shopId, String oldPassword, String newPassword){
        if(StringUtils.isBlank(oldPassword) || StringUtils.isBlank(newPassword)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "旧密码和新密码不能为空");
        }
        if(oldPassword.equals(newPassword)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "新密码不能与旧密码相同");
        }
        Shop shop = shopMapper.selectById(shopId);
        if(shop == null){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "商户信息不存在");
        }
        String oldPwd = Utils.Secure.encryptPassword(oldPassword, shop.getSalt());
        if(!oldPwd.equals(shop.getPassword())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "旧密码错误");
        }
        String newSalt = RandomStringUtils.randomAlphabetic(6);
        String newPwd = Utils.Secure.encryptPassword(newPassword, newSalt);
        shopMapper.update(null, new UpdateWrapper<Shop>().lambda()
                .set(Shop::getPassword, newPwd)
                .set(Shop::getSalt, newSalt)
                .eq(Shop::getId, shopId));
    }
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopcartServiceImpl.java
@@ -227,7 +227,7 @@
     * @param addCartGoodsRequest
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void addCart(AddCartGoodsRequest addCartGoodsRequest){
        //查询购物车是否存在当前选中的商品信息
        Shopcart shopcart = shopcartMapper.selectOne(new QueryWrapper<Shopcart>()
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java
@@ -292,6 +292,7 @@
                     .le(pageWrap.getModel().getEndtime() != null,WithdrawRecord::getCreateDate, pageWrap.getModel().getEndtime())
                     .like(pageWrap.getModel().getShopName() != null,Shop::getName, pageWrap.getModel().getShopName())
                     .eq(WithdrawRecord::getIsdeleted,Constants.ZERO)
                    .in(WithdrawRecord::getStatus,Constants.ZERO,Constants.ONE)
                     .eq(pageWrap.getModel().getStatus()!=null,WithdrawRecord::getStatus,pageWrap.getModel().getStatus())
            );
            if(count == null){
server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -47,7 +47,7 @@
        loginLog.setOsInfo(Utils.User_Client.getOS(request));
        loginLog.setServerIp(Utils.Server.getIP());
        // æ ¡éªŒéªŒè¯ç 
    /*    try {
        try {
            captchaService.check(dto.getUuid(), dto.getCode());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
@@ -55,7 +55,7 @@
            loginLog.setSuccess(Boolean.FALSE);
            systemLoginLogService.create(loginLog);
            throw e;
        }*/
        }
        // æ ¡éªŒç”¨æˆ·åå’Œå¯†ç 
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(dto.getUsername(), dto.getPassword());
server/dmmall_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -126,11 +126,11 @@
    @Override
    public PageData<SystemUserListVO> findPage(PageWrap<QuerySystemUserDTO> pageWrap) {
        // æ ¹éƒ¨é—¨æ¡ä»¶å¤„理(需查询根部门下所有部门的用户)
        if (pageWrap.getModel().getRootDeptId() != null) {
            pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(pageWrap.getModel().getRootDeptId()));
        } else {
            pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(null));
        }
//        if (pageWrap.getModel().getRootDeptId() != null) {
//            pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(pageWrap.getModel().getRootDeptId()));
//        } else {
//            pageWrap.getModel().setDepartmentIds(getAllowedDeptIds(null));
//        }
        // æ‰§è¡ŒæŸ¥è¯¢
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
        List<SystemUserListVO> userList = systemUserMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause());
server/dmmall_service/src/main/resources/application-dev.yml
@@ -48,12 +48,28 @@
########################微信支付相关配置########################
wx:
  pay:
    appId: wxcd2b89fd2ff065f8
    appSecret: 3462fa186da7cb06c544df8d8664b63a
    mchId: 1229817002
    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    notifyUrl: https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
    keyPath: /usr/local/apiclient_cert.p12
    appId: wx6264b4f3a697cbe8
    appSecret: 23734577e8978138c946b727f0394027
    mchId: 1629568742
    mchKey: NJTLJSTZYXZRGScaiwubuzichanbu666
    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify
    keyPath: D:\DouMee\gtxljcWxcert\apiclient_cert.p12
#    appId: wxcd2b89fd2ff065f8
#    appSecret: 3462fa186da7cb06c544df8d8664b63a
#    mchId: 1229817002
#    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
#    notifyUrl: https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
#    keyPath: /usr/local/apiclient_cert.p12 #D:\DouMee\dmkjWxcert\apiclient_cert.p12 #
#wx:
#  pay:
#    appId: wx0115b948d647e9b2
#    appSecret: 4b5b97d6770f1fc6b09a7019804739a7
#    mchId: 1739990831
#    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
#    notifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayNotify #https://test.doumee.cn/dmmall_web_api/web/api/wxPayNotify
#    keyPath: D:\DouMee\1739990831_20260306_cert #D:\DouMee\dmkjWxcert\apiclient_cert.p12 #
tencent:
  map:
@@ -62,4 +78,4 @@
########################定时开启配置########################
timing: true
timing: false
server/dmmall_service/src/main/resources/application-pro.yml
@@ -2,9 +2,9 @@
spring:
  # æ•°æ®æºé…ç½®
  datasource:
    url: jdbc:mysql://192.168.0.211:3306/dmmall_full?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: Doumee@168
    url: jdbc:mysql://rm-uf6916tp3306gqv43vo.mysql.rds.aliyuncs.com:3306/dynj?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: dynj
    password: dynj@2026
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
@@ -49,12 +49,18 @@
########################微信支付相关配置########################
wx:
  pay:
    appId: wxcd2b89fd2ff065f8
    appSecret: 3462fa186da7cb06c544df8d8664b63a
    mchId: 1229817002
    appId: wx0115b948d647e9b2
    appSecret: 4b5b97d6770f1fc6b09a7019804739a7
    mchId: 1739990831
    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
    notifyUrl: https://dmtest.ahapp.net/dmmall_interface/web/api/wxPayNotify
    keyPath: /usr/local/apiclient_cert.p12
    notifyUrl: https://dynometaie.com/dmmall_web_api/web/api/wxPayNotify
    keyPath: /usr/local/jars/apiclient_cert.p12
#    appId: wxcd2b89fd2ff065f8
#    appSecret: 3462fa186da7cb06c544df8d8664b63a
#    mchId: 1229817002
#    mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
#    notifyUrl: https://mall.dynometacn.com/dmmall_web_api/web/api/wxPayNotify
#    keyPath: /usr/local/jars/dm_apiclient_cert.p12
tencent:
  map:
server/dmmall_service/src/main/resources/application-test.yml
@@ -63,4 +63,4 @@
########################定时开启配置########################
timing: true
timing: false
server/dmmall_service/src/main/resources/mappers/SystemDataPermissionMapper.xml
@@ -25,10 +25,10 @@
      role.`ID` AS ROLE_ID, role.`CODE` AS ROLE_CODE, role.`NAME` AS ROLE_NAME,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DATA_PERMISSION sdp
    INNER JOIN `SYSTEM_ROLE` role ON role.ID = sdp.ROLE_ID
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = sdp.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = sdp.UPDATE_USER
    FROM system_data_permission sdp
    INNER JOIN `system_role` role ON role.ID = sdp.ROLE_ID
    LEFT JOIN `system_user` create_user ON create_user.ID = sdp.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = sdp.UPDATE_USER
    <where>
      sdp.DELETED = 0
      <if test="dto.businessCode != null and dto.businessCode != ''">
server/dmmall_service/src/main/resources/mappers/SystemDepartmentMapper.xml
@@ -20,11 +20,11 @@
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME,
      COUNT(usr.ID) USER_COUNT
    FROM SYSTEM_DEPARTMENT dept
    LEFT JOIN `SYSTEM_DEPARTMENT_USER` sdu ON sdu.DEPARTMENT_ID = dept.ID AND sdu.DELETED = 0
    LEFT JOIN `SYSTEM_USER` usr ON usr.ID = sdu.USER_ID AND usr.DELETED = 0
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = dept.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = dept.UPDATE_USER
    FROM system_department dept
    LEFT JOIN `system_department_user` sdu ON sdu.DEPARTMENT_ID = dept.ID AND sdu.DELETED = 0
    LEFT JOIN `system_user` usr ON usr.ID = sdu.USER_ID AND usr.DELETED = 0
    LEFT JOIN `system_user` create_user ON create_user.ID = dept.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = dept.UPDATE_USER
    <where>
      dept.DELETED = 0
      <if test="id != null">
server/dmmall_service/src/main/resources/mappers/SystemDictDataMapper.xml
@@ -19,9 +19,9 @@
      dict_data.`ID`, dict_data.`remark`, dict_data.`DICT_ID`, dict_data.`CODE`, dict_data.`LABEL`, dict_data.`SORT`, dict_data.`DISABLED`, dict_data.`CREATE_TIME`, dict_data.`UPDATE_TIME`, dict_data.`CREATE_USER`, dict_data.`UPDATE_USER`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DICT_DATA dict_data
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = dict_data.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = dict_data.UPDATE_USER
    FROM system_dict_data dict_data
    LEFT JOIN `system_user` create_user ON create_user.ID = dict_data.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = dict_data.UPDATE_USER
    <where>
      dict_data.DELETED = 0
      <if test="dictId != null">
server/dmmall_service/src/main/resources/mappers/SystemDictMapper.xml
@@ -19,9 +19,9 @@
      dict.`ID`, dict.`CODE`, dict.`NAME`, dict.`REMARK`, dict.`CREATE_TIME`, dict.`UPDATE_TIME`, dict.`CREATE_USER`, dict.`UPDATE_USER`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_DICT dict
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = dict.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = dict.UPDATE_USER
    FROM system_dict dict
    LEFT JOIN `system_user` create_user ON create_user.ID = dict.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = dict.UPDATE_USER
    <where>
      dict.DELETED = 0
      <if test="dto.code != null and dto.code != ''">
server/dmmall_service/src/main/resources/mappers/SystemMenuMapper.xml
@@ -19,9 +19,9 @@
      menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`FIXED`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_MENU menu
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = menu.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = menu.UPDATE_USER
    FROM system_menu menu
    LEFT JOIN `system_user` create_user ON create_user.ID = menu.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = menu.UPDATE_USER
    <where>
      menu.DELETED = 0
    </where>
@@ -32,9 +32,9 @@
  <select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemMenu">
    SELECT
      DISTINCT menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
    FROM `SYSTEM_MENU` menu
    INNER JOIN SYSTEM_ROLE_MENU role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    INNER JOIN SYSTEM_USER_ROLE user_role ON user_role.ROLE_ID = role_menu.ROLE_ID AND user_role.DELETED = 0
    FROM `system_menu` menu
    INNER JOIN system_role_menu role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    INNER JOIN system_user_role user_role ON user_role.ROLE_ID = role_menu.ROLE_ID AND user_role.DELETED = 0
    <where>
      AND menu.DELETED = 0
      AND menu.DISABLED = 0
@@ -47,8 +47,8 @@
  <select id="selectByRoleId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemMenu">
    SELECT
      menu.`ID`, menu.`PARENT_ID`, menu.`NAME`, menu.`PATH`, menu.`REMARK`, menu.`DISABLED`, menu.SORT, menu.`ICON`, menu.`CREATE_TIME`, menu.`UPDATE_TIME`, menu.`CREATE_USER`, menu.`UPDATE_USER`, menu.`DELETED`
    FROM `SYSTEM_MENU` menu
    INNER JOIN `SYSTEM_ROLE_MENU` role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    FROM `system_menu` menu
    INNER JOIN `system_role_menu` role_menu ON role_menu.MENU_ID = menu.ID AND role_menu.DELETED = 0
    <where>
      menu.DELETED = 0
      AND role_menu.ROLE_ID = #{roleId}
server/dmmall_service/src/main/resources/mappers/SystemPermissionMapper.xml
@@ -19,9 +19,9 @@
      perm.`ID`, perm.`CODE`, perm.`NAME`, perm.`REMARK`, perm.`FIXED`, perm.`CREATE_TIME`, perm.`UPDATE_TIME`, perm.`CREATE_USER`, perm.`UPDATE_USER`, perm.`DELETED`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_PERMISSION perm
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = perm.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = perm.UPDATE_USER
    FROM system_permission perm
    LEFT JOIN `system_user` create_user ON create_user.ID = perm.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = perm.UPDATE_USER
    <where>
      perm.DELETED = 0
      <if test="dto.code != null">
@@ -38,10 +38,10 @@
  <select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemPermission">
    SELECT
      perm.`ID`, perm.`CODE`, perm.`NAME`, perm.`REMARK`, perm.`CREATE_TIME`, perm.`UPDATE_TIME`, perm.`CREATE_USER`, perm.`UPDATE_USER`, perm.`DELETED`
    FROM SYSTEM_PERMISSION perm
    INNER JOIN SYSTEM_ROLE_PERMISSION role_perm ON role_perm.PERMISSION_ID = perm.ID AND role_perm.DELETED = 0
    INNER JOIN SYSTEM_ROLE role ON role.ID = role_perm.ROLE_ID AND role.DELETED = 0
    INNER JOIN SYSTEM_USER_ROLE user_role ON user_role.ROLE_ID = role.ID AND user_role.DELETED = 0
    FROM system_permission perm
    INNER JOIN system_role_permission role_perm ON role_perm.PERMISSION_ID = perm.ID AND role_perm.DELETED = 0
    INNER JOIN system_role role ON role.ID = role_perm.ROLE_ID AND role.DELETED = 0
    INNER JOIN system_user_role user_role ON user_role.ROLE_ID = role.ID AND user_role.DELETED = 0
    <where>
      perm.DELETED = 0
      AND user_role.USER_ID = #{userId}
@@ -52,8 +52,8 @@
  <select id="selectByRoleId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemPermission">
    SELECT
      perm.`ID`, perm.`CODE`, perm.`NAME`, perm.`REMARK`, perm.`CREATE_TIME`, perm.`UPDATE_TIME`, perm.`CREATE_USER`, perm.`UPDATE_USER`, perm.`DELETED`
    FROM SYSTEM_PERMISSION perm
    INNER JOIN SYSTEM_ROLE_PERMISSION role_perm ON role_perm.PERMISSION_ID = perm.ID AND role_perm.DELETED = 0
    FROM system_permission perm
    INNER JOIN system_role_permission role_perm ON role_perm.PERMISSION_ID = perm.ID AND role_perm.DELETED = 0
    <where>
      perm.DELETED = 0
      AND role_perm.ROLE_ID = #{roleId}
server/dmmall_service/src/main/resources/mappers/SystemPositionMapper.xml
@@ -20,11 +20,11 @@
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME,
      COUNT(usr.ID) USER_COUNT
    FROM SYSTEM_POSITION posi
    LEFT JOIN `SYSTEM_POSITION_USER` spu ON spu.POSITION_ID = posi.ID AND spu.DELETED = 0
    LEFT JOIN `SYSTEM_USER` usr ON usr.ID = spu.USER_ID AND usr.DELETED = 0
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = posi.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = posi.UPDATE_USER
    FROM system_position posi
    LEFT JOIN `system_position_user` spu ON spu.POSITION_ID = posi.ID AND spu.DELETED = 0
    LEFT JOIN `system_user` usr ON usr.ID = spu.USER_ID AND usr.DELETED = 0
    LEFT JOIN `system_user` create_user ON create_user.ID = posi.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = posi.UPDATE_USER
    <where>
      posi.DELETED = 0
      <if test="name != null and name != ''">
@@ -38,9 +38,9 @@
  <select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemPosition">
    SELECT
      sp.`ID`, sp.`PARENT_ID`, sp.`CODE`, sp.`NAME`
    FROM `SYSTEM_POSITION` sp
    INNER JOIN `SYSTEM_POSITION_USER` spu ON spu.`POSITION_ID` = sp.`ID` AND spu.`DELETED` = 0
    INNER JOIN `SYSTEM_USER` su ON su.`ID` = spu.`USER_ID`
    FROM `system_position` sp
    INNER JOIN `system_position_user` spu ON spu.`POSITION_ID` = sp.`ID` AND spu.`DELETED` = 0
    INNER JOIN `system_user` su ON su.`ID` = spu.`USER_ID`
    <where>
      sp.DELETED = 0
      AND spu.USER_ID = #{userId}
server/dmmall_service/src/main/resources/mappers/SystemRoleMapper.xml
@@ -19,9 +19,9 @@
      role.ID, role.`CODE`, role.`NAME`, role.`REMARK`, role.`FIXED`, role.`CREATE_TIME`, role.`UPDATE_TIME`,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM SYSTEM_ROLE role
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = role.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = role.UPDATE_USER
    FROM system_role role
    LEFT JOIN `system_user` create_user ON create_user.ID = role.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = role.UPDATE_USER
    <where>
      role.DELETED = 0
      <if test="dto.code != null and dto.code != ''">
@@ -38,8 +38,8 @@
  <select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.doumee.dao.system.model.SystemRole">
    SELECT
    role.ID, role.`CODE`, role.`NAME`, role.`REMARK`, role.`CREATE_TIME`, role.`UPDATE_TIME`
    FROM SYSTEM_ROLE role
    INNER JOIN SYSTEM_USER_ROLE user_role ON user_role.ROLE_ID = role.ID AND user_role.DELETED = 0
    FROM system_role role
    INNER JOIN system_user_role user_role ON user_role.ROLE_ID = role.ID AND user_role.DELETED = 0
    <where>
      role.DELETED = 0
      AND user_role.USER_ID = #{userId}
server/dmmall_service/src/main/resources/mappers/SystemUserMapper.xml
@@ -25,13 +25,13 @@
      sd.ID AS DEPARTMENT_ID, sd.`NAME` AS DEPARTMENT_NAME,
      create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
    FROM `SYSTEM_USER` usr
    LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = usr.CREATE_USER
    LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = usr.UPDATE_USER
    LEFT JOIN `SYSTEM_POSITION_USER` spu ON spu.USER_ID = usr.ID AND spu.DELETED = 0
    LEFT JOIN `SYSTEM_POSITION` sp ON sp.ID = spu.POSITION_ID AND sp.DELETED = 0
    LEFT JOIN `SYSTEM_DEPARTMENT_USER` sdu ON sdu.USER_ID = usr.ID AND sdu.DELETED = 0
    LEFT JOIN `SYSTEM_DEPARTMENT` sd ON sd.ID = sdu.DEPARTMENT_ID AND sd.DELETED = 0
    FROM `system_user` usr
    LEFT JOIN `system_user` create_user ON create_user.ID = usr.CREATE_USER
    LEFT JOIN `system_user` update_user ON update_user.ID = usr.UPDATE_USER
    LEFT JOIN `system_position_user` spu ON spu.USER_ID = usr.ID AND spu.DELETED = 0
    LEFT JOIN `system_position` sp ON sp.ID = spu.POSITION_ID AND sp.DELETED = 0
    LEFT JOIN `system_department_user` sdu ON sdu.USER_ID = usr.ID AND sdu.DELETED = 0
    LEFT JOIN `system_department` sd ON sd.ID = sdu.DEPARTMENT_ID AND sd.DELETED = 0
    <where>
      usr.DELETED = 0
      <if test="dto.positionId != null">
server/dmmall_web/src/main/java/com/doumee/api/common/PublicController.java
@@ -7,11 +7,13 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.aliyun.ALiYunUtil;
import com.doumee.core.wx.WxMiniConfig;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -23,6 +25,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
@@ -98,17 +101,14 @@
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            Iterator<String> it = multipartRequest.getFileNames();
            while (it.hasNext()) {
                MultipartFile file = multipartRequest.getFile((String) it.next());// file
                // multipartRequest.getFile((String)
                // it.next());
                MultipartFile file = multipartRequest.getFile((String) it.next());
                if (file != null) {
                    // 1、上传到服务器临时文件夹
                    String uploadFileName = file.getOriginalFilename();
                    String originname = uploadFileName;
                    if (originname.lastIndexOf("/") >= 0) {
                        originname = originname.substring(originname.lastIndexOf("/") + 1);
                    }
                    String nfix = "";// åŽç¼€å
                    String nfix = "";
                    if (StringUtils.isNotBlank(uploadFileName)) {
                        nfix = uploadFileName.substring(uploadFileName.lastIndexOf("."));
                    }
@@ -122,14 +122,36 @@
                        context.put("message", "对不起,文件格式\".dll\"上传有误!");
                        return;
                    }
                    String nowDate = DateUtil.getNowShortDate();// å½“前时间(年月日)
                    if (isImageFile(nfix)) {
                        File tempFile = null;
                        try {
                            tempFile = File.createTempFile("wx_check_", nfix);
                            java.io.FileOutputStream fos = new java.io.FileOutputStream(tempFile);
                            fos.write(file.getBytes());
                            fos.close();
                            boolean isSafe = WxMiniConfig.wxMaService.getSecurityService().checkImage(tempFile);
                            if (!isSafe) {
                                context.put("code", 4001);
                                context.put("message", "图片内容不合规,请更换图片后重试");
                                writerJson(response, context);
                                return;
                            }
                        } catch (WxErrorException e) {
                            log.warn("微信图片安全检测失败: {}", e.getMessage());
                        } finally {
                            if (tempFile != null && tempFile.exists()) {
                                tempFile.delete();
                            }
                        }
                    }
                    String nowDate = DateUtil.getNowShortDate();
                    String fileName = UUID.randomUUID().toString() + nfix;
                    String tempFileName = nowDate + "/" + fileName;
                    String key = folder + tempFileName;// æ–‡ä»¶å
                    String key = folder + tempFileName;
                    ALiYunUtil obs = new ALiYunUtil(endpoint,access_id, access_key);
                    if (obs.uploadOnlineObject(file.getInputStream(),bucketName, key,null)) {
                        // ç§»åŠ¨æˆåŠŸ,返回文件名
                        // sendSuccessMessage(response, resourcePath+key);
                        context.put("success", true);
                        context.put("code", 200);
                        context.put("errno",0);
@@ -143,7 +165,6 @@
                        writerJson(response, context);
                        return;
                    } else {
                        // ç§»åŠ¨å¤±è´¥
                        context.put("code", 0);
                        context.put("message", "上传失败");
                        writerJson(response, context);
@@ -160,6 +181,16 @@
        return;
    }
    private boolean isImageFile(String suffix) {
        if (StringUtils.isBlank(suffix)) {
            return false;
        }
        String lowerSuffix = suffix.toLowerCase();
        return lowerSuffix.equals(".jpg") || lowerSuffix.equals(".jpeg")
            || lowerSuffix.equals(".png") || lowerSuffix.equals(".gif")
            || lowerSuffix.equals(".bmp") || lowerSuffix.equals(".webp");
    }
    public static void writerJson(HttpServletResponse response, Object object) {
        response.setContentType("application/json");
        writer(response, JSONObject.toJSONString(object));
server/dmmall_web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -20,6 +20,8 @@
import io.swagger.models.auth.In;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
@@ -49,7 +51,7 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "微信code", required = true)
    })
    public ApiResponse<AccountResponse> wxLogin(@RequestParam String code) {
    public ApiResponse<AccountResponse> wxLogin(@RequestParam String code) throws WxErrorException {
        return  ApiResponse.success(memberService.wxLogin(code));
    }
server/dmmall_web/src/main/java/com/doumee/api/web/CommentApi.java
@@ -13,10 +13,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.*;
/**
 * @author æ±Ÿè¹„蹄
@@ -36,6 +33,15 @@
    }
    @LoginRequired
    @ApiOperation("删除评论")
    @GetMapping("/delete/{id}")
    public ApiResponse deleteById(@PathVariable Integer id) {
        commentService.deleteById(id,getMemberId());
        return ApiResponse.success(null);
    }
    /**
     * åˆ†é¡µæ´»åŠ¨æŽ¢åº—è¯„è®ºæŸ¥è¯¢
     *
server/dmmall_web/src/main/java/com/doumee/api/web/SharesApi.java
@@ -59,6 +59,16 @@
        return  ApiResponse.success(inviteRecordService.createShareImg(Constants.ZERO,getMemberId(),null));
    }
    @LoginRequired
    @ApiOperation(value = "生成会员分享码", notes = "小程序端")
    @GetMapping("/getMemberShareCode")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getMemberShareCode() throws Exception {
        return ApiResponse.success(inviteRecordService.createMemberMiniProgramCode(getMemberId()));
    }
    @LoginShopRequired
    @ApiOperation(value = "商户生成邀请海报", notes = "小程序端")
server/dmmall_web/src/main/java/com/doumee/api/web/ShopApi.java
@@ -183,6 +183,17 @@
        return ApiResponse.success("操作成功");
    }
    @LoginShopRequired
    @ApiOperation("经销商 - ä¿®æ”¹å¯†ç ")
    @PostMapping("/updatePwd")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse updatePwd(@RequestBody ShopUpdatePwdDTO dto) {
        shopService.updatePwd(getShopId(), dto.getOldPassword(), dto.getNewPassword());
        return ApiResponse.success("修改成功");
    }
server/dmmall_web/src/main/java/com/doumee/api/web/UtilApi.java
@@ -71,6 +71,7 @@
    public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
        areasService.cacheData();
        return ApiResponse.success(areasService.findList(a));
    }
server/dmmall_web/src/main/resources/application.yml
@@ -1,6 +1,6 @@
# é¡¹ç›®ä¿¡æ¯é…ç½®
project:
  name: ç¦åˆ©å•†åŸŽ
  name: é¼Žå…ƒå†œæœº
  version: 1.0.0
  env: development
#  env: production