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. 
 | 
 * 
 | 
 * @Author : Rk 
 | 
 * @create 2024/7/10 18:06 
 | 
 */ 
 | 
@Api(tags = "【B端小程序】客户管理接口") 
 | 
@Trace(exclude = true) 
 | 
@RestController 
 | 
@RequestMapping("/web/customer") 
 | 
@Slf4j 
 | 
public class CustomerManageApi extends ApiController{ 
 | 
  
 | 
    @Autowired 
 | 
    public ZbomZhongTaiService zbomZhongTaiService; 
 | 
  
 | 
    @Autowired 
 | 
    public SmsEmailService smsEmailService; 
 | 
  
 | 
    @Autowired 
 | 
    public ZbomCRMService zbomCRMService; 
 | 
  
 | 
    @Autowired 
 | 
    public NewsService newsService; 
 | 
  
 | 
    @Autowired 
 | 
    public GetZhongTaiDataService getZhongTaiDataService; 
 | 
  
 | 
    @Autowired 
 | 
    public UsersService usersService; 
 | 
  
 | 
    @Autowired 
 | 
    public SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
  
 | 
    @UserLoginRequired 
 | 
    @LoginRequired 
 | 
    @ApiOperation(value = "【C端小程序】获取首页志说装修四个模块类目数据", notes = "获取首页志说装修四个模块类目数据,背景图暂时写死,参考UI") 
 | 
    @PostMapping("/getZSZXCatalogs") 
 | 
    @ApiImplicitParams({ 
 | 
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true) 
 | 
    }) 
 | 
    public ApiResponse<ZSZXCatalogResponse> getZSZXCatalogs() { 
 | 
        return  ApiResponse.success(getZhongTaiDataService.getZSZXCatalogs(getMemberId(),getUserType())); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    @UserLoginRequired 
 | 
    @ApiOperation(value = "【B端小程序】每日上新数据") 
 | 
    @GetMapping("/getDailyUpdates") 
 | 
    @ApiImplicitParams({ 
 | 
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true) 
 | 
    }) 
 | 
    public ApiResponse<DailyUpdatesResponse> getDailyUpdates() { 
 | 
        return  ApiResponse.success(newsService.getDailyUpdatesResponse()); 
 | 
    } 
 | 
  
 | 
  
 | 
    @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) { 
 | 
        pageWrap.getModel().setIsPublish(Constants.ONE); 
 | 
        return ApiResponse.success(newsService.findPage(pageWrap)); 
 | 
    } 
 | 
  
 | 
    @UserLoginRequired 
 | 
    @ApiOperation(value = "获取客户管理授权-列表跳转地址", notes = "获取客户管理授权跳转地址") 
 | 
    @GetMapping("/getCrmAuthUrl") 
 | 
    @ApiImplicitParams({ 
 | 
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true), 
 | 
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "类型 0客户列表 1跳转新增意向客户", required = true) 
 | 
    }) 
 | 
    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(); 
 | 
        } 
 | 
    } 
 | 
} 
 |