26个文件已修改
12个文件已添加
843 ■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/StoreMemberController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consumer/src/main/resources/apiclient_cert.p12 补丁 | 查看 | 原始文档 | blame | 历史
consumer/src/main/resources/apiclient_cert.pem 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consumer/src/main/resources/apiclient_key.pem 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreMember.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreMemberForm.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/CheckClerkMobileQuery.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreMemberQuery.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/WxKitchenVideoQuery.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/CheckClerkPermissionVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/StoreMemberMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/CustomerService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/StoreMemberService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreMemberServiceImpl.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/entity/vo/ClerkVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/service/ClerkService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/service/StoreRoleService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreRoleServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/CustomerMapper.xml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/StoreMemberMapper.xml 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/resources/apiclient_cert.p12 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/resources/apiclient_cert.pem 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/resources/apiclient_key.pem 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/java/cn/lili/controller/permission/ClerkStoreController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/java/cn/lili/controller/permission/StoreRoleController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/resources/apiclient_cert.p12 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/resources/apiclient_cert.pem 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/resources/apiclient_key.pem 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/StoreMemberController.java
@@ -2,13 +2,26 @@
import cn.lili.base.Result;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.validation.Phone;
import cn.lili.common.vo.ResultMessage;
import cn.lili.common.vo.SearchVO;
import cn.lili.group.Add;
import cn.lili.group.Update;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.CheckClerkMobileQuery;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.service.StoreMemberService;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.StoreDepartment;
import cn.lili.modules.member.entity.vo.StoreDepartmentVO;
import cn.lili.modules.member.service.ClerkService;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.member.service.StoreDepartmentService;
import cn.lili.modules.member.service.StoreRoleService;
import cn.lili.mybatis.util.PageUtil;
import org.springframework.validation.annotation.Validated;
import lombok.RequiredArgsConstructor;
import java.util.List;
@@ -33,6 +46,23 @@
    private final StoreMemberService storeMemberService;
    private final MemberService memberService;
    private final StoreRoleService storeRoleService;
    private final StoreDepartmentService storeDepartmentService;
    private final ClerkService clerkService;
    @GetMapping
    @RequestMapping("/getStoreRoleList")
    public Result getStoreRoleList(){
        return Result.ok().data(storeRoleService.getSelectList());
    }
    @PostMapping("/check")
    @ApiOperation(value = "检测手机号码有效性")
    public Result check(@RequestBody CheckClerkMobileQuery checkClerkMobileQuery) {
        System.out.println(checkClerkMobileQuery);
        return Result.ok().data(clerkService.checkClerk(checkClerkMobileQuery.getMemberId(),checkClerkMobileQuery.getMobile()));
    }
    @PostMapping
    @ApiOperation(value = "添加", notes = "添加")
@@ -44,6 +74,13 @@
    @ApiOperation(value = "重置密码", notes = "重置密码")
    public Result restPassword(@PathVariable String id){
        return memberService.resetPassword(id);
    }
    @GetMapping("/store/department")
    @ApiOperation(value = "获取树状结构")
    public Result getByPage(StoreDepartment entity, SearchVO searchVo) {
        entity.setStoreId(UserContext.getCurrentUser().getStoreId());
        return Result.ok().data(storeDepartmentService.tree(PageUtil.initWrapper(entity, searchVo)));
    }
    @PutMapping
@@ -70,6 +107,12 @@
        return storeMemberService.page(query);
    }
    @GetMapping("/checkPermission")
    @ApiOperation(value = "获得当前用户的店员权限", notes = "获得当前用户的店员权限")
    public Result checkDelAndUpdatePermission(){
        return storeMemberService.checkDelAndUpdatePermission();
    }
    @GetMapping("/{id}")
    @ApiOperation(value = "详情", notes = "详情")
    public Result detail(@PathVariable("id") String id) {
buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -5,9 +5,7 @@
import cn.lili.modules.lmk.domain.form.VideoFootPrintForm;
import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm;
import cn.lili.modules.lmk.domain.form.WxVideoForm;
import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
import cn.lili.modules.lmk.domain.query.HealthVideoQuery;
import cn.lili.modules.lmk.domain.query.WxHealthVideoQuery;
import cn.lili.modules.lmk.domain.query.*;
import org.springframework.validation.annotation.Validated;
import lombok.RequiredArgsConstructor;
import java.util.List;
@@ -16,7 +14,6 @@
import io.swagger.annotations.ApiOperation;
import cn.lili.modules.lmk.service.VideoService;
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.query.VideoQuery;
import org.springframework.web.bind.annotation.*;
/**
@@ -80,7 +77,17 @@
    public Result healthRecommendVideo(WxHealthVideoQuery query) {
        return videoService.healthRecommendVideo(query);
    }
    @GetMapping("/kitchen/type")
    @ApiOperation(value = "厨神视频类型列表", notes = "厨神视频类型列表")
    public Result kitchenTypeList() {
        return videoService.kitchenTypeList();
    }
    @GetMapping("/kitchen/recommend")
    @ApiOperation(value = "厨神视频推荐", notes = "厨神视频推荐")
    public Result kitchenRecommendVideo(WxKitchenVideoQuery query) {
        return videoService.kitchenRecommendVideo(query);
    }
    @GetMapping("/goods/detail/{videoId}")
    @ApiOperation(value = "视频商品查看", notes = "视频商品查看")
    public Result getGoodsDetail(@PathVariable("videoId") String videoId) {
consumer/src/main/resources/apiclient_cert.p12
Binary files differ
consumer/src/main/resources/apiclient_cert.pem
New file
@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIUQI+FRbtTLFAdR9seUI0sqtgzEHcwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjUwNDAxMDU0NDU0WhcNMzAwMzMxMDU0NDU0WjCBhDETMBEGA1UEAwwK
MTcxMjU3NzU5MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCfmt7HlnLPnvo7nm4rnrZDlhpzkuJrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMpJI0pxouUDKZGtpIytAnLQSZMgltCGEmfuuFaMRN0eqiPJHbo0
EUiRfJNUCBcFsf71iW5bSA2oxyPxh1oljalUDagBWng+3zaXBoFOHrWoswd0B9u1
GdTX/9LEBiLu3MqENckHxI/hx22HuK0vEg2VFroj+5IBIf+KnJoyAkfCH5e8Ea+t
FCHlsZa5GqC3iAIB+JTmdSHTRKVfjWHGfGLmhHZt/intLDstlKP8IRbtTR9CRXE3
Q5mVYURGzQ0VOe9zPGZE2CQ5Zd4ETOHwLRJy78nls4Eqn1D1UOZD88uSSi65MM86
msjnH1u3upH1yeTT1Gr4Zvjz8FTjzVAzjL8CAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQAf
BTOdG7IOxZGUujH83E0RULUcAFy/fIhwM15ZgI7dflCNO3n3Vlx3Q/NuHEKS70hH
kdmNCjusIMVDr8vixYwD3rQ6Dw5oi0DNWihLyj99JdqZlcxHSYsmuFXXWAzpvl1q
wwAqF1RrrBkoK8T1L3SzZsBRwJcjPZAtQmdaYyZ2wc0RN0LmJQ26Kr+AWTsQ/4NK
QC2dlIhRRCQzurBt4Y9s75iDnkckDZx82vJ2pCYAIgcPJRLTQ+06wRnMXajaEicN
lXknSrML7I4jM5zOHzuj7RkviFpTdXep1Tk+4E0pN6pXxLyR7uNJ0YuJqnqcdlTY
Di0KGtJMK0iUNMKQnFGA
-----END CERTIFICATE-----
consumer/src/main/resources/apiclient_key.pem
New file
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKSSNKcaLlAymR
raSMrQJy0EmTIJbQhhJn7rhWjETdHqojyR26NBFIkXyTVAgXBbH+9YluW0gNqMcj
8YdaJY2pVA2oAVp4Pt82lwaBTh61qLMHdAfbtRnU1//SxAYi7tzKhDXJB8SP4cdt
h7itLxINlRa6I/uSASH/ipyaMgJHwh+XvBGvrRQh5bGWuRqgt4gCAfiU5nUh00Sl
X41hxnxi5oR2bf4p7Sw7LZSj/CEW7U0fQkVxN0OZlWFERs0NFTnvczxmRNgkOWXe
BEzh8C0Scu/J5bOBKp9Q9VDmQ/PLkkouuTDPOprI5x9bt7qR9cnk09Rq+Gb48/BU
481QM4y/AgMBAAECggEAdJoeFp5USHA/OPL/4/siay43CvEBHif6WiCX74Ohelhf
uIsIcLnssIj0ZzRMCYFF7fJ5CrzhVsZQLB7gZ404EEAcMxi8no2XOy9pF4YBW7Nn
p0cx9Gp6/l6X31UROHe5m58EJeItYsbBnxhZ0rJMVLn4xMlTDQFMKLIsvRFQkS2F
ZHIFqklDP4kFMmpRlCdoLSTldYmFJ5AtepyXYimGA2dpYooDDhgR1FAudrybQFDh
A2h0iZTTmhABnbW3elL6PydjY4yszvM6I15a/eiynevXKVLyVYBHTV39XUOjJp6f
XpOW3nuxhkCK2xUfRgOgepxS+3/dauROtM4SQeo56QKBgQDsAoZwYRI0yeTYA0lo
m+QAwYGcbTaccKOghc6taIJi4xAOH5WloB6Uv+Wx3gn1DufOJt3yeF4/1+2W1oH6
9ZBZwNo98VqMg2oa4DxhX3Oa6v7VTqelFccGGZ+/Lim5bdMfcfapxlv8MB77OPJW
fCAA514hp2ydkkPprFtcPU1z9QKBgQDba1xyHpKmFuz7kju9OWLBq1x8v2GnOqW6
4ypfNob2ljYTK7BfldPupYF7VC4F6dZqqKlyJqe2rhgRWs49J772AHcGovEHaRsT
Pi63/EA3ASfi58MmuWI5Y/hFSnM6q14ZTnpD9ZKiInK8HFHjVCrCrfAE1G13/s+R
K+YpawTBYwKBgQCoqSlQWF69cObk5HxqkLWBQMiSdI4JgIm+5sELtdswNhq8LSAx
q9sO7JCG6ynsgklwTuBgLlsUfwhguk1LfoA5VBPjHn9aWXPTXxpnb+Ja/MM+xyYR
WR3RIzDBXIke5fhxyWzAaWxFLlKFsG2nFq98Vdw0asS5WtTDwpPLuFeInQKBgHHG
nv4x6jsjgikE7+Mz4YipUeEB4CI14AAjkTIj9SHiTBHuwpsd9vI1cgnAYckBMwTF
hm/BqY+pgKNnIbBGbtfi79VKIo+EKdz1joYq0CV1fPhE00W+NTerJe7QJyYR/E5F
ClM5AJsAH9x5FuE5IJ8oUGBAwq7JO1p8l/F8I9AfAoGBAMvLmGi36QRzv9VjQO1Z
S0yG9OjLqdexYl7ogZYW/ys1yZg9mYiFv1wjqkDhegiGM8QyNoUFq2d7cIFZtfz6
3wrcFn4JDW1l9VaB+IM2G4GEsgrZ4wLalKdCRR83KRvuTyjUKZYVvWNNrNzv0gp/
51l5UctJTdE2v4+9OTvpo8b2
-----END PRIVATE KEY-----
framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreMember.java
@@ -22,14 +22,8 @@
    /** 真实姓名 */
    private String realName;
    @TableField("role")
    /** 角色 */
    private String role;
    @TableField("member_id")
    /** 会员用户id */
    private String memberId;
    /** 商户id */
    @TableField("store_id")
    private String storeId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreMemberForm.java
@@ -12,6 +12,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * 用户权限管理(商家)表单
 *
@@ -33,11 +35,15 @@
    @ApiModelProperty("密码")
    private String password;
    @ApiModelProperty("是否是管理员")
    private Boolean isSuper;
    @NotBlank(message = "角色不能为空", groups = {Add.class, Update.class})
    @ApiModelProperty("角色Json字符串")
    private String role;
    private List<String> role;
    @ApiModelProperty("部门id")
    private String departmentId;
    public static StoreMember getEntityByForm(@NonNull StoreMemberForm form, StoreMember entity) {
        if(entity == null) {
framework/src/main/java/cn/lili/modules/lmk/domain/query/CheckClerkMobileQuery.java
New file
@@ -0,0 +1,17 @@
package cn.lili.modules.lmk.domain.query;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
 * 店员电话有效性检测参数
 *
 */
@Data
@ApiModel(value = "店员电话有效性检测参数", description = "店员电话有效性检测参数")
public class CheckClerkMobileQuery {
    private  String mobile;
    private  String memberId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreMemberQuery.java
@@ -14,9 +14,15 @@
@ApiModel(value = "LmkUserPermissions查询参数", description = "用户权限管理(商家)查询参数")
public class StoreMemberQuery extends AbsQuery {
    /** 真实姓名*/
    /** 真实姓名 */
    private String realName;
    /** 店铺id */
    private String storeId;
    /** 电话 */
    private String mobile;
    /** 部门id*/
    private String departmentId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/WxKitchenVideoQuery.java
New file
@@ -0,0 +1,28 @@
package cn.lili.modules.lmk.domain.query;
import cn.lili.base.AbsQuery;
import cn.lili.modules.lmk.enums.general.VideoTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * 微信小程序大健康查询参数
 *
 * @author wp
 * @since 2025-05-16
 */
@Data
@ApiModel(value = "微信小程序大健康查询参数", description = "微信小程序大健康查询参数")
public class WxKitchenVideoQuery extends AbsQuery {
    /**
     * @see VideoTypeEnum
     */
    @ApiModelProperty("视频类型:视频、大健康、神厨,默认不传查视频")
    private String videoType = VideoTypeEnum.COOK.getValue();
    @ApiModelProperty("厨神视频标签id")
    private String kitchenTypeId;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/CheckClerkPermissionVO.java
New file
@@ -0,0 +1,23 @@
package cn.lili.modules.lmk.domain.vo;
import lombok.Data;
/**
 * 店员权限响应对象
 */
@Data
public class CheckClerkPermissionVO {
    /**
     * 店员id
     */
    private String clerkId;
    /**
     * 是否是店主
     */
    private Boolean isShopkeeper;
    /**
     * 是否是超级管理员
     */
    private Boolean isSuper;
}
framework/src/main/java/cn/lili/modules/lmk/mapper/StoreMemberMapper.java
@@ -3,6 +3,7 @@
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.domain.vo.StoreMemberVO;
import cn.lili.modules.member.entity.dto.ClerkQueryDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -30,4 +31,6 @@
    */
    IPage getPage(IPage page, @Param("query") StoreMemberQuery query);
    IPage getClerkPage(IPage page, @Param("query") StoreMemberQuery query);
}
framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -48,6 +48,9 @@
    IPage recommendHealthVideo(IPage page, @Param("query") WxHealthVideoQuery query);
    IPage wxKitchenVideoQuery(IPage page, @Param("query") WxKitchenVideoQuery query);
    /**
     * 批量更新视频收藏数量
     *
framework/src/main/java/cn/lili/modules/lmk/service/CustomerService.java
@@ -34,7 +34,7 @@
     * @param id 会员id
     * @return 用户VO
     */
    MemberVO getMember(String id);
    Result getMember(String id);
    /**
framework/src/main/java/cn/lili/modules/lmk/service/StoreMemberService.java
@@ -5,6 +5,7 @@
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.member.entity.dto.ClerkQueryDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -64,4 +65,10 @@
     * @return
     */
    Result all();
    /**
     * 检查用户权限管理能发删除或修改用户
     * @return
     */
    Result checkDelAndUpdatePermission();
}
framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -126,6 +126,10 @@
    Result healthRecommendVideo(WxHealthVideoQuery query);
    Result kitchenTypeList();
    Result kitchenRecommendVideo(WxKitchenVideoQuery query);
    /**
     * 批量更新视频收藏数量
     *
framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerServiceImpl.java
@@ -11,6 +11,7 @@
import cn.lili.modules.member.entity.vo.MemberVO;
import cn.lili.modules.member.mapper.MemberMapper;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.utils.PageUtil;
@@ -28,7 +29,7 @@
public class CustomerServiceImpl extends ServiceImpl<MemberMapper, Member> implements CustomerService {
    private final CustomerMapper customerMapper;
    private final MemberService memberService;
    private final LmkStoreMapper storeMapper;
    @Override
@@ -41,7 +42,7 @@
    @Override
    public Result getMemberPageByWX(CustomerQuery customerQuery) {
        String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId();
        String storeId = UserContext.getCurrentUser().getStoreId();
        if ( storeId == null) {
            return Result.error("该账号没有注册店铺");
        }
@@ -51,8 +52,11 @@
    @Override
    public MemberVO getMember(String id) {
        return null;
    public Result getMember(String id) {
        MemberVO memberVO = memberService.getMember(id);
        //查询用户标签
//        memberVO.setCustomerTagList();
        return Result.ok().data(memberVO);
    }
    @Override
framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreMemberServiceImpl.java
@@ -4,18 +4,23 @@
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.lmk.domain.entity.StoreMember;
import cn.lili.modules.lmk.domain.form.StoreMemberForm;
import cn.lili.modules.lmk.domain.query.StoreMemberQuery;
import cn.lili.modules.lmk.domain.vo.CheckClerkPermissionVO;
import cn.lili.modules.lmk.domain.vo.StoreMemberVO;
import cn.lili.modules.lmk.mapper.StoreMemberMapper;
import cn.lili.modules.lmk.service.StoreMemberService;
import cn.lili.modules.member.entity.dos.Clerk;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
import cn.lili.modules.member.entity.dto.MemberAddDTO;
import cn.lili.modules.member.entity.dto.*;
import cn.lili.modules.member.entity.vo.ClerkVO;
import cn.lili.modules.member.service.ClerkService;
import cn.lili.modules.member.service.MemberService;
import cn.lili.utils.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@@ -24,6 +29,8 @@
import org.springframework.beans.BeanUtils;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@@ -40,6 +47,8 @@
    private final StoreMemberMapper storeMemberMapper;
    private final MemberService memberService;
    private final ClerkService clerkService;
    /**
     * 添加
     * @param form
@@ -47,29 +56,25 @@
     */
    @Override
    public Result add(StoreMemberForm form) {
        //插入到用户表中
        AuthUser currentUser = UserContext.getCurrentUser();
        String id = currentUser.getId();
//        String storeId = currentUser.getStoreId();
        String storeId = "12312323123";
        if (id == null || storeId == null) {
            return Result.error("当前登录账户未绑定商户或用户id获取异常");
       String storeId =UserContext.getCurrentUser().getStoreId();
        System.out.println(storeId);
//        storeId = "1376433565247471616"; //测试用
        if ( storeId == null){
            return null;
        }
        //插入会员表
        MemberAddDTO addDTO = new MemberAddDTO();
        addDTO.setMobile(form.getMobile());
        addDTO.setPassword(form.getPassword());
        addDTO.setUsername(form.getMobile());
        Member member = memberService.addMember(addDTO);
        ClerkAddDTO clerkAddDTO = new ClerkAddDTO();
        clerkAddDTO.setPassword(form.getPassword());
        clerkAddDTO.setRoles(form.getRole());
        clerkAddDTO.setUsername(form.getMobile());
        clerkAddDTO.setMobile(form.getMobile());
        clerkAddDTO.setDepartmentId(form.getDepartmentId());
        clerkAddDTO.setIsSuper(form.getIsSuper());
        Member member = clerkService.addClerkReturnMember(clerkAddDTO);
        //插入用户权限表
        //id插入问题
        StoreMember entity = StoreMemberForm.getEntityByForm(form, null);
        entity.setMemberId(member.getId());
        entity.setStoreId(storeId);
        baseMapper.insert(entity);
        return Result.ok("添加成功");
    }
@@ -81,16 +86,27 @@
     */
    @Override
    public Result update(StoreMemberForm form) {
        StoreMember entity = baseMapper.selectById(form.getId());
        ClerkEditDTO clerkEditDTO = new ClerkEditDTO();
        clerkEditDTO.setId(form.getId());
        clerkEditDTO.setRoles(form.getRole());
        clerkEditDTO.setDepartmentId(form.getDepartmentId());
        clerkEditDTO.setIsSuper(form.getIsSuper());
        Clerk clerk = clerkService.updateClerk(clerkEditDTO);
        StoreMember entity = new LambdaQueryChainWrapper<>(baseMapper)
                .eq(StoreMember::getMemberId,clerk.getMemberId())
                        .one();
        if (entity == null){
            //插入
            entity = new StoreMember();
            entity.setMemberId(clerk.getMemberId());
            entity.setRealName(form.getRealName());
            baseMapper.insert(entity);
        }else {
            //修改真实姓名
            entity.setRealName(form.getRealName());
        //TODO 是否需要判断密码新密码
        //会员修改密码,电话
        memberService.updateMemberPartProperties(entity.getMemberId(),form.getPassword(),form.getMobile());
        //修改真实姓名
        entity.setRealName(form.getRealName());
        entity.setRole(form.getRole());
        baseMapper.updateById(entity);
            baseMapper.updateById(entity);
        }
        return Result.ok("修改成功");
    }
@@ -112,11 +128,15 @@
     */
    @Override
    public Result removeById(String id) {
        StoreMember entity = baseMapper.selectById(id);
        memberService.removeById(entity.getMemberId());
        baseMapper.deleteById(id);
        //同时删除用户
        ClerkVO clerkVO =clerkService.get(id);
        List<String> ids = new ArrayList<>();
        ids.add(id);
        clerkService.deleteClerk(ids);
        baseMapper.delete(new LambdaQueryChainWrapper<>(baseMapper)
                .eq(StoreMember::getMemberId,clerkVO.getMemberId()));
        //同时删除用户
        // 用户角色
        return Result.ok("删除成功");
    }
@@ -128,15 +148,17 @@
     */
    @Override
    public Result page(StoreMemberQuery query) {
        AuthUser currentUser = UserContext.getCurrentUser();
//        String storeId = currentUser.getStoreId();
        String storeId = "12312323123";
        String storeId = UserContext.getCurrentUser().getStoreId();
        //TODO 不通过UserContext获得店铺id,通过会员id查询数据库里的商店id
//        String storeId = "1376433565247471616";
        if (storeId == null) {
            return Result.error("当前登录账户未绑定商户或用户id获取异常");
        }
        IPage<StoreMemberVO> page = PageUtil.getPage(query, StoreMemberVO.class);
        System.out.println(query.getPageNumber());
        IPage<ClerkVO> page = PageUtil.getPage(query, ClerkVO.class);
        query.setStoreId(storeId);
        baseMapper.getPage(page, query);
        baseMapper.getClerkPage(page, query);
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
@@ -147,11 +169,17 @@
     */
    @Override
    public Result detail(String id) {
        StoreMemberVO vo = baseMapper.getById(id);
        //密码是否需要解密
        ClerkVO clerkVO = clerkService.get(id);
        StoreMember storeMember = new LambdaQueryChainWrapper<>(baseMapper)
                .eq(StoreMember::getMemberId, clerkVO.getMemberId())
                .one();
        if (storeMember != null) {
            clerkVO.setRealName(storeMember.getRealName());
        }
        Assert.notNull(vo, "记录不存在");
        return Result.ok().data(vo);
        //密码是否需要解密
        Assert.notNull(clerkVO, "记录不存在");
        return Result.ok().data(clerkVO);
    }
    /**
@@ -166,4 +194,24 @@
                .collect(Collectors.toList());
        return Result.ok().data(vos);
    }
    // 获得当前账号的用户店员信息
    public ClerkVO getUserContextClerkInfo(){
        String id = UserContext.getCurrentUser().getId();
        Clerk clerk = clerkService.getClerkByMemberId(id);
        if (clerk == null){
            throw new RuntimeException("获取店员信息异常");
        }
        return clerkService.get(clerk.getId());
    }
    @Override
    public Result checkDelAndUpdatePermission() {
        ClerkVO clerkVO = getUserContextClerkInfo();
        CheckClerkPermissionVO permissionVO  = new CheckClerkPermissionVO();
        permissionVO.setClerkId(clerkVO.getId());
        permissionVO.setIsShopkeeper(clerkVO.getShopkeeper());
        permissionVO.setIsSuper(clerkVO.getIsSuper());
        return Result.ok().data(permissionVO);
    }
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -56,7 +56,7 @@
    private final VideoAccountService videoAccountService;
    private final KitchenVideoTypeRefService kitchenVideoTypeRefService;
    private final VideoGoodsService videoGoodsService;
    private final KitchenTypeService kitchenTypeService;
    /**
     * 添加
@@ -419,6 +419,25 @@
    }
    @Override
    public Result kitchenTypeList() {
        List<KitchenType> list = kitchenTypeService.list(Wrappers.<KitchenType>lambdaQuery().orderByAsc(KitchenType::getSortNum));
        return Result.ok().data(list);
    }
    @Override
    public Result kitchenRecommendVideo(WxKitchenVideoQuery query) {
        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
         baseMapper.wxKitchenVideoQuery(page, query);
         page.getRecords().forEach(v -> {
             if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                 v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                 v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
             }
         });
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateCollectNumBatch(List<CollectTypeNumVO> numList) {
        // 按500条数据进行拆分
framework/src/main/java/cn/lili/modules/member/entity/vo/ClerkVO.java
@@ -36,6 +36,8 @@
    @ApiModelProperty(value = "用户拥有的权限")
    private List<StoreMenu> menus;
    /** 真实姓名*/
    private String realName;
    public ClerkVO(Clerk clerk) {
        BeanUtil.copyProperties(clerk, this);
framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
@@ -100,6 +100,12 @@
    @ApiModelProperty(value = "客户标签列表")
    private List<CustomerTagVO> customerTagList;
    /**
     * 为null则不在黑名单内
     */
    @ApiModelProperty(value = "黑名单id")
    private String blackId;
    public MemberVO(Member member) {
        BeanUtil.copyProperties(member, this);
    }
framework/src/main/java/cn/lili/modules/member/service/ClerkService.java
@@ -1,6 +1,8 @@
package cn.lili.modules.member.service;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Clerk;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ClerkAddDTO;
@@ -23,6 +25,11 @@
 * @date 2021/12/28 7:42 下午
 */
public interface ClerkService extends IService<Clerk> {
    ResultMessage<Object> addClerk(ClerkAddDTO clerkAddDTO);
    Member addClerkReturnMember(ClerkAddDTO clerkAddDTO);
    /**
     * 店员查询
@@ -88,6 +95,14 @@
    Member checkClerk(String mobile);
    /**
     * 小程序端检测电话号码有效性
     * @param memberId
     * @param mobile
     * @return
     */
    Member checkClerk(String memberId, String mobile);
    /**
     * 店员状态操作
     *
     * @param id     店员id
framework/src/main/java/cn/lili/modules/member/service/StoreRoleService.java
@@ -14,6 +14,8 @@
 */
public interface StoreRoleService extends IService<StoreRole> {
    List<StoreRole> getSelectList();
    /**
     * 获取默认角色
     *
framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java
@@ -1,14 +1,16 @@
package cn.lili.modules.member.serviceimpl;
import lombok.extern.slf4j.Slf4j;
import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Clerk;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.StoreClerkRole;
@@ -16,6 +18,7 @@
import cn.lili.modules.member.entity.dto.ClerkAddDTO;
import cn.lili.modules.member.entity.dto.ClerkEditDTO;
import cn.lili.modules.member.entity.dto.ClerkQueryDTO;
import cn.lili.modules.member.entity.dto.MemberAddDTO;
import cn.lili.modules.member.entity.vo.ClerkVO;
import cn.lili.modules.member.mapper.ClerkMapper;
import cn.lili.modules.member.service.*;
@@ -43,6 +46,7 @@
 */
@Service
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements ClerkService {
    @Autowired
@@ -57,7 +61,100 @@
    private Cache cache;
    @Override
    public ResultMessage<Object> addClerk(ClerkAddDTO clerkAddDTO) {
        int rolesMaxSize = 10;
        try {
            //角色必选,并且最后设置10个
            if (clerkAddDTO.getRoles() != null && clerkAddDTO.getRoles().size() >= rolesMaxSize) {
                throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN);
            }
            //校验是否已经是会员
            Member member = memberService.findByMobile(clerkAddDTO.getMobile());
            if (member == null) {
                //添加会员
                MemberAddDTO memberAddDTO = new MemberAddDTO();
                memberAddDTO.setMobile(clerkAddDTO.getMobile());
                memberAddDTO.setPassword(clerkAddDTO.getPassword());
                memberAddDTO.setUsername(clerkAddDTO.getUsername());
                member = memberService.addMember(memberAddDTO);
            } else {
                //校验要添加的会员是否已经是店主
                if (Boolean.TRUE.equals(member.getHaveStore())) {
                    throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
                }
                //校验会员的有效性
                if (Boolean.FALSE.equals(member.getDisabled())) {
                    throw new ServiceException(ResultCode.USER_STATUS_ERROR);
                }
            }
            //添加店员
            clerkAddDTO.setMemberId(member.getId());
            clerkAddDTO.setShopkeeper(false);
            clerkAddDTO.setStoreId(UserContext.getCurrentUser().getStoreId());
            this.saveClerk(clerkAddDTO);
            //修改此会员拥有店铺
            List<String> ids = new ArrayList<>();
            ids.add(member.getId());
            memberService.updateHaveShop(true, UserContext.getCurrentUser().getStoreId(), ids);
        } catch (ServiceException se) {
            log.info(se.getMsg(), se);
            throw se;
        } catch (Exception e) {
            log.error("添加店员出错", e);
        }
        return ResultUtil.success();
    }
    @Override
    public Member addClerkReturnMember(ClerkAddDTO clerkAddDTO) {
        int rolesMaxSize = 10;
        Member member = null;
        try {
            //角色必选,并且最后设置10个
            if (clerkAddDTO.getRoles() != null && clerkAddDTO.getRoles().size() >= rolesMaxSize) {
                throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN);
            }
            //校验是否已经是会员
            member = memberService.findByMobile(clerkAddDTO.getMobile());
            if (member == null) {
                //添加会员
                MemberAddDTO memberAddDTO = new MemberAddDTO();
                memberAddDTO.setMobile(clerkAddDTO.getMobile());
                memberAddDTO.setPassword(clerkAddDTO.getPassword());
                memberAddDTO.setUsername(clerkAddDTO.getUsername());
                member = memberService.addMember(memberAddDTO);
            } else {
                //校验要添加的会员是否已经是店主
                if (Boolean.TRUE.equals(member.getHaveStore())) {
                    throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
                }
                //校验会员的有效性
                if (Boolean.FALSE.equals(member.getDisabled())) {
                    throw new ServiceException(ResultCode.USER_STATUS_ERROR);
                }
            }
            //添加店员
            clerkAddDTO.setMemberId(member.getId());
            clerkAddDTO.setShopkeeper(false);
            String storeId = UserContext.getCurrentUser().getStoreId();
//            storeId = "1376433565247471616"; //测试用
            clerkAddDTO.setStoreId(storeId);
            this.saveClerk(clerkAddDTO);
            //修改此会员拥有店铺
            List<String> ids = new ArrayList<>();
            ids.add(member.getId());
            memberService.updateHaveShop(true,storeId, ids);
        } catch (ServiceException se) {
            log.info(se.getMsg(), se);
            throw se;
        } catch (Exception e) {
            log.error("添加店员出错", e);
        }
        return member;
    }
    @Override
    public IPage<ClerkVO> clerkForPage(PageVO page, ClerkQueryDTO clerkQueryDTO) {
        QueryWrapper<ClerkVO> clerkVOQueryWrapper = new QueryWrapper<>();
        clerkVOQueryWrapper.eq("li_clerk.store_id", UserContext.getCurrentUser().getStoreId());
@@ -159,9 +256,10 @@
            if (Boolean.TRUE.equals(clerk.getShopkeeper())) {
                throw new ServiceException(ResultCode.CANT_EDIT_CLERK_SHOPKEEPER);
            }
            String storeId = UserContext.getCurrentUser().getStoreId();
//            storeId = "1376433565247471616";
            //校验当前店员是否是当前店铺的
            if (!clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
            if (!clerk.getStoreId().equals(storeId)) {
                throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
            }
            if (Boolean.TRUE.equals(clerkEditDTO.getIsSuper())) {
@@ -186,8 +284,11 @@
            //部门校验
            if (CharSequenceUtil.isNotEmpty(clerkEditDTO.getDepartmentId())) {
                System.out.println(clerkEditDTO.getDepartmentId());
                System.out.println(storeDepartmentService.getById(clerkEditDTO.getDepartmentId()));
                if (storeDepartmentService.getById(clerkEditDTO.getDepartmentId()) != null) {
                    clerk.setDepartmentId(clerkEditDTO.getDepartmentId());
                    System.out.println(clerk);
                } else {
                    throw new ServiceException(ResultCode.PERMISSION_NOT_FOUND_ERROR);
                }
@@ -226,6 +327,7 @@
        //角色校验
        if (clerkAddDTO.getRoles() != null && !clerkAddDTO.getRoles().isEmpty()) {
            List<StoreRole> storeRoles = storeRoleService.list(clerkAddDTO.getRoles());
            System.out.println(storeRoles);
            if (storeRoles.size() != clerkAddDTO.getRoles().size()) {
                throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
            }
@@ -277,7 +379,9 @@
    @Override
    public void deleteClerk(List<String> ids) {
        QueryWrapper<Clerk> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
        ;
//        String storeId = "1376433565247471616";
        queryWrapper.eq("store_id", UserContext.getCurrentUser().getId());
        queryWrapper.in("id", ids);
        List<Clerk> clerks = this.baseMapper.selectList(queryWrapper);
        if (!clerks.isEmpty()) {
@@ -291,6 +395,7 @@
            List<String> memberIds = new ArrayList<>();
            clerks.forEach(clerk -> {
                //无法删除当前登录的店员
                System.out.println(UserContext.getCurrentUser());
                if (UserContext.getCurrentUser().getClerkId().equals(clerk.getId())) {
                    throw new ServiceException(ResultCode.CLERK_CURRENT_SUPPER);
                }
@@ -331,6 +436,38 @@
    }
    @Override
    public Member checkClerk(String memberId, String mobile) {
        //校验是否已经是会员
        Member member = memberService.findByMobile(mobile);
        System.out.println(member);
        if (member != null) {
            // 是当前账号修改
            if (memberId !=null && memberId.equals(member.getId())) {
                return member;
            }
            //校验要添加的会员是否已经是店主
            if (Boolean.TRUE.equals(member.getHaveStore())) {
                throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
            }
            //校验会员的有效性
            if (Boolean.FALSE.equals(member.getDisabled())) {
                throw new ServiceException(ResultCode.USER_STATUS_ERROR);
            }
            //校验此会员是否已经是店员
            Clerk clerk = this.getClerkByMemberId(member.getId());
            if (clerk != null && !clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
                throw new ServiceException(ResultCode.CLERK_USER_ERROR);
            }
            if (clerk != null && clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
                throw new ServiceException(ResultCode.CLERK_ALREADY_EXIT_ERROR);
            }
            return member;
        }
        return new Member();
    }
    @Override
    public void disable(String id, Boolean status) {
        Clerk clerk = this.getById(id);
        if (clerk == null) {
framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreRoleServiceImpl.java
@@ -12,6 +12,7 @@
import cn.lili.modules.member.service.StoreDepartmentRoleService;
import cn.lili.modules.member.service.StoreMenuRoleService;
import cn.lili.modules.member.service.StoreRoleService;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +30,21 @@
@Service
@Transactional(rollbackFor = Exception.class)
public class StoreRoleServiceImpl extends ServiceImpl<StoreRoleMapper, StoreRole> implements StoreRoleService {
    @Override
    public List<StoreRole> getSelectList() {
        String storeId = UserContext.getCurrentUser().getStoreId();
//        System.out.println(UserContext.getCurrentUser().getId());
//        System.out.println(storeId);
//        String storeId = "1376433565247471616";
        if ( storeId == null) {
            return null;
        }
        StoreRole storeRole = new StoreRole();
        storeRole.setStoreId(storeId);
        return  this.list(PageUtil.initWrapper(storeRole));
    }
    /**
     * 部门角色
     */
@@ -109,7 +124,8 @@
    @Override
    public List<StoreRole> list(List<String> ids) {
        QueryWrapper<StoreRole> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
        String storeId = UserContext.getCurrentUser().getStoreId();
        queryWrapper.eq("store_id", storeId);
        queryWrapper.in("id", ids);
        return this.baseMapper.selectList(queryWrapper);
    }
framework/src/main/resources/mapper/lmk/CustomerMapper.xml
@@ -26,6 +26,7 @@
        <result property="gradeId" column="grade_id"/>
        <result property="experience" column="experience"/>
        <result property="createTime" column="create_time"/>
        <result property="blackId" column="blackId"/>
        <collection property="customerTagList"  ofType="cn.lili.modules.lmk.domain.vo.CustomerTagVO"
                    select="selectTagByMemberId"
                    column="id"
@@ -34,39 +35,36 @@
    <select id="getPage" resultMap="BaseResultMap">
        SELECT
            *
            LM.*
        FROM
            li_member lm
            li_member LM
        LEFT JOIN lmk_customer_black LMK ON LM.id = LMK.user_id and LMK.delete_flag = 0
        <where>
        <!-- 用户名模糊查询 -->
        <if test="query.username != null and query.username != ''">
            AND lm.username LIKE CONCAT('%', #{query.username}, '%')
            AND LM.username LIKE CONCAT('%', #{query.username}, '%')
        </if>
        <!-- 昵称模糊查询 -->
        <if test="query.nickName != null and query.nickName != ''">
            AND lm.nick_name LIKE CONCAT('%', #{query.nickName}, '%')
            AND LM.nick_name LIKE CONCAT('%', #{query.nickName}, '%')
        </if>
        <!-- 手机号码精确查询 -->
        <if test="query.mobile != null and query.mobile != ''">
            AND lm.mobile = #{query.mobile}
            AND LM.mobile = #{query.mobile}
        </if>
        <!-- 会员状态转 -->
        <if test="query.disabled != null and query.disabled != ''">
            AND lm.disabled = #{query.disabled}
            AND LM.disabled = #{query.disabled}
        </if>
        <!-- 商铺id -->
        <if test="query.storeId != null and query.storeId != ''">
            AND lm.store_id = #{query.storeId}
            AND LM.store_id = #{query.storeId}
        </if>
            AND EXISTS (
            SELECT 1
            FROM li_order lo
            WHERE lo.member_id = lm.id
            )
            AND LM.delete_flag = 0
        </where>
        ORDER BY lm.create_time DESC
    </select>
framework/src/main/resources/mapper/lmk/StoreMemberMapper.xml
@@ -24,8 +24,6 @@
        SELECT
            LSM.id,
            LSM.real_name,
            LSM.role,
            LSM.store_id,
            LSM.member_id,
            LM.mobile,
            LM.username
@@ -38,24 +36,49 @@
    </select>
    <select id="getPage" resultMap="BaseResultMap">
        SELECT
            LSM.id,
            LSM.real_name,
            LSM.role,
            LSM.store_id,
            LSM.member_id,
            LM.mobile,
            LM.username
        FROM lmk_store_member LSM
        LEFT JOIN li_member LM
        ON LM.id = LSM.member_id
        LM.id,
        LSM.real_name,
        LM.store_id,
        LM.mobile
        FROM li_member LM
        LEFT JOIN li_clerk LC
        ON LC.member_id = LM.id
        LEFT JOIN lmk_store_member LSM
        ON LSM.member_id =  LM.id
        where LSM.delete_flag = 0
        AND LM.delete_flag = 0
        AND LC.delete_flag = 0
        <if test="query.realName != null and query.realName != ''">
            AND LSM.real_name LIKE CONCAT('%', #{query.realName}, '%')
        </if>
        AND LSM.store_id = #{query.storeId}
        AND LM.store_id = #{query.storeId}
    </select>
    <select id="getClerkPage" resultType="cn.lili.modules.member.entity.vo.ClerkVO">
        SELECT
        LC.*,
        m.id,
        m.mobile as mobile,
        LSM.real_name as realName
        FROM
        li_clerk LC
        Inner JOIN li_member m ON LC.member_id = m.id
        LEFT JOIN lmk_store_member LSM ON LSM.member_id = m.id
        <where>
            LC.store_id = #{query.storeId}
            <if test="query.departmentId != null and query.departmentId != ''">
                AND LC.department_id = #{query.departmentId}
            </if>
            <if test="query.realName != null and query.realName != ''">
                AND LSM.real_name LIKE CONCAT('%', #{query.realName}, '%')
            </if>
            <if test="query.mobile != null and query.mobile != ''">
                AND m.mobile LIKE CONCAT('%', #{query.mobile}, '%')
            </if>
        </where>
    </select>
</mapper>
framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -263,6 +263,41 @@
        AND LV.video_content_type = 'video'
    </select>
    <select id="wxKitchenVideoQuery" resultMap="WxResultMap">
        SELECT
            LV.author_id,
            LV.cover_url,
            LV.video_fit,
            LV.video_duration,
            LV.video_file_key,
            LV.title,
            LV.goods_view_num,
            LV.goods_order_num,
            LV.recommend,
            LV.status,
            LV.play_num,
            LV.comment_num,
            LV.collect_num,
            LV.weight,
            LV.audit_pass_time,
            LV.update_time,
            LV.video_content_type,
            LV.video_type,
            LV.video_imgs,
            LV.id,
            LAU.nick_name AS authorName,
            LAU.avatar AS authorAvatar
        FROM
            lmk_video LV
            LEFT JOIN li_admin_user LAU ON LV.author_id = LAU.id
        <if test="query.kitchenTypeId !=null and query.kitchenTypeId !=''">
            JOIN (SELECT DISTINCT video_id FROM lmk_kitchen_video_type_ref WHERE kitchen_type_id = #{query.kitchenTypeId}) VT ON VT.video_id = LV.id
        </if>
        WHERE
            LV.delete_flag = 0 AND LV.status = '1' AND LV.video_type = #{query.videoType}
        AND LV.video_content_type = 'video'
    </select>
    <update id="updateCollectNumBatch">
        UPDATE lmk_video
manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
@@ -38,6 +38,11 @@
        return customerService.getStoreSelectOptions();
    }
    @ApiOperation(value = "获得客户详情")
    @GetMapping("/{id}")
    public Result getCustomerInfo(@PathVariable String id){
        return customerService.getMember(id);
    }
    @ApiOperation(value = "客户分页列表")
    @GetMapping
manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java
@@ -13,6 +13,7 @@
import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.modules.order.order.service.OrderPackageService;
import cn.lili.modules.order.order.service.OrderPriceService;
import cn.lili.modules.order.order.service.OrderService;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -48,6 +49,9 @@
     */
    @Autowired
    private OrderPriceService orderPriceService;
    @Autowired
    private OrderPackageService orderPackageService;
    @ApiOperation(value = "查询订单列表分页")
@@ -128,6 +132,10 @@
        return ResultUtil.data(orderService.getTraces(orderSn));
    }
    @GetMapping(value = "/getPackage/{orderSn}")
    public ResultMessage<Object> getPackage(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) {
        return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn));
    }
    @ApiOperation(value = "卖家订单备注")
    @PutMapping("/{orderSn}/sellerRemark")
    public ResultMessage<Object> sellerRemark(@PathVariable String orderSn, @RequestParam String sellerRemark) {
manager-api/src/main/resources/apiclient_cert.p12
Binary files differ
manager-api/src/main/resources/apiclient_cert.pem
New file
@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIUQI+FRbtTLFAdR9seUI0sqtgzEHcwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjUwNDAxMDU0NDU0WhcNMzAwMzMxMDU0NDU0WjCBhDETMBEGA1UEAwwK
MTcxMjU3NzU5MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCfmt7HlnLPnvo7nm4rnrZDlhpzkuJrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMpJI0pxouUDKZGtpIytAnLQSZMgltCGEmfuuFaMRN0eqiPJHbo0
EUiRfJNUCBcFsf71iW5bSA2oxyPxh1oljalUDagBWng+3zaXBoFOHrWoswd0B9u1
GdTX/9LEBiLu3MqENckHxI/hx22HuK0vEg2VFroj+5IBIf+KnJoyAkfCH5e8Ea+t
FCHlsZa5GqC3iAIB+JTmdSHTRKVfjWHGfGLmhHZt/intLDstlKP8IRbtTR9CRXE3
Q5mVYURGzQ0VOe9zPGZE2CQ5Zd4ETOHwLRJy78nls4Eqn1D1UOZD88uSSi65MM86
msjnH1u3upH1yeTT1Gr4Zvjz8FTjzVAzjL8CAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQAf
BTOdG7IOxZGUujH83E0RULUcAFy/fIhwM15ZgI7dflCNO3n3Vlx3Q/NuHEKS70hH
kdmNCjusIMVDr8vixYwD3rQ6Dw5oi0DNWihLyj99JdqZlcxHSYsmuFXXWAzpvl1q
wwAqF1RrrBkoK8T1L3SzZsBRwJcjPZAtQmdaYyZ2wc0RN0LmJQ26Kr+AWTsQ/4NK
QC2dlIhRRCQzurBt4Y9s75iDnkckDZx82vJ2pCYAIgcPJRLTQ+06wRnMXajaEicN
lXknSrML7I4jM5zOHzuj7RkviFpTdXep1Tk+4E0pN6pXxLyR7uNJ0YuJqnqcdlTY
Di0KGtJMK0iUNMKQnFGA
-----END CERTIFICATE-----
manager-api/src/main/resources/apiclient_key.pem
New file
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKSSNKcaLlAymR
raSMrQJy0EmTIJbQhhJn7rhWjETdHqojyR26NBFIkXyTVAgXBbH+9YluW0gNqMcj
8YdaJY2pVA2oAVp4Pt82lwaBTh61qLMHdAfbtRnU1//SxAYi7tzKhDXJB8SP4cdt
h7itLxINlRa6I/uSASH/ipyaMgJHwh+XvBGvrRQh5bGWuRqgt4gCAfiU5nUh00Sl
X41hxnxi5oR2bf4p7Sw7LZSj/CEW7U0fQkVxN0OZlWFERs0NFTnvczxmRNgkOWXe
BEzh8C0Scu/J5bOBKp9Q9VDmQ/PLkkouuTDPOprI5x9bt7qR9cnk09Rq+Gb48/BU
481QM4y/AgMBAAECggEAdJoeFp5USHA/OPL/4/siay43CvEBHif6WiCX74Ohelhf
uIsIcLnssIj0ZzRMCYFF7fJ5CrzhVsZQLB7gZ404EEAcMxi8no2XOy9pF4YBW7Nn
p0cx9Gp6/l6X31UROHe5m58EJeItYsbBnxhZ0rJMVLn4xMlTDQFMKLIsvRFQkS2F
ZHIFqklDP4kFMmpRlCdoLSTldYmFJ5AtepyXYimGA2dpYooDDhgR1FAudrybQFDh
A2h0iZTTmhABnbW3elL6PydjY4yszvM6I15a/eiynevXKVLyVYBHTV39XUOjJp6f
XpOW3nuxhkCK2xUfRgOgepxS+3/dauROtM4SQeo56QKBgQDsAoZwYRI0yeTYA0lo
m+QAwYGcbTaccKOghc6taIJi4xAOH5WloB6Uv+Wx3gn1DufOJt3yeF4/1+2W1oH6
9ZBZwNo98VqMg2oa4DxhX3Oa6v7VTqelFccGGZ+/Lim5bdMfcfapxlv8MB77OPJW
fCAA514hp2ydkkPprFtcPU1z9QKBgQDba1xyHpKmFuz7kju9OWLBq1x8v2GnOqW6
4ypfNob2ljYTK7BfldPupYF7VC4F6dZqqKlyJqe2rhgRWs49J772AHcGovEHaRsT
Pi63/EA3ASfi58MmuWI5Y/hFSnM6q14ZTnpD9ZKiInK8HFHjVCrCrfAE1G13/s+R
K+YpawTBYwKBgQCoqSlQWF69cObk5HxqkLWBQMiSdI4JgIm+5sELtdswNhq8LSAx
q9sO7JCG6ynsgklwTuBgLlsUfwhguk1LfoA5VBPjHn9aWXPTXxpnb+Ja/MM+xyYR
WR3RIzDBXIke5fhxyWzAaWxFLlKFsG2nFq98Vdw0asS5WtTDwpPLuFeInQKBgHHG
nv4x6jsjgikE7+Mz4YipUeEB4CI14AAjkTIj9SHiTBHuwpsd9vI1cgnAYckBMwTF
hm/BqY+pgKNnIbBGbtfi79VKIo+EKdz1joYq0CV1fPhE00W+NTerJe7QJyYR/E5F
ClM5AJsAH9x5FuE5IJ8oUGBAwq7JO1p8l/F8I9AfAoGBAMvLmGi36QRzv9VjQO1Z
S0yG9OjLqdexYl7ogZYW/ys1yZg9mYiFv1wjqkDhegiGM8QyNoUFq2d7cIFZtfz6
3wrcFn4JDW1l9VaB+IM2G4GEsgrZ4wLalKdCRR83KRvuTyjUKZYVvWNNrNzv0gp/
51l5UctJTdE2v4+9OTvpo8b2
-----END PRIVATE KEY-----
seller-api/src/main/java/cn/lili/controller/permission/ClerkStoreController.java
@@ -80,46 +80,7 @@
    @PostMapping
    @ApiOperation(value = "添加店员")
    public ResultMessage<Object> add(@Valid ClerkAddDTO clerkAddDTO) {
        int rolesMaxSize = 10;
        try {
            if (clerkAddDTO.getRoles() != null && clerkAddDTO.getRoles().size() >= rolesMaxSize) {
                throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN);
            }
            //校验是否已经是会员
            Member member = memberService.findByMobile(clerkAddDTO.getMobile());
            if (member == null) {
                //添加会员
                MemberAddDTO memberAddDTO = new MemberAddDTO();
                memberAddDTO.setMobile(clerkAddDTO.getMobile());
                memberAddDTO.setPassword(clerkAddDTO.getPassword());
                memberAddDTO.setUsername(clerkAddDTO.getUsername());
                member = memberService.addMember(memberAddDTO);
            } else {
                //校验要添加的会员是否已经是店主
                if (Boolean.TRUE.equals(member.getHaveStore())) {
                    throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
                }
                //校验会员的有效性
                if (Boolean.FALSE.equals(member.getDisabled())) {
                    throw new ServiceException(ResultCode.USER_STATUS_ERROR);
                }
            }
            //添加店员
            clerkAddDTO.setMemberId(member.getId());
            clerkAddDTO.setShopkeeper(false);
            clerkAddDTO.setStoreId(UserContext.getCurrentUser().getStoreId());
            clerkService.saveClerk(clerkAddDTO);
            //修改此会员拥有店铺
            List<String> ids = new ArrayList<>();
            ids.add(member.getId());
            memberService.updateHaveShop(true, UserContext.getCurrentUser().getStoreId(), ids);
        } catch (ServiceException se) {
            log.info(se.getMsg(), se);
            throw se;
        } catch (Exception e) {
            log.error("添加店员出错", e);
        }
        return ResultUtil.success();
        return clerkService.addClerk(clerkAddDTO);
    }
seller-api/src/main/java/cn/lili/controller/permission/StoreRoleController.java
@@ -46,6 +46,8 @@
        return ResultUtil.data(page);
    }
    @PutMapping("/{roleId}")
    @ApiOperation(value = "编辑店铺角色")
    public ResultMessage<StoreRole> edit(@PathVariable String roleId, StoreRole storeRole) {
seller-api/src/main/resources/apiclient_cert.p12
Binary files differ
seller-api/src/main/resources/apiclient_cert.pem
New file
@@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIUQI+FRbtTLFAdR9seUI0sqtgzEHcwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjUwNDAxMDU0NDU0WhcNMzAwMzMxMDU0NDU0WjCBhDETMBEGA1UEAwwK
MTcxMjU3NzU5MDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCfmt7HlnLPnvo7nm4rnrZDlhpzkuJrnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMpJI0pxouUDKZGtpIytAnLQSZMgltCGEmfuuFaMRN0eqiPJHbo0
EUiRfJNUCBcFsf71iW5bSA2oxyPxh1oljalUDagBWng+3zaXBoFOHrWoswd0B9u1
GdTX/9LEBiLu3MqENckHxI/hx22HuK0vEg2VFroj+5IBIf+KnJoyAkfCH5e8Ea+t
FCHlsZa5GqC3iAIB+JTmdSHTRKVfjWHGfGLmhHZt/intLDstlKP8IRbtTR9CRXE3
Q5mVYURGzQ0VOe9zPGZE2CQ5Zd4ETOHwLRJy78nls4Eqn1D1UOZD88uSSi65MM86
msjnH1u3upH1yeTT1Gr4Zvjz8FTjzVAzjL8CAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQAf
BTOdG7IOxZGUujH83E0RULUcAFy/fIhwM15ZgI7dflCNO3n3Vlx3Q/NuHEKS70hH
kdmNCjusIMVDr8vixYwD3rQ6Dw5oi0DNWihLyj99JdqZlcxHSYsmuFXXWAzpvl1q
wwAqF1RrrBkoK8T1L3SzZsBRwJcjPZAtQmdaYyZ2wc0RN0LmJQ26Kr+AWTsQ/4NK
QC2dlIhRRCQzurBt4Y9s75iDnkckDZx82vJ2pCYAIgcPJRLTQ+06wRnMXajaEicN
lXknSrML7I4jM5zOHzuj7RkviFpTdXep1Tk+4E0pN6pXxLyR7uNJ0YuJqnqcdlTY
Di0KGtJMK0iUNMKQnFGA
-----END CERTIFICATE-----
seller-api/src/main/resources/apiclient_key.pem
New file
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKSSNKcaLlAymR
raSMrQJy0EmTIJbQhhJn7rhWjETdHqojyR26NBFIkXyTVAgXBbH+9YluW0gNqMcj
8YdaJY2pVA2oAVp4Pt82lwaBTh61qLMHdAfbtRnU1//SxAYi7tzKhDXJB8SP4cdt
h7itLxINlRa6I/uSASH/ipyaMgJHwh+XvBGvrRQh5bGWuRqgt4gCAfiU5nUh00Sl
X41hxnxi5oR2bf4p7Sw7LZSj/CEW7U0fQkVxN0OZlWFERs0NFTnvczxmRNgkOWXe
BEzh8C0Scu/J5bOBKp9Q9VDmQ/PLkkouuTDPOprI5x9bt7qR9cnk09Rq+Gb48/BU
481QM4y/AgMBAAECggEAdJoeFp5USHA/OPL/4/siay43CvEBHif6WiCX74Ohelhf
uIsIcLnssIj0ZzRMCYFF7fJ5CrzhVsZQLB7gZ404EEAcMxi8no2XOy9pF4YBW7Nn
p0cx9Gp6/l6X31UROHe5m58EJeItYsbBnxhZ0rJMVLn4xMlTDQFMKLIsvRFQkS2F
ZHIFqklDP4kFMmpRlCdoLSTldYmFJ5AtepyXYimGA2dpYooDDhgR1FAudrybQFDh
A2h0iZTTmhABnbW3elL6PydjY4yszvM6I15a/eiynevXKVLyVYBHTV39XUOjJp6f
XpOW3nuxhkCK2xUfRgOgepxS+3/dauROtM4SQeo56QKBgQDsAoZwYRI0yeTYA0lo
m+QAwYGcbTaccKOghc6taIJi4xAOH5WloB6Uv+Wx3gn1DufOJt3yeF4/1+2W1oH6
9ZBZwNo98VqMg2oa4DxhX3Oa6v7VTqelFccGGZ+/Lim5bdMfcfapxlv8MB77OPJW
fCAA514hp2ydkkPprFtcPU1z9QKBgQDba1xyHpKmFuz7kju9OWLBq1x8v2GnOqW6
4ypfNob2ljYTK7BfldPupYF7VC4F6dZqqKlyJqe2rhgRWs49J772AHcGovEHaRsT
Pi63/EA3ASfi58MmuWI5Y/hFSnM6q14ZTnpD9ZKiInK8HFHjVCrCrfAE1G13/s+R
K+YpawTBYwKBgQCoqSlQWF69cObk5HxqkLWBQMiSdI4JgIm+5sELtdswNhq8LSAx
q9sO7JCG6ynsgklwTuBgLlsUfwhguk1LfoA5VBPjHn9aWXPTXxpnb+Ja/MM+xyYR
WR3RIzDBXIke5fhxyWzAaWxFLlKFsG2nFq98Vdw0asS5WtTDwpPLuFeInQKBgHHG
nv4x6jsjgikE7+Mz4YipUeEB4CI14AAjkTIj9SHiTBHuwpsd9vI1cgnAYckBMwTF
hm/BqY+pgKNnIbBGbtfi79VKIo+EKdz1joYq0CV1fPhE00W+NTerJe7QJyYR/E5F
ClM5AJsAH9x5FuE5IJ8oUGBAwq7JO1p8l/F8I9AfAoGBAMvLmGi36QRzv9VjQO1Z
S0yG9OjLqdexYl7ogZYW/ys1yZg9mYiFv1wjqkDhegiGM8QyNoUFq2d7cIFZtfz6
3wrcFn4JDW1l9VaB+IM2G4GEsgrZ4wLalKdCRR83KRvuTyjUKZYVvWNNrNzv0gp/
51l5UctJTdE2v4+9OTvpo8b2
-----END PRIVATE KEY-----