liukangdong
2024-07-25 b6d5c43b9dd39066a949c0dcdc944d4c17351256
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/zbomyoujia
已添加1个文件
已修改22个文件
460 ■■■■ 文件已修改
admin/.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package-lock.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaShopWindow.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentListRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTImageListResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/News.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/web/reqeust/EditShopDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/web/reqeust/GenerateQRCodeRequest.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/GetZhongTaiDataService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/UsersService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/GetCrmDataServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerApi.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wechat_staff/pages/userinfo/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -1,3 +1,3 @@
# å¼€å‘环境配置
NODE_ENV = 'development'
VUE_APP_BASE_API = 'http://localhost:10028'
VUE_APP_BASE_API = 'http://192.168.0.135:10028'
admin/package-lock.json
@@ -13900,6 +13900,11 @@
        "clipboard": "^2.0.4"
      }
    },
    "vue-jsonp": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/vue-jsonp/-/vue-jsonp-2.0.0.tgz",
      "integrity": "sha512-Mzd9GNeuKP5hHFDWZNMWOsCuMILSkA6jo2l4A02wheFz3qqBzH7aSEFTey1BRCZCLizlaf1EqJ5YUtF392KspA=="
    },
    "vue-loader": {
      "version": "15.9.7",
      "resolved": "https://registry.nlark.com/vue-loader/download/vue-loader-15.9.7.tgz",
admin/package.json
@@ -25,6 +25,7 @@
    "vue": "^2.6.11",
    "vue-clipboard2": "^0.3.1",
    "vue-json-viewer": "^2.2.22",
    "vue-jsonp": "^2.0.0",
    "vue-router": "^3.5.1",
    "vuescroll": "^4.17.3",
    "vuex": "^3.4.0",
admin/public/index.html
@@ -5,7 +5,7 @@
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>faviconzb.ico">
      <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=HIDBZ-2QXL4-TAWUD-XET6Q-EKTJE-CCBSQ"></script>
      <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&libraries=service&key=HIDBZ-2QXL4-TAWUD-XET6Q-EKTJE-CCBSQ"></script>
<!--      <script type="text/javascript" src="https://mapapi.qq.com/web/mapComponents/geoLocation/v/geolocation.min.js"></script>
      <script type="text/javascript" src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key=HIDBZ-2QXL4-TAWUD-XET6Q-EKTJE-CCBSQ"></script>
      <script type="text/javascript" src="https://map.qq.com/api/gljs?v=1.exp&key=HIDBZ-2QXL4-TAWUD-XET6Q-EKTJE-CCBSQ"></script>-->
admin/src/components/business/OperaShopWindow.vue
@@ -63,6 +63,8 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { jsonp } from 'vue-jsonp'
export default {
  name: 'OperaShopWindow',
  extends: BaseOpera,
@@ -71,8 +73,8 @@
    return {
      geocoder: null,
      map: [],
      searchValue:'',
      marker:null,
      searchValue: '',
      marker: null,
      // è¡¨å•数据
      provinces: [],
      cities: [],
@@ -108,9 +110,22 @@
    })
  },
  methods: {
    searchAddress( ){
      if(this.geocoder && this.searchValue){
        this.geocoder.getLocation(this.searchValue)
    searchAddress () {
      if (  this.searchValue) {
       var that = this
        jsonp('https://apis.map.qq.com/ws/geocoder/v1/', {
          address: this.searchValue,
          key: 'HIDBZ-2QXL4-TAWUD-XET6Q-EKTJE-CCBSQ',
          output: 'jsonp'
        }).then(result => {
          console.log(result)
          if(result.result.location){
            that.changePostion(result.result.location.lng, result.result.location.lat)
          }
        }).catch(error => {
          // è¯·æ±‚失败处理
          console.log(error)
        })
      }
    },
    initMap (lat, long) {
@@ -120,20 +135,20 @@
        center: center,
        zoom: 17
      })
      this.changePostion(long,lat)
      this.changePostion(long, lat)
      qq.maps.event.addListener(this.map, 'click',
        function (event) {
          that.changePostion(event.latLng.lng, event.latLng.lat)
        }
      )
      this.geocoder = new qq.maps.Geocoder()
     /* this.geocoder = new qq.maps.Geocoder()
      this.geocoder.setComplete(function (result) {
        that.changePostion(result.detail.location.lng,result.detail.location.lat)
        that.changePostion(result.detail.location.lng, result.detail.location.lat)
      })
      // è‹¥æœåŠ¡è¯·æ±‚å¤±è´¥ï¼Œåˆ™è¿è¡Œä»¥ä¸‹å‡½æ•°
      this.geocoder.setError(function () {
        console.log('逆解析失败')
      })
      this.geocoder.setError(function (e) {
        console.log(that.searchValue + '=====逆解析失败')
      })*/
    },
    open (title, target) {
      this.title = title
@@ -157,7 +172,7 @@
        const mapContainer = this.$refs.mapContainer // èŽ·å–åœ°å›¾å®¹å™¨
        if (mapContainer) {
          // åˆå§‹åŒ–地图之前检查容器是否存在
          this.initMap(this.form.latitude,this.form.longitude)
          this.initMap(this.form.latitude, this.form.longitude)
          // åˆå§‹åŒ–腾讯地图
        }
      })
@@ -167,12 +182,12 @@
        .then(res => {
          this.provinces = res
        })
      if(this.form.provinceCode){
        this.selectProvince(this.form.provinceCode,true)
      if (this.form.provinceCode) {
        this.selectProvince(this.form.provinceCode, true)
      }
    },
    // é€‰æ‹©çœä»½
    selectProvince (val,isInit) {
    selectProvince (val, isInit) {
      this.provinces.forEach(item => {
        if (item.id == val) {
          this.form.provinceName = item.name
@@ -180,36 +195,36 @@
      })
      this.cities = []
      this.areas = []
      if(!isInit){
      if (!isInit) {
        this.form.cityName = ''
        this.form.areaCode = ''
        this.form.cityCode = ''
        this.form.areaName = ''
      }
      if(!val || val ==''){
      if (!val || val == '') {
        return
      }
      this.api.areaList({ pid: val })
        .then(res => {
          this.cities = res
          if(isInit){
            this.selectCity(this.form.cityCode,isInit)
          if (isInit) {
            this.selectCity(this.form.cityCode, isInit)
          }
        })
    },
    // é€‰æ‹©åŸŽå¸‚
    selectCity (val,isInit) {
    selectCity (val, isInit) {
      this.cities.forEach(item => {
        if (item.id == val) {
          this.form.cityName = item.name
        }
      })
      this.areas = []
      if(!isInit){
      if (!isInit) {
        this.form.areaCode = ''
        this.form.areaName = ''
      }
      if(!val || val ==''){
      if (!val || val == '') {
        return
      }
      this.api.areaList({ pid: val })
@@ -224,24 +239,24 @@
        }
      })
    },
    changeMapCenter(){
       this.searchValue = (this.form.provinceName||'')+(this.form.cityName||'')+(this.form.areaName||'')+(this.form.address||'')
    changeMapCenter () {
      this.searchValue = (this.form.provinceName || '') + (this.form.cityName || '') + (this.form.areaName || '') + (this.form.address || '')
      this.searchAddress()
    },
    changePostion (lng, lat) {
      if (lng || lat) {
        this.form.longitude = lng
        this.form.latitude = lat
        if(this.map){
          if(this.marker){
        if (this.map) {
          if (this.marker) {
            this.marker.setMap(null)
          }
          var pos =new qq.maps.LatLng(lat,lng);
          var pos = new qq.maps.LatLng(lat, lng)
          this.map.setCenter(pos)
          this.marker= new qq.maps.Marker({
          this.marker = new qq.maps.Marker({
            position: pos,
            animation:qq.maps.MarkerAnimation.DROP,
            map:this.map
            animation: qq.maps.MarkerAnimation.DROP,
            map: this.map
          })
        }
      }
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentListRequest.java
@@ -29,7 +29,7 @@
//    @ApiModelProperty(value = "标签")
//    private String tagCodes;
    @ApiModelProperty(value = "排序方式 NORMAL - é»˜è®¤ï¼›HOT - æœ€çƒ­ï¼›LATEST - æœ€æ–°ï¼›")
    @ApiModelProperty(value = "排序 é»˜è®¤ä¸ä¼ ï¼›æœ€çƒ­greet;最新time")
    private String sortType;
    @ApiModelProperty(value = "多个标签唯一编码的列表,多个标签唯一编码的列表")
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTImageListResponse.java
@@ -1,6 +1,7 @@
package com.doumee.biz.zbom.model.zhongtai.response;
import com.doumee.biz.zbom.model.zhongtai.APISpaceCaseVo;
import com.doumee.dao.business.model.Users;
import lombok.Data;
import java.io.Serializable;
@@ -15,4 +16,6 @@
    private List<String> imageurlList;
    private Users users;
}
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -109,6 +109,7 @@
    public static final String ZBOM = "ZBOM" ;
    public static final String ZBOM_IAM_APPKEY = "ZBOM_IAM_APPKEY";
    public static final String ZBOM_IAM_APPID = "ZBOM_IAM_APPID";
    public static final String ZBOM_PAD_INTERFACE_KEY = "ZBOM_PAD_INTERFACE_KEY";
    public static final String USER_CARD_HEADER_IMG ="USER_CARD_HEADER_IMG" ;
    public static final String USER_CARD_PHONE_IMG ="USER_CARD_PHONE_IMG" ;
    public static final String USER_CARD_ADDR_IMG ="USER_CARD_ADDR_IMG" ;
@@ -680,7 +681,7 @@
        // æ­£å¼ç‰ˆä¸º "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
        String env_version = "trial";
        body.put("env_version", env_version);
        if(env_version.equals("release")){
        if(env_version.equals("release")&&StringUtils.isNotBlank(page)){
            body.put("page", page);
        }
        // é€æ˜Žï¼Œæ ¹æ®ä½ çš„场景自行设置body参数
server/service/src/main/java/com/doumee/dao/business/model/News.java
@@ -112,6 +112,10 @@
    @TableField(exist = false)
    private List<Multifile> fileList;
    @ApiModelProperty(value = "是否查询发布:0=否;1=是")
    @TableField(exist = false)
    private Integer isPublish;
    @ApiModelProperty(value = "素材类型 0推广资讯 1定制服务", example = "1")
    @ExcelColumn(name="素材类型 0推广资讯 1定制服务")
    private Integer type;
server/service/src/main/java/com/doumee/dao/web/reqeust/EditShopDTO.java
@@ -39,4 +39,7 @@
    @ApiModelProperty(value = "纬度", example = "1")
    private BigDecimal latitude;
    @ApiModelProperty(value = "操作人", hidden = true)
    private Long userId;
}
server/service/src/main/java/com/doumee/dao/web/reqeust/GenerateQRCodeRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.doumee.dao.web.reqeust;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/7/25 10:35
 */
@Data
public class GenerateQRCodeRequest {
    @ApiModelProperty(value = "业务类型:0:产品;1:案例;2:实景")
    private Integer businessType;
    @ApiModelProperty(value = "业务主键")
    private String businessId;
    @ApiModelProperty(value = "iam编码")
    private String iamId;
    @ApiModelProperty(value = "跳转地址",hidden = true)
    private String path;
}
server/service/src/main/java/com/doumee/service/business/GetZhongTaiDataService.java
@@ -122,7 +122,7 @@
     * @param userId
     * @return
     */
    ZTProductInfoResponse getProductInfo(String id,String userType,Long userId);
    ZTProductInfoResponse getProductInfo(String id,String userType,Long userId,String salesId);
    /**
     * ä¸­å° - å…¨å±‹èµ„讯详情
@@ -131,7 +131,7 @@
     * @param userId
     * @return
     */
    ZTCaseInfoResponse getWholecaseInfo(String id,String userType,Long userId);
    ZTCaseInfoResponse getWholecaseInfo(String id,String userType,Long userId,String salesId);
    /**
     * ä¸­å° - äº§å“èµ„讯详情
@@ -140,7 +140,7 @@
     * @param userId
     * @return
     */
    ZTProductNewsInfoResponse getProductNewsInfo(String id,String userType,Long userId);
    ZTProductNewsInfoResponse getProductNewsInfo(String id,String userType,Long userId,String salesId);
    /**
     * ä¸­å° - å®žæ™¯æ¡ˆä¾‹
@@ -149,7 +149,7 @@
     * @param userId
     * @return
     */
    ZTRealcaseInfoResponse getRealcaseInfo(String id,String userType,Long userId);
    ZTRealcaseInfoResponse getRealcaseInfo(String id,String userType,Long userId,String salesId);
    /**
     * ä¸­å° - æˆ‘的收藏/喜欢列表
server/service/src/main/java/com/doumee/service/business/UsersService.java
@@ -7,10 +7,12 @@
import com.doumee.dao.business.model.Users;
import com.doumee.dao.web.reqeust.ContentShareImgDto;
import com.doumee.dao.web.reqeust.EditUsersRequest;
import com.doumee.dao.web.reqeust.GenerateQRCodeRequest;
import com.doumee.dao.web.reqeust.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
/**
@@ -124,4 +126,6 @@
    ZTBaseRequst logOff(Long userId,String token);
    AccountResponse getWxMiniPhoneLogin(WxPhoneRequest wxPhoneRequest);
    InputStream getQrCode(GenerateQRCodeRequest generateQRCodeRequest);
}
server/service/src/main/java/com/doumee/service/business/impl/GetCrmDataServiceImpl.java
@@ -56,8 +56,10 @@
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Users users = usersMapper.selectById(crmCustomerListRequest.getUserId());
        crmCustomerListRequest.setUserName(users.getIamUsername());
        if(StringUtils.isBlank(crmCustomerListRequest.getUserName())){
            Users users = usersMapper.selectById(crmCustomerListRequest.getUserId());
            crmCustomerListRequest.setUserName(users.getIamUsername());
        }
        CRMBaseResponse<List<CRMCustomerListResponse>> crmBaseResponse = zbomCRMService.getCustomerList(crmCustomerListRequest);
        if(Objects.isNull(crmBaseResponse)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"CRM接口请求失败!");
server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java
@@ -10,10 +10,12 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.CustomerUserMapper;
import com.doumee.dao.business.IamInterfaceLogMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.UsersMapper;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Users;
import com.doumee.dao.web.response.ZSZXCatalogResponse;
import com.doumee.dao.web.response.ZTBaseInfoResponse;
import com.doumee.service.business.GetZhongTaiDataService;
@@ -48,6 +50,9 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private CustomerUserMapper customerUserMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
@@ -272,7 +277,7 @@
    @Override
    public ZTProductInfoResponse getProductInfo(String id,String userType,Long userId){
    public ZTProductInfoResponse getProductInfo(String id,String userType,Long userId,String salesId){
        //查询 ä¸­å° TOKEN
        ZTBaseInfoResponse ztBaseInfoResponse  = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,userId,userType);
        ZTContentInfoRequest ztContentListRequest = new ZTContentInfoRequest();
@@ -281,6 +286,19 @@
        ztContentListRequest.setId(id);
        ZTProductInfoResponse response = zbomZhongTaiService.getProductInfo(ztContentListRequest);
        if(Objects.nonNull(response)){
            //查询导购信息 è¿›è¡Œä¿¡æ¯ç»‘定与返回
            if(StringUtils.isNotBlank(salesId)){
                Users users = usersMapper.selectById(salesId);
                if(Objects.nonNull(users)){
                    MemberServiceImpl.saveCustomerUser(customerUserMapper,users,userId);
                    String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) +
                            StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode());
                    if(StringUtils.isNotBlank(users.getImgurl())){
                        users.setImgurlFull(prefix + users.getImgurl());
                    }
                    response.setUsers(users);
                }
            }
            List<String> stringList = new ArrayList<String>();
            if (StringUtils.isNotBlank(response.getCoverImage())) {
                stringList.add(response.getCoverImage());
@@ -311,7 +329,7 @@
    }
    @Override
    public ZTCaseInfoResponse getWholecaseInfo(String id,String userType,Long userId){
    public ZTCaseInfoResponse getWholecaseInfo(String id,String userType,Long userId,String salesId){
        //查询 ä¸­å° TOKEN
        ZTBaseInfoResponse ztBaseInfoResponse  = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,userId,userType);
        ZTContentInfoRequest ztContentListRequest = new ZTContentInfoRequest();
@@ -319,30 +337,45 @@
        ztContentListRequest.setUserType(ztBaseInfoResponse.getUserType());
        ztContentListRequest.setId(id);
        ZTCaseInfoResponse response = zbomZhongTaiService.getWholecaseInfo(ztContentListRequest);
        List<String> stringList = new ArrayList<String>();
        if (StringUtils.isNotBlank(response.getCoverImage())) {
            stringList.add(response.getCoverImage());
        }
        if(Objects.nonNull(response.getLayoutUlr())){
            stringList.add(response.getLayoutUlr());
        }
        APISpaceCaseVo[]  apiSpaceCaseVoList = response.getApiSpaceCaseVos();
        if(Objects.nonNull(apiSpaceCaseVoList)){
            for (APISpaceCaseVo apiSpaceCaseVo:apiSpaceCaseVoList) {
                if(StringUtils.isNotBlank(apiSpaceCaseVo.getCoverImage())){
                    stringList.add(apiSpaceCaseVo.getCoverImage());
                }
                if(Objects.nonNull(apiSpaceCaseVo.getImgList())){
                    stringList.addAll(Arrays.asList(apiSpaceCaseVo.getImgList()));
        if(Objects.nonNull(response)){
            //查询导购信息 è¿›è¡Œä¿¡æ¯ç»‘定与返回
            if(StringUtils.isNotBlank(salesId)){
                Users users = usersMapper.selectById(salesId);
                if(Objects.nonNull(users)){
                    MemberServiceImpl.saveCustomerUser(customerUserMapper,users,userId);
                    String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) +
                            StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode());
                    if(StringUtils.isNotBlank(users.getImgurl())){
                        users.setImgurlFull(prefix + users.getImgurl());
                    }
                    response.setUsers(users);
                }
            }
            List<String> stringList = new ArrayList<String>();
            if (StringUtils.isNotBlank(response.getCoverImage())) {
                stringList.add(response.getCoverImage());
            }
            if(Objects.nonNull(response.getLayoutUlr())){
                stringList.add(response.getLayoutUlr());
            }
            APISpaceCaseVo[]  apiSpaceCaseVoList = response.getApiSpaceCaseVos();
            if(Objects.nonNull(apiSpaceCaseVoList)){
                for (APISpaceCaseVo apiSpaceCaseVo:apiSpaceCaseVoList) {
                    if(StringUtils.isNotBlank(apiSpaceCaseVo.getCoverImage())){
                        stringList.add(apiSpaceCaseVo.getCoverImage());
                    }
                    if(Objects.nonNull(apiSpaceCaseVo.getImgList())){
                        stringList.addAll(Arrays.asList(apiSpaceCaseVo.getImgList()));
                    }
                }
            }
            response.setImageurlList(stringList);
        }
        response.setImageurlList(stringList);
        return response;
    }
    @Override
    public ZTProductNewsInfoResponse getProductNewsInfo(String id,String userType,Long userId){
    public ZTProductNewsInfoResponse getProductNewsInfo(String id,String userType,Long userId,String salesId){
        //查询 ä¸­å° TOKEN
        ZTBaseInfoResponse ztBaseInfoResponse  = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,userId,userType);
        ZTContentInfoRequest ztContentListRequest = new ZTContentInfoRequest();
@@ -351,6 +384,19 @@
        ztContentListRequest.setId(id);
        ZTProductNewsInfoResponse response = zbomZhongTaiService.getProductNewsInfo(ztContentListRequest);
        if(Objects.nonNull(response)){
            //查询导购信息 è¿›è¡Œä¿¡æ¯ç»‘定与返回
            if(StringUtils.isNotBlank(salesId)){
                Users users = usersMapper.selectById(salesId);
                if(Objects.nonNull(users)){
                    MemberServiceImpl.saveCustomerUser(customerUserMapper,users,userId);
                    String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) +
                            StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode());
                    if(StringUtils.isNotBlank(users.getImgurl())){
                        users.setImgurlFull(prefix + users.getImgurl());
                    }
                    response.setUsers(users);
                }
            }
            List<String> stringList = new ArrayList<String>();
            if (StringUtils.isNotBlank(response.getCoverImage())) {
                stringList.add(response.getCoverImage());
@@ -380,7 +426,7 @@
    }
    @Override
    public ZTRealcaseInfoResponse getRealcaseInfo(String id,String userType,Long userId){
    public ZTRealcaseInfoResponse getRealcaseInfo(String id,String userType,Long userId,String salesId){
        //查询 ä¸­å° TOKEN
        ZTBaseInfoResponse ztBaseInfoResponse  = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,userId,userType);
        ZTContentInfoRequest ztContentListRequest = new ZTContentInfoRequest();
@@ -389,6 +435,19 @@
        ztContentListRequest.setId(id);
        ZTRealcaseInfoResponse response = zbomZhongTaiService.getRealcaseInfo(ztContentListRequest);
        if(Objects.nonNull(response)){
            //查询导购信息 è¿›è¡Œä¿¡æ¯ç»‘定与返回
            if(StringUtils.isNotBlank(salesId)){
                Users users = usersMapper.selectById(salesId);
                if(Objects.nonNull(users)){
                    MemberServiceImpl.saveCustomerUser(customerUserMapper,users,userId);
                    String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) +
                            StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode());
                    if(StringUtils.isNotBlank(users.getImgurl())){
                        users.setImgurlFull(prefix + users.getImgurl());
                    }
                    response.setUsers(users);
                }
            }
            List<String> stringList = new ArrayList<String>();
            if (StringUtils.isNotBlank(response.getCoverImage())) {
                stringList.add(response.getCoverImage());
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -267,7 +267,7 @@
    @Override
    public AccountResponse wxLogin(String code,String iamId){
    public AccountResponse wxLogin(String code,String userId){
        try {
//            èŽ·å–å¾®ä¿¡æ•æ„Ÿæ•°æ®
            WxMaJscode2SessionResult session = WxMiniConfig.wxCustomerService.getUserService().getSessionInfo(code);
@@ -278,11 +278,8 @@
//            String openId = code;
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId).isNotNull("phone"));
            Users users = new Users();
            if(StringUtils.isNotBlank(iamId)){
                users = usersMapper.selectOne(new QueryWrapper<Users>().lambda()
                        .eq(Users::getIamId,iamId)
                        .last("limit 1")
                );
            if(StringUtils.isNotBlank(userId)){
                users = usersMapper.selectById(userId);
            }
            if (member == null) {
                member = new Member();
@@ -302,14 +299,14 @@
                    member.setToken(ztUserGetTokenResponse.getToken());
                }
                memberMapper.insert(member);
                this.saveCustomerUser(users,member.getId());
                MemberServiceImpl.saveCustomerUser(customerUserMapper,users,member.getId());
            }else{
                ZTUserGetTokenResponse ztUserGetTokenResponse = this.syncZhongTaiUser(member);
                if(!Objects.isNull(ztUserGetTokenResponse)){
                    member.setToken(ztUserGetTokenResponse.getToken());
                    memberMapper.updateById(member);
                }
                this.saveCustomerUser(users,member.getId());
                MemberServiceImpl.saveCustomerUser(customerUserMapper,users,member.getId());
                member = this.getMemberInfo(member.getId());
            }
            String token = JwtTokenUtil.generateTokenForZb(member.getId(),ZTConstants.CUSTOMER, JSONObject.toJSON(member).toString(),redisTemplate);
@@ -324,7 +321,7 @@
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
    }
    public void saveCustomerUser(Users users,Long memberId){
    public static void saveCustomerUser(CustomerUserMapper customerUserMapper,Users users,Long memberId){
        if(Objects.nonNull(users)&&Objects.nonNull(memberId)) {
            if (customerUserMapper.selectCount(new QueryWrapper<CustomerUser>().lambda()
                    .eq(CustomerUser::getIsdeleted, Constants.ZERO)
server/service/src/main/java/com/doumee/service/business/impl/NewsServiceImpl.java
@@ -200,6 +200,9 @@
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.eq(News::getId, pageWrap.getModel().getId());
        }
        if(pageWrap.getModel().getIsPublish()!=null && Constants.equalsInteger(pageWrap.getModel().getIsPublish(),Constants.ONE)){
            queryWrapper.apply(" now() >= t.PUBLISH_DATE ");
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.eq(News::getCreator, pageWrap.getModel().getCreator());
        }
@@ -391,9 +394,22 @@
        dailyUpdatesResponse.setShareNum(
                actionsMapper.selectCount(new QueryWrapper<Actions>())
        );
        dailyUpdatesResponse.setNewsList(
                this.getCustomizedNewsList(Constants.ZERO,Constants.THREE,Constants.ZERO)
        List<News> list = newsMapper.selectList(new QueryWrapper<News>().lambda()
                .eq(News::getIsdeleted,Constants.ZERO)
                .eq(News::getType,Constants.ZERO)
                .eq(News::getStatus,Constants.ZERO)
                .eq(News::getFileType,Constants.ZERO)
                .last( "limit 3"  )
                .orderByDesc(News::getCreateDate)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            List<Long> idList =  list.stream().map(i->i.getId()).collect(Collectors.toList());
            List<Multifile> files = dealMultifileList(idList);
            for(News model : list){
                setFilelistById(model,files);
            }
        }
        dailyUpdatesResponse.setNewsList(list);
        return dailyUpdatesResponse;
    }
server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -100,6 +100,11 @@
    @Override
    public void updateById(Shop shop) {
        shopMapper.updateById(shop);
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getCardImg,null)
                .isNotNull(Users::getCardImg)
                .eq(Users::getDepartmentId,shop.getId())
        );
    }
    @Override
@@ -1016,6 +1021,11 @@
        Shop updShop = new Shop();
        BeanUtils.copyProperties(editShopDTO,updShop);
        shopMapper.updateById(updShop);
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getCardImg,null)
                .isNotNull(Users::getCardImg)
                .eq(Users::getDepartmentId,shop.getId())
        );
    }
}
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -35,6 +35,7 @@
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.EditUsersRequest;
import com.doumee.dao.web.reqeust.ContentShareImgDto;
import com.doumee.dao.web.reqeust.GenerateQRCodeRequest;
import com.doumee.dao.web.reqeust.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
import com.doumee.service.business.UsersService;
@@ -44,6 +45,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.interfaces.MPJBaseJoin;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import okhttp3.Response;
import org.apache.catalina.User;
import org.apache.commons.lang3.StringUtils;
import me.chanjar.weixin.common.error.WxErrorException;
@@ -58,7 +60,10 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.Callable;
@@ -671,6 +676,8 @@
    @Override
    public  String getContentShareImg(Users users, ContentShareImgDto param){
        users = usersMapper.selectById(users.getId());
        this.getUsersDetail(users);
        if(StringUtils.isBlank(param.getImgurl())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -690,17 +697,16 @@
        if(img1 ==null){
            return param.getImgurl();
        }
      /*  if(img1.getWidth() <200 && img1.getHeight()<100){
       /* if(img1.getWidth() <200 && img1.getHeight()<100){
            return  param.getImgurl();
        }
*/
        }*/
        String defualtHeader = systemDictDataBiz.queryByCode(Constants.WEIXIN_DEFAULT_IMGS, Constants.USER_CARD_HEADER_IMG).getCode();
        String imgurl =StringUtils.isNotBlank(users.getImgurl())?path+(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.USERS_FILE).getCode())+users.getImgurl():defualtHeader;
        String url =null;
        //内容分享海报图片
        InputStream mpCode =  Constants.generateWxMiniImgStream(systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG, Constants.WX_TOKEN_CUSTOMER).getCode(),
                //"userId="+users.getId()+"&articleId="+param.getArticleId(),
                 param.getArticleId()+"&"+users.getId(),
                 param.getArticleId()+"_"+users.getId(),
                param.getPageUrl());//小程序
        InputStream inputStream = GeneratePicUtil.generateShareWithUserImg(
@@ -717,14 +723,13 @@
            url =  path+fileName;
        }
        return  url;
    }
    private String dealShareImgNoUser(ContentShareImgDto param, Users users, String shareFolder, String path) {
       String url =null;
        //内容分享海报图片
        InputStream mpCode =  Constants.generateWxMiniImgStream(systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG, Constants.WX_TOKEN_CUSTOMER).getCode(),
                "userId="+users.getId()+"&articleId="+param.getArticleId(),
                param.getArticleId()+"_"+users.getId(),
                param.getPageUrl());//小程序
        String title = systemDictDataBiz.queryByCode(Constants.WEIXIN_DEFAULT_IMGS, Constants.SHARE_HAIBAO_HEADER_TITLE).getCode();
@@ -745,6 +750,8 @@
    @Override
    public     String getUserCard(Users users){
        users = usersMapper.selectById(users.getId());
        this.getUsersDetail(users);
        String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode();
        String folder = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.USERS_FILE).getCode();
        if(StringUtils.isNotBlank(users.getCardImg()) && !StringUtils.equals(users.getCardImg(),"-")){
@@ -829,7 +836,9 @@
            Shop shop = shopMapper.selectById(users.getDepartmentId());
            if(Objects.nonNull(shop)){
                users.setShopName(shop.getName());
                users.setShopCity(shop.getProvinceName()+shop.getCityName()+shop.getAreaName());
                if(!(StringUtils.isBlank(shop.getProvinceName())||StringUtils.isBlank(shop.getCityName())||StringUtils.isBlank(shop.getAreaName()))){
                    users.setShopCity(shop.getProvinceName()+shop.getCityName()+shop.getAreaName());
                }
                if(StringUtils.isNotBlank(shop.getAddress())){
                    users.setShopAddress(shop.getAddress());
                }else{
@@ -853,7 +862,7 @@
        //TODO è°ƒèµ· ä¸­å°æŽ¥å£
        usersMapper.update(new UpdateWrapper<Users>()
                .lambda()
                .set(Users::getCardImg,"-") //重置名片为 -
                .set(Users::getCardImg,null) //重置名片为 -
                .set(StringUtils.isNotBlank(editUsersRequest.getImgurl()),Users::getImgurl,editUsersRequest.getImgurl())
                .set(StringUtils.isNotBlank(editUsersRequest.getName()),Users::getName,editUsersRequest.getName())
                .set(StringUtils.isNotBlank(editUsersRequest.getPhone()),Users::getPhone,editUsersRequest.getPhone())
@@ -890,5 +899,41 @@
        return ztBaseRequst;
    }
    @Override
    public InputStream getQrCode(GenerateQRCodeRequest generateQRCodeRequest){
        if(Objects.isNull(generateQRCodeRequest)
            ||StringUtils.isBlank(generateQRCodeRequest.getIamId())
            || StringUtils.isBlank(generateQRCodeRequest.getBusinessId())
            || Objects.isNull(generateQRCodeRequest.getBusinessType())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if(generateQRCodeRequest.getBusinessType()<Constants.ZERO || generateQRCodeRequest.getBusinessType() > Constants.THREE){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务类型错误");
        }
        Users users = usersMapper.selectOne(new QueryWrapper<Users>().lambda().eq(Users::getIamId,
                generateQRCodeRequest.getIamId()).last("limit 1"));
        if(Objects.isNull(users)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到员工信息");
        }
        InputStream inputStream =  Constants.generateWxMiniImgStream(
                systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG, Constants.WX_TOKEN_CUSTOMER).getCode(),
                generateQRCodeRequest.getBusinessId()+"_"+generateQRCodeRequest.getBusinessType()+"_"+users.getId(),
                null);//小程序
        return inputStream;
//        try {
//               ByteArrayOutputStream baos = new ByteArrayOutputStream();
//                    byte[] buffer = new byte[1024];
//                    int len = -1;
//                    while ((len = inputStream.read(buffer)) != -1) {
//                        baos.write(buffer, 0, len);
//                    }
//                    return "data:mediatype;base64," + Base64.getEncoder().encodeToString(baos.toByteArray());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"二维码生成失败");
    }
}
server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -84,8 +84,6 @@
    private ActionsService actionsService;
    @ApiOperation(value = "客户端小程序登陆", notes = "客户端小程序")
    @GetMapping("/wxLoginCustomer")
    @ApiImplicitParams({
@@ -528,9 +526,10 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "salesId", value = "导购主键(二维码分享)", required = false),
    })
    public ApiResponse<ZTCaseInfoResponse> getWholecaseInfo(@RequestParam String id) {
        ZTCaseInfoResponse ztCaseInfoResponse= getZhongTaiDataService.getWholecaseInfo(id,getUserType(),getMemberId());
    public ApiResponse<ZTCaseInfoResponse> getWholecaseInfo(@RequestParam String id,String salesId) {
        ZTCaseInfoResponse ztCaseInfoResponse= getZhongTaiDataService.getWholecaseInfo(id,getUserType(),getMemberId(),salesId);
        return ApiResponse.success("查询成功",ztCaseInfoResponse);
    }
@@ -543,9 +542,10 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "salesId", value = "导购主键(二维码分享)", required = false),
    })
    public ApiResponse<ZTProductNewsInfoResponse> getProductNewsInfo(@RequestParam String id) {
        ZTProductNewsInfoResponse ztProductNewsInfoResponse= getZhongTaiDataService.getProductNewsInfo(id,getUserType(),getMemberId());
    public ApiResponse<ZTProductNewsInfoResponse> getProductNewsInfo(@RequestParam String id,String salesId) {
        ZTProductNewsInfoResponse ztProductNewsInfoResponse= getZhongTaiDataService.getProductNewsInfo(id,getUserType(),getMemberId(),salesId);
        return ApiResponse.success("查询成功",ztProductNewsInfoResponse);
    }
@@ -559,14 +559,12 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "salesId", value = "导购主键(二维码分享)", required = false),
    })
    public ApiResponse<ZTRealcaseInfoResponse> getRealcaseInfo(@RequestParam String id) {
        ZTRealcaseInfoResponse ztRealcaseInfoResponse= getZhongTaiDataService.getRealcaseInfo(id,getUserType(),getMemberId());
    public ApiResponse<ZTRealcaseInfoResponse> getRealcaseInfo(@RequestParam String id,String salesId) {
        ZTRealcaseInfoResponse ztRealcaseInfoResponse= getZhongTaiDataService.getRealcaseInfo(id,getUserType(),getMemberId(),salesId);
        return ApiResponse.success("查询成功",ztRealcaseInfoResponse);
    }
    @UserLoginRequired
    @LoginRequired
@@ -575,9 +573,10 @@
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "id", value = "内容主键", required = true),
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "salesId", value = "导购主键(二维码分享)", required = false),
    })
    public ApiResponse<ZTProductInfoResponse> getProductInfo(@RequestParam String id) {
        ZTProductInfoResponse ztProductInfoResponse= getZhongTaiDataService.getProductInfo(id,getUserType(),getMemberId());
    public ApiResponse<ZTProductInfoResponse> getProductInfo(@RequestParam String id,String salesId) {
        ZTProductInfoResponse ztProductInfoResponse= getZhongTaiDataService.getProductInfo(id,getUserType(),getMemberId(),salesId);
        return ApiResponse.success("查询成功",ztProductInfoResponse);
    }
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java
@@ -1,27 +1,46 @@
package com.doumee.api.web;
import cn.hutool.http.HttpRequest;
import com.amazonaws.util.Md5Utils;
import com.doumee.biz.system.SystemDataPermissionBiz;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.UserLoginRequired;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.News;
import com.doumee.dao.web.reqeust.GenerateQRCodeRequest;
import com.doumee.dao.web.response.DailyUpdatesResponse;
import com.doumee.dao.web.response.ZSZXCatalogResponse;
import com.doumee.service.business.GetZhongTaiDataService;
import com.doumee.service.business.NewsService;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.UsersService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.digest.Md5Crypt;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.tomcat.util.security.MD5Encoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
/**
 * Created by IntelliJ IDEA.
@@ -51,6 +70,12 @@
    @Autowired
    public GetZhongTaiDataService getZhongTaiDataService;
    @Autowired
    public UsersService usersService;
    @Autowired
    public SystemDictDataBiz systemDictDataBiz;
    @UserLoginRequired
    @LoginRequired
@@ -62,6 +87,9 @@
    public ApiResponse<ZSZXCatalogResponse> getZSZXCatalogs() {
        return  ApiResponse.success(getZhongTaiDataService.getZSZXCatalogs(getMemberId(),getUserType()));
    }
@@ -83,6 +111,7 @@
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse<PageData<News>> newsPage (@RequestBody PageWrap<News> pageWrap) {
        pageWrap.getModel().setIsPublish(Constants.ONE);
        return ApiResponse.success(newsService.findPage(pageWrap));
    }
@@ -98,4 +127,37 @@
    public ApiResponse<String> getCrmAuthUrl(@RequestParam Integer type) {
        return  ApiResponse.success(zbomCRMService.getCrmGoUrl(this.getLoginUserInfo().getIamUsername(),type));
    }
    @PreventRepeat(lockTime = 2000)
    @ApiOperation(value = "生成小程序码", notes = "PAD端")
    @PostMapping("/getQrCode")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "sign", value = "签名(使用timestamp+appkey进行md5加密)", required = true),
            @ApiImplicitParam(paramType = "header", dataType = "Long", name = "timestamp", value = "时间戳(当前时间毫秒,2小时内有效)", required = true),
    })
    public void getQrCode(@RequestParam(value = "sign")String sign,
                          @RequestParam(value = "timestamp")Long timestamp,
                          @RequestBody GenerateQRCodeRequest generateQRCodeRequest,HttpServletResponse response) {
        if(StringUtils.isBlank(sign) || timestamp == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String interfaceKey = systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_PAD_INTERFACE_KEY).getCode();
        //判断时间戳是否超过两小时
        if(System.currentTimeMillis()-timestamp > 2 * 60 * 3600 * 1000){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"token已失效!");
        }
        String token = DigestUtils.md5Hex(timestamp+interfaceKey);
        if(!token.equals(sign)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"token已失效!");
        }
        try{
            response.setHeader("Cache-Control", "no-store, no-cache");
            response.setContentType("image/jpeg");
            InputStream inputStream = usersService.getQrCode(generateQRCodeRequest);
            ImageIO.write(ImageIO.read(inputStream),"png",response.getOutputStream());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -17,9 +17,11 @@
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.business.model.SmsEmail;
import com.doumee.dao.business.model.Users;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.web.reqeust.*;
import com.doumee.dao.web.response.AccountResponse;
import com.doumee.service.business.*;
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -181,8 +183,22 @@
    }
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @UserLoginRequired
    @LoginRequired
    @ApiOperation(value = "更新token", notes = "员工端小程序")
    @GetMapping("/updateToken")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse updateToken () {
        systemDictDataBiz.updWxMiniToken();
        return ApiResponse.success("操作成功");
    }
    @UserLoginRequired
    @ApiOperation(value = "获取内容分享海报", notes = "获取内容分享海报,加小程序码")
wechat_staff/pages/userinfo/index.js
@@ -97,6 +97,7 @@
    var that = this
    const { userInfo } = this.data
    if (e.detail.avatarUrl) {
      console.log(e)
      wx.uploadFile({
        url: uploadUrl,
        filePath: e.detail.avatarUrl,