liukangdong
2024-07-24 0cd3a666af34e28eaf50ed1392b5d219a9d2b1cf
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/zbomyoujia
已修改22个文件
426 ■■■■■ 文件已修改
admin/src/components/business/OperaNewsDzWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaNewsWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTProductInfoResponse.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/CustomerLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerApi.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/package-lock.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/package.json 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/pages/promotion/index.js 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/pages/promotion/index.wxml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/pages/promotion/index.wxss 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/pages/store/staff.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/utils/request.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaNewsDzWindow.vue
@@ -20,7 +20,7 @@
        </el-radio-group>
      </el-form-item>
      <el-form-item label="列表图/视频"   prop="files" >
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="form.fileList" accept=".png,.jpg,.jpeg,.mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="form.fileList" accept=".png,.jpg,.jpeg,.mp4" folder="spokesman" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="跳转类型" prop="linkType" required>
        <el-radio-group v-model="form.linkType"  >
admin/src/components/business/OperaNewsWindow.vue
@@ -32,10 +32,10 @@
        </el-radio-group>
      </el-form-item>
      <el-form-item label="图集上传 (最多9张)"    v-if="form.fileType !=1">
        <upload width="100px" height="100px" :max-length="9" @dele="delFile" :list="fileImgList" accept=".png,.jpg,.jpeg" folder="news" @loading="loading = true" @success="fileResult($event)" />
        <upload width="100px" height="100px" :max-length="9" @dele="delFile" :list="fileImgList" accept=".png,.jpg,.jpeg" folder="spokesman" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="视频上传(单个)"    v-if="form.fileType === 1">
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="fileVideoList" accept=".mp4" folder="news" @loading="loading = true" @success="fileResult($event)" />
        <upload width="100px" height="100px" :max-length="1"   @dele="delFile" :list="fileVideoList" accept=".mp4" folder="spokesman" @loading="loading = true" @success="fileResult($event)" />
      </el-form-item>
      <el-form-item label="排序码(升序)" prop="sortnum">
        <el-input   v-model="form.sortnum"   type="number"  placeholder="请输入排序码" v-trim/>
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTProductInfoResponse.java
@@ -51,5 +51,6 @@
    private String type;
    private String video;
    private String intro;
    private Boolean isNew;
}
server/service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -60,6 +60,8 @@
    private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
    //过期时间(s) 86400L=1天 604800L=7天
    private static final long expire = 86400L;
    //redis过期时间
    private static final Integer redisExpire = 3;
    /**
     * 生成token,根据userId和默认过期时间
@@ -75,18 +77,10 @@
     * 生成token,根据userId和默认过期时间
     */
    public static String generateTokenForZb(Long userId,String userType,String userInfo,RedisTemplate<String,Object> redisTemplate) {
        Long expiredSeconds = getExpireSeconds();
        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
        return generateTokenZb(userId,userType,userInfo, expirationDate,redisTemplate);
    }
    public static String generateTokenZb(Long userId, String userType,String userInfo, Date expiredDate,RedisTemplate<String,Object> redisTemplate) {
        String tokenKey =  UUID.randomUUID() + "_" + userId;
        redisTemplate.opsForValue().set(userType + "_" +tokenKey,userInfo);
        redisTemplate.opsForValue().set(userType + "_" +tokenKey,userInfo,redisExpire,TimeUnit.HOURS);
        return tokenKey;
    }
    /**
     * 验证token是否失效
server/service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -101,6 +101,9 @@
            if(Objects.isNull(member)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            if(Objects.isNull(member.getOpenid())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已注销,请重新登录");
            }
            if(Constants.equalsInteger(member.getIsdeleted(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
            }
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -524,6 +524,11 @@
        return null;
    }
    public static String desensitizationPhone(String phone)  {
        return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }
    public enum VehiclePlateNoEnum {
        /**
server/service/src/main/java/com/doumee/dao/business/model/CustomerLog.java
@@ -153,6 +153,10 @@
    @ExcelColumn(name="姓名")
    private String name;
    @ApiModelProperty(value = "member用户名称",hidden = true)
    @TableField(exist = false)
    private String memberName;
    @ApiModelProperty(value = "openid")
    @TableField(exist = false)
    private String openid;
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java
@@ -15,6 +15,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -128,8 +129,10 @@
        MPJLambdaWrapper<CustomerLog> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(CustomerLog.class)
                .selectAs(Member::getName,CustomerLog::getMemberName)
                .leftJoin(Customer.class,Customer::getId,CustomerLog::getCostomerId)
                            .eq(CustomerLog::getIsdeleted, Constants.ZERO)
                .leftJoin(Member.class,Member::getId,Customer::getMemberId)
                .eq(Objects.nonNull(pageWrap.getModel().getType()),CustomerLog::getType, pageWrap.getModel().getType())
                .eq(Objects.nonNull(pageWrap.getModel().getMemberId()),Customer::getMemberId, pageWrap.getModel().getMemberId());
        if (pageWrap.getModel().getMemberId() != null) {
@@ -237,8 +240,11 @@
        for (CustomerLog customerLog:pageData.getRecords()) {
            if(Objects.nonNull(pageWrap.getModel().getIsHiddenPhone())&& Constants.equalsInteger(pageWrap.getModel().getIsHiddenPhone(),Constants.ZERO)){
                customerLog.setPhone(
                        customerLog.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")
                        Constants.desensitizationPhone(customerLog.getPhone())
                );
                if(Constants.equalsInteger(customerLog.getType(),Constants.TWO)&& StringUtils.isNotBlank(customerLog.getMemberName())){
                    customerLog.setName(customerLog.getMemberName());
                }
            }
        }
        return pageData;
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java
@@ -115,14 +115,7 @@
        param.setArticleId(articleId);
        param.setToken(ztBaseInfoResponse.getToken());
        param.setActionType(actionType);
        ZTBaseResponse ztBaseResponse =  zbomZhongTaiService.collectDo(param);
        if(Objects.isNull(ztBaseResponse)){
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"中台接口响应失败");
        }else{
            if(!ztBaseResponse.getSuccess()){
                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"中台请求信息异常:"+ztBaseResponse.getMsg());
            }
        }
        zbomZhongTaiService.collectDo(param);
    }
    @Override
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -278,7 +278,7 @@
//            String openId = code;
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId).isNotNull("phone"));
            Users users = new Users();
            if(StringUtils.isBlank(iamId)){
            if(StringUtils.isNotBlank(iamId)){
                users = usersMapper.selectOne(new QueryWrapper<Users>().lambda()
                        .eq(Users::getIamId,iamId)
                        .last("limit 1")
@@ -298,9 +298,7 @@
                    member.setAuthStatus(Constants.ZERO);
                }
                ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(member);
                if(Objects.isNull(ztUserGetTokenResponse)){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台服务调起失败!");
                }else{
                if(!Objects.isNull(ztUserGetTokenResponse)){
                    member.setToken(ztUserGetTokenResponse.getToken());
                }
                memberMapper.insert(member);
@@ -314,7 +312,7 @@
                this.saveCustomerUser(users,member.getId());
                member = this.getMemberInfo(member.getId());
            }
            String token = JwtTokenUtil.generateTokenForZb(users.getId(),ZTConstants.CUSTOMER, JSONObject.toJSON(member).toString(),redisTemplate);
            String token = JwtTokenUtil.generateTokenForZb(member.getId(),ZTConstants.CUSTOMER, JSONObject.toJSON(member).toString(),redisTemplate);
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setToken(token);
            accountResponse.setSessionKey(session.getSessionKey());
@@ -327,24 +325,23 @@
    }
    public void saveCustomerUser(Users users,Long memberId){
        if(!(Objects.nonNull(users)&&Objects.nonNull(memberId))){
            return;
        }
        if( customerUserMapper.selectCount(new QueryWrapper<CustomerUser>().lambda()
                        .eq(CustomerUser::getIsdeleted,Constants.ZERO)
                .eq(CustomerUser::getUserId,users.getId())
                .eq(CustomerUser::getMemberId,memberId)) <= Constants.ZERO ){
            CustomerUser customerUser = new CustomerUser();
            customerUser.setUserId(users.getId());
            customerUser.setCreateDate(new Date());
            customerUser.setMemberId(memberId);
            customerUser.setPhone(users.getPhone());
            customerUser.setIamUserId(users.getIamId());
            customerUser.setName(users.getName());
            customerUser.setUsername(users.getIamUsername());
            customerUser.setAddr(users.getShopAddress());
            customerUserMapper.insert(customerUser);
            //TODO 等待调起中台接口
        if(Objects.nonNull(users)&&Objects.nonNull(memberId)) {
            if (customerUserMapper.selectCount(new QueryWrapper<CustomerUser>().lambda()
                    .eq(CustomerUser::getIsdeleted, Constants.ZERO)
                    .eq(CustomerUser::getUserId, users.getId())
                    .eq(CustomerUser::getMemberId, memberId)) <= Constants.ZERO) {
                CustomerUser customerUser = new CustomerUser();
                customerUser.setUserId(users.getId());
                customerUser.setCreateDate(new Date());
                customerUser.setMemberId(memberId);
                customerUser.setPhone(users.getPhone());
                customerUser.setIamUserId(users.getIamId());
                customerUser.setName(users.getName());
                customerUser.setUsername(users.getIamUsername());
                customerUser.setAddr(users.getShopAddress());
                customerUserMapper.insert(customerUser);
                //TODO 等待调起中台接口
            }
        }
    }
@@ -527,10 +524,6 @@
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isBlank(member.getPhone())){
            redisTemplate.delete(token);
           return null;
        }
        //校验用户token信息
        MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,member.getId(),ZTConstants.CUSTOMER);
        //调起中台注销接口
@@ -542,9 +535,9 @@
                .set(Member::getOpenid,null)
                .set(Member::getPhone,null)
                .set(Member::getEditDate,new Date())
                .eq(Member::getId,member.getId())
                .eq(Member::getOpenid,member.getOpenid())
        );
        redisTemplate.delete(ZTConstants.CUSTOMER+"_"+ member.getId());
        redisTemplate.delete(token);
        return ztBaseRequst;
    }
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -189,6 +189,10 @@
        IPage<News> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<News> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if(Objects.isNull(pageWrap.getModel())){
            News news = new News();
            pageWrap.setModel(news);
        }
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,News::getEditor)
                .selectAll(News.class)
@@ -257,7 +261,6 @@
        PageData<News> pageData =  PageData.from(newsMapper.selectJoinPage(page, News.class,queryWrapper));
        if(pageData!=null && pageData.getRecords()!=null && pageData.getRecords().size()>0){
            List<Long> idList = new ArrayList<>();
            for(News model : pageData.getRecords()){
                idList.add(model.getId());
@@ -266,7 +269,6 @@
            for(News model : pageData.getRecords()){
                setFilelistById(model,files);
            }
        }
        return pageData;
    }
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -393,13 +393,13 @@
            if(!Constants.equalsInteger(users.getIsdeleted(),Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已删除");
            }
            if(!StringUtils.equals(users.getStatus(),Constants.ZERO+"")){
            if(!StringUtils.equals(users.getStatus(),Constants.ONE+"")){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已停用,请联系管理员");
            }
            users.setOpenid(openId);
            usersMapper.updateById(users);
            //创建token
            String token = JwtTokenUtil.generateTokenForZb(users.getId(),ZTConstants.BUSINESS,users.getId()+"",redisTemplate);
            String token = JwtTokenUtil.generateTokenForZb(users.getId(),ZTConstants.BUSINESS,JSONObject.toJSON(users).toString(),redisTemplate);
            accountResponse.setToken(token);
            getUsersDetail(users);
            accountResponse.setSessionKey(session.getSessionKey());
@@ -410,6 +410,7 @@
        }
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
    }
    @Override
    public AccountResponse getWxMiniPhoneLogin(WxPhoneRequest wxPhoneRequest){
@@ -424,12 +425,12 @@
            Users users = usersMapper.selectOne(new QueryWrapper<Users>().lambda()
                    .eq(Users::getPhone,phone).last("limit 1"));
            AccountResponse accountResponse = new AccountResponse();
            accountResponse.setPhone(phone);
            accountResponse.setPhone( Constants.desensitizationPhone(phone));
            if(Objects.isNull(users)){
                return accountResponse;
            }
            accountResponse.setUsers(users);
            String token = JwtTokenUtil.generateTokenForZb(users.getId(),ZTConstants.BUSINESS,users.getId()+"",redisTemplate);
            String token = JwtTokenUtil.generateTokenForZb(users.getId(),ZTConstants.BUSINESS,JSONObject.toJSON(users).toString(),redisTemplate);
            accountResponse.setToken(token);
            return accountResponse;
        } catch (Exception e) {
@@ -872,10 +873,6 @@
        if(Objects.isNull(users)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(StringUtils.isBlank(users.getOpenid())){
            redisTemplate.delete(token);
            return null;
        }
        //校验用户token信息
        MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,users.getId(), ZTConstants.BUSINESS);
        //调起中台注销接口
@@ -886,9 +883,9 @@
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getOpenid,null)
                .set(Users::getEditDate,new Date())
                .eq(Users::getId,users.getId())
                .eq(Users::getOpenid,users.getOpenid())
        );
        redisTemplate.delete(ZTConstants.BUSINESS+"_"+ users.getId());
        redisTemplate.delete(token);
        return ztBaseRequst;
    }
server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -5,6 +5,7 @@
import com.doumee.biz.zbom.model.zhongtai.*;
import com.doumee.biz.zbom.model.zhongtai.response.*;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.UserLoginRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
@@ -295,6 +296,7 @@
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "分类数据 - 中台", notes = "客户端小程序")
    @PostMapping("/getCatalogList")
@@ -303,13 +305,14 @@
    })
    public ApiResponse<List<ZTCatalogInfoResponse>> getCatalogList (@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        ztCatalogListRequest.setUserId(getMemberId()+"");
        ztCatalogListRequest.setUserType(ZTConstants.CUSTOMER);
        ztCatalogListRequest.setUserType(getUserType());
        List<ZTCatalogInfoResponse> ztCatalogInfoResponseList = getZhongTaiDataService.getCatalogList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztCatalogInfoResponseList);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "标签数据 - 中台", notes = "客户端小程序")
    @PostMapping("/getCataLogTagList")
@@ -318,13 +321,14 @@
    })
    public ApiResponse<List<ZTTagInfoResponse>> getCataLogTagList(@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        ztCatalogListRequest.setUserId(getMemberId()+"");
        ztCatalogListRequest.setUserType(ZTConstants.CUSTOMER);
        ztCatalogListRequest.setUserType(getUserType());
        List<ZTTagInfoResponse> ztTagInfoResponseList = getZhongTaiDataService.getCataLogTagList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztTagInfoResponseList);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "行为内容接口 - 中台", notes = "客户端小程序")
    @GetMapping("/actionDo")
@@ -334,10 +338,11 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "actionType", value = "行为类型:收藏:collect;取消收藏:collect_cancel;喜欢:like;取消喜欢:like_cancel;浏览:view;分享:share;下载:download", required = true),
    })
    public ApiResponse actionDo(@RequestParam String id,@RequestParam String actionType) {
        getZhongTaiDataService.actionDo(getMemberId(),ZTConstants.CUSTOMER,id,actionType);
        getZhongTaiDataService.actionDo(getMemberId(),getUserType(),id,actionType);
        return ApiResponse.success("操作成功");
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "定制服务列表", notes = "客户端小程序")
    @GetMapping("/getCustomizedNewsList")
@@ -348,6 +353,7 @@
        return ApiResponse.success("查询成功",newsService.getCustomizedNewsList(Constants.ONE,null,null));
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "定制服务详情", notes = "客户端小程序")
    @GetMapping("/getCustomizedNewsDetail")
@@ -359,6 +365,7 @@
        return ApiResponse.success("查询成功",newsService.getCustomizedNewsDetail(id));
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "保存推广咨询分享记录", notes = "客户端小程序")
    @GetMapping("/saveShareRecord")
@@ -379,7 +386,7 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTCusFavoritesInfoResponse>> getZhongTaiCusFavorite(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTCusFavoritesInfoResponse> ztBasePageResponse = getZhongTaiDataService.getZhongTaiCusFavorite(ztContentListRequest);
        return ApiResponse.success("获取成功",ztBasePageResponse);
    }
@@ -394,7 +401,7 @@
    })
    public ApiResponse<List<ZTCusCarouselImageResponse>> getZhongTaiCarouselImage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        List<ZTCusCarouselImageResponse> ztCusCarouselImageResponseList = getZhongTaiDataService.getZhongTaiCarouselImage(ztContentListRequest);
        return ApiResponse.success("获取成功",ztCusCarouselImageResponseList);
    }
@@ -409,12 +416,13 @@
    })
    public ApiResponse<ZTCusCarouselImageResponse> getZhongTaiCarouselImageDetail(@RequestBody ZTDataDetailRequest ztDataDetailRequest) {
        ztDataDetailRequest.setUserId(getMemberId()+"");
        ztDataDetailRequest.setUserType(ZTConstants.CUSTOMER);
        ztDataDetailRequest.setUserType(getUserType());
        ZTCusCarouselImageResponse ztCusCarouselImageResponse = getZhongTaiDataService.getZhongTaiCarouselImageDetail(ztDataDetailRequest);
        return ApiResponse.success("获取成功",ztCusCarouselImageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "咨询分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiProductNewsPage")
@@ -423,12 +431,13 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTProductNewsInfoResponse>> getZhongTaiProductNewsPage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTProductNewsInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiProductNewsPage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "产品分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiProductPage")
@@ -437,11 +446,12 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTProductInfoResponse>> getZhongTaiProductPage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTProductInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiProductPage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "实景分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiRealcasePage")
@@ -450,11 +460,12 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTRealcaseInfoResponse>> getZhongTaiRealcasePage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTRealcaseInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiRealcasePage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "视频分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiVideoPage")
@@ -463,11 +474,12 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTVideoInfoResponse>> getZhongTaiVideoPage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTVideoInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiVideoPage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "全屋案例分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiWholecasePage")
@@ -476,11 +488,12 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTCaseInfoResponse>> getZhongTaiWholecasePage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTCaseInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiWholecasePage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "志说装修分页列表 - 中台", notes = "客户端小程序")
    @PostMapping("/getZhongTaiZbDecoPage")
@@ -489,12 +502,13 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTZbDecoInfoResponse>> getZhongTaiZbDecoPage(@RequestBody ZTContentListRequest ztContentListRequest) {
        ztContentListRequest.setUserId(getMemberId()+"");
        ztContentListRequest.setUserType(ZTConstants.CUSTOMER);
        ztContentListRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTZbDecoInfoResponse>  ztBasePageResponse= getZhongTaiDataService.getZhongTaiZbDecoPage(ztContentListRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "全屋案例详情 - 中台", notes = "客户端小程序")
    @GetMapping("/getWholecaseInfo")
@@ -503,11 +517,12 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
    })
    public ApiResponse<ZTCaseInfoResponse> getWholecaseInfo(@RequestParam String id) {
        ZTCaseInfoResponse ztCaseInfoResponse= getZhongTaiDataService.getWholecaseInfo(id,ZTConstants.CUSTOMER,getMemberId());
        ZTCaseInfoResponse ztCaseInfoResponse= getZhongTaiDataService.getWholecaseInfo(id,getUserType(),getMemberId());
        return ApiResponse.success("查询成功",ztCaseInfoResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @GetMapping("/getProductNewsInfo")
    @ApiOperation(value = "产品资讯详情 - 中台", notes = "客户端小程序")
@@ -516,12 +531,13 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
    })
    public ApiResponse<ZTProductNewsInfoResponse> getProductNewsInfo(@RequestParam String id) {
        ZTProductNewsInfoResponse ztProductNewsInfoResponse= getZhongTaiDataService.getProductNewsInfo(id,ZTConstants.CUSTOMER,getMemberId());
        ZTProductNewsInfoResponse ztProductNewsInfoResponse= getZhongTaiDataService.getProductNewsInfo(id,getUserType(),getMemberId());
        return ApiResponse.success("查询成功",ztProductNewsInfoResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "实景案例 - 中台", notes = "客户端小程序")
    @GetMapping("/getRealcaseInfo")
@@ -530,12 +546,13 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
    })
    public ApiResponse<ZTRealcaseInfoResponse> getRealcaseInfo(@RequestParam String id) {
        ZTRealcaseInfoResponse ztRealcaseInfoResponse= getZhongTaiDataService.getRealcaseInfo(id,ZTConstants.CUSTOMER,getMemberId());
        ZTRealcaseInfoResponse ztRealcaseInfoResponse= getZhongTaiDataService.getRealcaseInfo(id,getUserType(),getMemberId());
        return ApiResponse.success("查询成功",ztRealcaseInfoResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "产品详情 - 中台", notes = "客户端小程序")
    @GetMapping("/getProductInfo")
@@ -544,11 +561,12 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
    })
    public ApiResponse<ZTProductInfoResponse> getProductInfo(@RequestParam String id) {
        ZTProductInfoResponse ztProductInfoResponse= getZhongTaiDataService.getProductInfo(id,ZTConstants.CUSTOMER,getMemberId());
        ZTProductInfoResponse ztProductInfoResponse= getZhongTaiDataService.getProductInfo(id,getUserType(),getMemberId());
        return ApiResponse.success("查询成功",ztProductInfoResponse);
    }
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "我的收藏/喜欢列表 - 中台", notes = "客户端小程序")
    @PostMapping("/collectLikePage")
@@ -557,7 +575,7 @@
    })
    public ApiResponse<ZTBasePageResponse<ZTCollectLikeInfoResponse>> collectLikePage(@RequestBody ZTCollectLikeRequest ztCollectLikeRequest) {
        ztCollectLikeRequest.setUserId(getMemberId()+"");
        ztCollectLikeRequest.setUserType(ZTConstants.CUSTOMER);
        ztCollectLikeRequest.setUserType(getUserType());
        ZTBasePageResponse<ZTCollectLikeInfoResponse>  ztBasePageResponse= getZhongTaiDataService.collectLikePage(ztCollectLikeRequest);
        return ApiResponse.success("查询成功",ztBasePageResponse);
    }
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java
@@ -65,9 +65,11 @@
    @UserLoginRequired
    @ApiOperation(value = "【B端小程序】每日上新数据")
    @GetMapping("/getDailyUpdates")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "fileType", value = "附件类型 0图片 1视频", required = false)
    })
    public ApiResponse<DailyUpdatesResponse> getDailyUpdates(Integer fileType) {
@@ -75,8 +77,12 @@
    }
    @UserLoginRequired
    @ApiOperation("【B端小程序】 推广咨询分页")
    @PostMapping("/newsPage")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<PageData<News>> newsPage (@RequestBody PageWrap<News> pageWrap) {
        return ApiResponse.success(newsService.findPage(pageWrap));
    }
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -110,7 +110,7 @@
    }
    @ApiOperation(value = "手机号快捷登录", notes = "客户端小程序")
    @ApiOperation(value = "手机号快捷登录", notes = "员工端小程序")
    @PostMapping("/getWxMiniPhoneLogin")
    public ApiResponse<AccountResponse> getWxMiniPhone(@Valid @RequestBody WxPhoneRequest wxPhoneRequest) {
        return  ApiResponse.success("获取成功",usersService.getWxMiniPhoneLogin(wxPhoneRequest));
@@ -199,30 +199,6 @@
        crmCustomerListRequest.setUserId(getUserId());
        return  ApiResponse.success(getCrmDataService.getCrmCustomerList(crmCustomerListRequest));
    }
    @UserLoginRequired
    @ApiOperation(value = "分类数据 - 中台", notes = "员工端小程序")
    @PostMapping("/getCatalogList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<ZTCatalogInfoResponse>> getCatalogList (@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        List<ZTCatalogInfoResponse> ztCatalogInfoResponseList = getZhongTaiDataService.getCatalogList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztCatalogInfoResponseList);
    }
    @UserLoginRequired
    @ApiOperation(value = "标签数据 - 中台", notes = "员工端小程序")
    @PostMapping("/getCataLogTagList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<ZTTagInfoResponse>> getCataLogTagList(@RequestBody ZTCatalogListRequest ztCatalogListRequest ) {
        List<ZTTagInfoResponse> ztTagInfoResponseList = getZhongTaiDataService.getCataLogTagList(ztCatalogListRequest);
        return ApiResponse.success("查询成功",ztTagInfoResponseList);
    }
    @UserLoginRequired
    @ApiOperation(value = "用户注销", notes = "员工端小程序")
wechat_staff/package-lock.json
@@ -21,6 +21,16 @@
      "requires": {
        "jsbn": "^1.1.0"
      }
    },
    "moment": {
      "version": "2.30.1",
      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
    },
    "mp-html": {
      "version": "2.5.0",
      "resolved": "https://registry.npmmirror.com/mp-html/-/mp-html-2.5.0.tgz",
      "integrity": "sha512-uvBH5tIaDIlj8qaxsvNXU3RKX0jvXOo3J6FAi/notUv/ds6j79UUTE82aDkxxUk0eLUU0CiCqMrR7WWnytk30Q=="
    }
  }
}
wechat_staff/package.json
@@ -4,7 +4,9 @@
  "main": ".eslintrc.js",
  "dependencies": {
    "@vant/weapp": "^1.11.6",
    "miniprogram-sm-crypto": "^0.3.13"
    "miniprogram-sm-crypto": "^0.3.13",
    "moment": "^2.30.1",
    "mp-html": "^2.5.0"
  },
  "devDependencies": {},
  "scripts": {
wechat_staff/pages/promotion/index.js
@@ -1,4 +1,5 @@
import { newsPage } from '../../api/index'
import moment from "moment";
Page({
  /**
@@ -6,7 +7,7 @@
   */
  data: {
    capacity: 10,
    page: 0,
    page: 1,
    list: [],
    total: 0,
  },
@@ -15,10 +16,22 @@
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getList()
  },
  getList() {
    newsPage()
    newsPage({capacity:this.data.capacity,
      page:this.data.page,
      model:{type:0}})
      .then(res =>{
        if(this.data.page == res.data.page){
          res.data.records.forEach(element => {
            element.createDate = moment(element.createDate).format("yyyy/MM/DD")
          })
          this.setData({list: [...this.data.list, ...res.data.records || []],
            total:res.data.total})
        }
        console.log(this.data)
    })
  },
  onReady() {
@@ -30,7 +43,126 @@
  onShow() {
  },
  onReachBottom() {
    console.log('触底事件');
    const { total, list, page } = this.data
    if(total > list.length){
      this.setData({ page: page + 1 })
      this.getList()
    }else{
      wx.showToast({
        title: '暂无更多数据',
        icon: 'none'
      })
    }
  },
  downfile(e){
    const item =  e.currentTarget.dataset.index;
    const files = []
    if(item.fileType ==1 && item.fileList && item.fileList.length && item.fileList[0].fileurlFull  ){
      files.push(item.fileList[0].fileurlFull)
    }
    if(item.fileType !=1 && item.fileList && item.fileList.length  ){
      item.fileList.forEach(ee => {
         if(ee.fileurlFull){
           files.push(ee.fileurlFull)
         }
      })
    }
    if(item.fileType ==1){
      this.downloadVideoFileDo(files,item.title)
    }else{
      this.downloadImageFileDo(files,item.title)
    }
  },
  downloadImageFileDo(files,title){
    wx.showLoading({
      title: '正在下载',
    })
   let temp = 0;
    if(files.length){
      for(let i = 0;i<files.length;i++){
        let filePath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf()+i + '.jpg'  ;
        wx.downloadFile({
          url: files[i],
          filePath: filePath,
          timeout:180000,
          success: function (res) {
            var tempFp = res.filePath
            wx.saveImageToPhotosAlbum({
              filePath: tempFp,
              success(result) {
                temp ++;
                console.log(result)
                if(temp == files.length){
                    wx.hideLoading();
                    wx.setClipboardData({
                      data:  title,
                      success: function (res) {
                        wx.getClipboardData({
                          success: function (res) {
                            wx.showToast({
                              title: '文案已复制成功,去分享吧'
                            })
                          }
                        })
                      }
                  })
                }
              }, fail(err) {
                wx.showToast({
                  title: '图片下载失败哦'
                })
              }
            })
          } , fail(err) {
            wx.showToast({
              title: '图片下载失败哦'
            })
          }
        })
      }
    }
  },
  downloadVideoFileDo(files,title){
    wx.showLoading({
      title: '正在下载',
    })
    if(files.length){
      let filePath = wx.env.USER_DATA_PATH + '/' + new Date().valueOf() + '0.mp4';
      wx.downloadFile({
        url: files[0],
        filePath: filePath,
        timeout:180000,
        success: function (res) {
          var tempFp = res.filePath
          wx.saveVideoToPhotosAlbum({
            filePath: tempFp,
            success(result) {
              console.log(result)
                  wx.hideLoading();
                  wx.setClipboardData({
                    data:  title,
                    success: function (res) {
                      wx.getClipboardData({
                        success: function (res) {
                          wx.showToast({
                            title: '文案已复制成功,去分享吧'
                          })
                        }
                      })
                    }
                })
            }, fail(err) {
              wx.showToast({
                title: '视频下载失败哦'
              })
            }
          })
        }
      })
    }
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
@@ -51,14 +183,7 @@
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
wechat_staff/pages/promotion/index.wxml
@@ -1,28 +1,23 @@
<view class="container">
  <view class="home_title">推广发布</view>
  <view class="content">
    <view class="time">2022/22/22</view>
    <view class="text">懂生活,会设计,意式简约单人沙发椅,为您创造多种可能的生活方式</view>
    <view class="imgs">
      <view class="img_wrap">
        <image class="img" mode="widthFix" src=""></image>
        <!-- <image class="icon" src="../../static/ic_top1@2x.png" mode="widthFix"></image> -->
  <view>
    <view class="content"  data-id="{{ item.id }}"  wx:for="{{ list }}"   wx:for-item="item" >
      <view class="time" >{{ item.createDate }}</view>
      <view class="text">{{item.title }}</view>
      <view class="imgs">
          <video controls wx:if="{{item.fileType ==1 && item.fileList &&item.fileList.length}}"  src="{{item.fileList[0].fileurlFull}}" class="video"></video>
        <view wx:if="{{item.fileType !=1 && item.fileList}}"  data-id="{{ item.id }}"  wx:for-item="item1"   wx:for="{{ item.fileList }}" class="img_wrap">
          <image class="img" mode="widthFix" src="{{item1.fileurlFull}}"></image>
        </view>
      </view>
      <view class="img_wrap">
        <image class="img" mode="widthFix" src=""></image>
        <!-- <image class="icon" src="../../static/ic_top2@2x.png" mode="widthFix"></image> -->
      <view class="footer">
        <view class="left">
          <image class="icon" src="../../static/icon/detail_nav_share.png" mode="widthFix"></image>
          <text>{{item.donwloadNum}}</text>
        </view>
        <view class="btn" bind:tap="downfile" data-index="{{item}}">立即分享</view>
      </view>
      <view class="img_wrap">
        <image class="img" mode="widthFix" src=""></image>
        <!-- <image class="icon" src="../../static/ic_top3@2x.png" mode="widthFix"></image> -->
      </view>
    </view>
    <view class="footer">
      <view class="left">
        <image class="icon" src="../../static/icon/detail_nav_share.png" mode="widthFix"></image>
        <text>123123</text>
      </view>
      <view class="btn">立即分享</view>
    </view>
  </view>
</view>
wechat_staff/pages/promotion/index.wxss
@@ -13,6 +13,7 @@
  background: #F7F7F7;
  border-radius: 8rpx;
  padding: 34rpx 40rpx 40rpx;
  margin-bottom: 40rpx;
}
.content .time {
  font-weight: 500;
@@ -30,6 +31,8 @@
}
.content .imgs {
  display: flex;
  width: 100%;
  flex-wrap: wrap;
}
.content .imgs .img_wrap {
  width: 184rpx;
@@ -38,13 +41,18 @@
  border: 1px solid;
  position: relative;
  margin-right: 20rpx;
  margin-bottom: 20rpx;
}
.content .imgs .img_wrap:nth-of-type(3n) {
  margin-right: 0;
}
.content .imgs .img_wrap .img {
  width: 100%;
  height: 100%;
  max-height: 100%;
}
.content .imgs   .video {
  width: 100%;
  max-height: 100%;
}
.content .imgs .img_wrap .icon {
  position: absolute;
wechat_staff/pages/store/staff.js
@@ -59,12 +59,7 @@
            })
          }
        })
        // wx.saveFile({
        //   tempFilePath: res.tempFilePath,
        //   success: function (res) {
        //     console.log(res.savedFilePath)
        //   }
        // })
      }
    })
  },
wechat_staff/utils/request.js
@@ -1,5 +1,4 @@
import { baseUrl } from "./config"
import { baseUrl } from "./config"
export function request(options){
  let loading = options.loading || '1' // 默认值1显示,否则不显示
  if(loading == '1'){