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 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 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> newsPage (@RequestBody PageWrap 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 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(); } } }