jiangping
2024-07-16 1be9f9fdb13f7c5cdcf29494cb72ced35cd7af10
提交
已删除1个文件
已修改9个文件
334 ■■■■ 文件已修改
server/admin/src/main/java/com/doumee/timer/ZbomIAMSyncJobBiz.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/web/reqeust/ContentShareImgDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/timer/QuartzJobService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/timer/ZbomIAMSyncJobBiz.java
ÎļþÒÑɾ³ý
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java
@@ -14,9 +14,9 @@
    public static final CharSequence CODE_SUCCESS = "1";
    public interface IntegerUrl{
        String POST_CUS_DATA_URL ="/api/public/zbom/postCusData";
        String CUS_BEFORE_PAGE_LIST_URL ="api/public/mini/program/cusOrBeforeList";
        String DAOGOU_BIND_LIST_URL ="api/public/mini/program/list";
        String GO_CRM_AUTH_URL ="oauth/authorize/jump";
        String CUS_BEFORE_PAGE_LIST_URL ="/api/public/mini/program/cusOrBeforeList";
        String DAOGOU_BIND_LIST_URL ="/api/public/mini/program/list";
        String GO_CRM_AUTH_URL ="/oauth/authorize/jump";
    }
    public interface IntegerName{
server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -334,6 +334,7 @@
    public static final String WEIXIN_DEFAULT_IMGS = "WEIXIN_DEFAULT_IMGS";
    public static final String USER_CARD_DEFAULT_IMG = "USER_CARD_DEFAULT_IMG";
    public static final String USERS_FILE = "USERS_FILE";
    public static final String SHARES_FILE = "SHARES_FILE";
    public static final String NEWS_FILE = "NEWS_FILE";
    public static final String USER_LABEL = "USER_LABEL";
    //发送会议开始  å®šæ—¶æå‰å¤šå°‘分钟发送
@@ -366,6 +367,7 @@
    public static final String WX_MINI_CONFIG = "WX_MINI_CONFIG";
    public static final String SHARE_HAIBAO_HEADER_TITLE = "SHARE_HAIBAO_HEADER_TITLE";
    public static final String WX_APPID_CUSTOMER = "WX_APPID_CUSTOMER";
    public static final String WX_SECRET_CUSTOMER = "WX_SECRET_CUSTOMER";
    public static final String WX_APPID_PERSONNEL = "WX_APPID_PERSONNEL";
@@ -706,19 +708,20 @@
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
//                ByteArrayOutputStream baos = new ByteArrayOutputStream();
//                    byte[] buffer = new byte[1024];
//                    int len = -1;
//                    while ((len = inputStream.read(buffer)) != -1) {
//                        baos.write(buffer, 0, len);
//                    }
//                System.out.println("data:mediatype;base64," + Base64.getEncoder().encodeToString(baos.toByteArray()));
          /*      ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = -1;
                    while ((len = inputStream.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                System.out.println("data:mediatype;base64," + Base64.getEncoder().encodeToString(baos.toByteArray()));*/
                return inputStream;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"生成图片失败");
        return  null;
//        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"生成图片失败");
    }
server/service/src/main/java/com/doumee/core/utils/GeneratePicUtil.java
@@ -5,6 +5,7 @@
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
@@ -13,6 +14,7 @@
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
@@ -301,7 +303,6 @@
            g2.drawRect( 0, 0, 750, 700);
        }
        int th = 30;
        //名称
        if(name.length()>5){
            name = name.substring(0,5)+"...";
@@ -382,11 +383,170 @@
        }
    }
    private static BufferedImage getImgIO(String imgurl) {
    public static BufferedImage getImgIO(String imgurl) {
        try {
        return     ImageIO.read(new URL(imgurl));
        }catch (Exception e){
        }return null;
    }
    private static BufferedImage getImgIO(InputStream is) {
        try {
             return     ImageIO.read(is);
        }catch (Exception e){
        }return null;
    }
    public static InputStream generateShareImg(String imgurl, InputStream mpCode, String title) {
        BufferedImage bi =  new BufferedImage(750, 976, BufferedImage.TYPE_INT_RGB);
        //得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) bi.getGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.fillRect(0, 0, 750, 976);
        //背景图片
        dealTitleCenter(g2,th,title);
        if(StringUtils.isNotBlank(imgurl)){
            BufferedImage img1 =getImgIO(imgurl);
            if(img1!=null){
                int w = img1.getWidth();
                int h = img1.getHeight();
                int h1 = (int)((double)w *502/670);
                int w1 = (int)((double)h *670/502);
                if(h>h1){
                    h = h1;
                }
                if(w>w1){
                    w = w1;
                }
                img1 = img1.getSubimage(0,0,w,h);
                g2.drawImage(setRadius(img1,20,0,0), 40, 204, 670 ,502, null);
            }
        }
//        g2.setColor(Color.white);
//        g2.drawRoundRect(39,204, 672, 502, 1,1);//画一个圆角矩形
        g2.setColor(Color.black);
        g2.setFont(new Font("黑体", Font.BOLD, 40));
        g2.drawString("长按识别小程序", 40,768+th);
        g2.setColor(Color.gray);
        g2.setFont(new Font("黑体", Font.PLAIN, 32));
        g2.drawString("查看更多精彩内容", 40,820+th);
        BufferedImage img3 = getImgIO(mpCode);
        if(img3!=null){
            g2.drawImage(img3, 530, 736, 180, 180, null);
        }
        InputStream inputStream = bufferedImageToInputStream(bi);
        return inputStream;
    }
    /**
     * å›¾ç‰‡è®¾ç½®åœ†è§’
     * @param srcImage
     * @return
     * @throws
     */
    public static BufferedImage setRadius(BufferedImage srcImage, int radius, int border, int padding){
        int width = srcImage.getWidth();
        int height = srcImage.getHeight();
        int canvasWidth = width + padding * 2;
        int canvasHeight = height + padding * 2;
        BufferedImage image = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gs = image.createGraphics();
        gs.setComposite(AlphaComposite.Src);
        gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gs.setColor(Color.WHITE);
        gs.fill(new RoundRectangle2D.Float(0, 0, canvasWidth, canvasHeight, radius, radius));
        gs.setComposite(AlphaComposite.SrcAtop);
        gs.drawImage(setClip(srcImage, radius), padding, padding, null);
        if(border !=0){
            gs.setColor(Color.white);
            gs.setStroke(new BasicStroke(border));
            gs.drawRoundRect(padding, padding, canvasWidth - 2 * padding, canvasHeight - 2 * padding, radius, radius);
        }
        gs.dispose();
        return image;
    }
    /**
     * å›¾ç‰‡åˆ‡åœ†è§’
     * @param srcImage
     * @param radius
     * @return
     */
    public static BufferedImage setClip(BufferedImage srcImage, int radius){
        int width = srcImage.getWidth();
        int height = srcImage.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D gs = image.createGraphics();
        gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        gs.setClip(new RoundRectangle2D.Double(0, 0, width, height, radius, radius));
        gs.drawImage(srcImage, 0, 0, null);
        gs.dispose();
        return image;
    }
    private static void dealTitleCenter(Graphics2D g2, int th, String title) {
        String[] titles  = title.split("&");
        for (int i = 0; i < titles.length && i<2; i++) {
            String name = titles[i];
            //名称
            if(name.length()>=17){
                name = name.substring(0,17);
            }
            Font font =new Font("黑体", Font.BOLD, 38);
            FontMetrics fontMetrics = g2.getFontMetrics(font);
            int centerX = 750 / 2;
            int textWidth = fontMetrics.stringWidth(name);
            g2.setColor(Color.black);
            g2.setFont(font);
            g2.drawString(name, centerX - textWidth / 2, 60+th+i*55);
        }
    }
    public static int th = 30;
    public static InputStream generateShareWithUserImg(BufferedImage imgurl, InputStream mpCode, String header, String name) {
        int w = imgurl.getWidth();
        int h = imgurl.getHeight();
        double rate = (double)w/750d;
        //得到它的绘制环境(这张图片的笔)
        Graphics2D g2 = (Graphics2D) imgurl.getGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        //背景图片
        BufferedImage img1 =getImgIO(header);
        if(img1!=null){
            g2.drawImage(setRadius(img1,img1.getWidth(),0,0), (int)(20*rate), (int)(h-68*rate), (int)(48*rate) ,(int)(48*rate), null);
        }
        Font font =new Font("黑体", Font.PLAIN, (int)(28 * rate));
        FontMetrics fontMetrics = g2.getFontMetrics(font);
        int textWidth = fontMetrics.stringWidth(name);
        g2.setColor(Color.white);
        g2.setFont(font);
        g2.drawString(name, (int) (80*rate),h-(int)((64-th)*rate));
        g2.setColor(Color.white);
        g2.setFont(new Font("黑体", Font.PLAIN, (int)(24* rate)));
        g2.drawString("扫描看更多", (int)(w -(textWidth+30*rate)),h-(int)(rate*(50-th)));
        BufferedImage img3 = getImgIO(mpCode);
        if(img3!=null){
            g2.setColor(Color.white);
            g2.fillOval((int)(w-130*rate), (int)(h-rate*150), (int)(100*rate) , (int)(100*rate));
            g2.drawImage(img3, (int)(w-130*rate), (int)(h-rate*150), (int)(100*rate) , (int)(100*rate), null);
        }
        InputStream inputStream = bufferedImageToInputStream(imgurl);
        return inputStream;
    }
}
server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
@@ -87,14 +87,18 @@
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
                                                .cronSchedule(quartzJob.getCronExpres())
                                                .withMisfireHandlingInstructionDoNothing();
            // ä»»åŠ¡è§¦å‘å™¨
            CronTrigger trigger = getCronTrigger(quartzJob.getId())
                                .getTriggerBuilder().withIdentity(triggerKey)
                                .withSchedule(scheduleBuilder).build();
            trigger.getJobDataMap().put(QuartzJob.JOB_PARAM_KEY, quartzJob);
            scheduler.rescheduleJob(triggerKey, trigger);
            // çŠ¶æ€æ ¡éªŒ
            checkStop(quartzJob) ;
            CronTrigger t =  getCronTrigger(quartzJob.getId());
            if(t !=null){
                // ä»»åŠ¡è§¦å‘å™¨
                CronTrigger trigger = t
                        .getTriggerBuilder().withIdentity(triggerKey)
                        .withSchedule(scheduleBuilder).build();
                trigger.getJobDataMap().put(QuartzJob.JOB_PARAM_KEY, quartzJob);
                scheduler.rescheduleJob(triggerKey, trigger);
                // çŠ¶æ€æ ¡éªŒ
                checkStop(quartzJob) ;
            }
        } catch (SchedulerException e) {
            throw new RuntimeException("updateJob Fail",e) ;
        }
server/service/src/main/java/com/doumee/dao/web/reqeust/ContentShareImgDto.java
@@ -17,6 +17,10 @@
public class ContentShareImgDto {
    @ApiModelProperty(value = "图片地址,完整路径")
    private String imgurl;
    @ApiModelProperty(value = "小程序端页面路径")
    private String pageUrl;
    @ApiModelProperty(value = "关联文章编码")
    private String articleId;
    @ApiModelProperty(value = "分享类型 0海报分享 1下载带小程序码")
    private int type;
server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -52,6 +52,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.Callable;
@@ -623,22 +624,78 @@
    @Override
    public  String getContentShareImg(Users loginUserInfo, ContentShareImgDto param){
    public  String getContentShareImg(Users users, ContentShareImgDto param){
        if(StringUtils.isBlank(param.getImgurl())){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String url = null;
        String shareFolder = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.SHARES_FILE).getCode();
        String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode();
        if(param.getType() == 1){
            //多图带二维码下载
            String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode();
            String folder = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.USERS_FILE).getCode();
            return dealShareImgWithUser(param,users,shareFolder,path);
        }else{
            //内容分享海报图片
          return dealShareImgNoUser(param,users,shareFolder,path);
        }
    }
    private String dealShareImgWithUser(ContentShareImgDto param, Users users, String shareFolder, String path) {
        BufferedImage img1 =GeneratePicUtil.getImgIO(param.getImgurl());
        if(img1 ==null){
            return param.getImgurl();
        }
      /*  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.getPageUrl());//小程序
        InputStream inputStream = GeneratePicUtil.generateShareWithUserImg(
                img1
                ,mpCode
                ,imgurl
        ,StringUtils.defaultString(users.getName(),"-"));
        TyyZosUtil obs = new TyyZosUtil( systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ENDPOINT).getCode(),
                systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ACCESS_ID).getCode(),
                systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ACCESS_KEY).getCode());
        String key = DateUtil.getNowShortDate()+"/"+UUID.randomUUID().toString() + ".jpg";
        String fileName =shareFolder+ key;
        if (obs.uploadInputstreamObject(inputStream,systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.BUCKETNAME).getCode(), fileName)) {
            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.getPageUrl());//小程序
        String title = systemDictDataBiz.queryByCode(Constants.WEIXIN_DEFAULT_IMGS, Constants.SHARE_HAIBAO_HEADER_TITLE).getCode();
        InputStream inputStream = GeneratePicUtil.generateShareImg(
                param.getImgurl()
                ,mpCode
                ,title);
        TyyZosUtil obs = new TyyZosUtil( systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ENDPOINT).getCode(),
                systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ACCESS_ID).getCode(),
                systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.ACCESS_KEY).getCode());
        String key = DateUtil.getNowShortDate()+"/"+UUID.randomUUID().toString() + ".jpg";
        String fileName =shareFolder+ key;
        if (obs.uploadInputstreamObject(inputStream,systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.BUCKETNAME).getCode(), fileName)) {
            url =  path+fileName;
        }
        return  url;
    }
    @Override
    public     String getUserCard(Users users){
        String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode();
server/service/src/main/java/com/doumee/service/timer/QuartzJobService.java
@@ -7,11 +7,13 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.timer.entity.JobState;
import com.doumee.dao.timer.entity.QuartzJob;
import com.doumee.dao.timer.mapper.QuartzJobMapper;
import com.doumee.dao.timer.scheduler.QuartzManage;
import org.checkerframework.checker.units.qual.C;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -41,6 +43,7 @@
     * æ–°å¢žä»»åŠ¡
     */
    public int insert(QuartzJob quartzJob) {
        quartzJob.setState(Constants.ZERO);
        int flag = quartzJobMapper.insert(quartzJob) ;
        if (flag > 0){
            quartzManage.createJob(quartzJob) ;
server/web/src/main/java/com/doumee/api/web/CustomerManageApi.java
@@ -1,5 +1,6 @@
package com.doumee.api.web;
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
@@ -32,11 +33,19 @@
    @Autowired
    public SmsEmailService smsEmailService;
    @Autowired
    public ZbomCRMService zbomCRMService;
    @ApiOperation(value = "C端小程序-获取首页志说装修四个模块类目数据", notes = "获取首页志说装修四个模块类目数据")
    @ApiOperation(value = "【C端小程序】获取首页志说装修四个模块类目数据", notes = "获取首页志说装修四个模块类目数据,背景图暂时写死,参考UI")
    @PostMapping("/getZSZXCatalogs")
    public ApiResponse<ZSZXCatalogResponse> getZSZXCatalogs() {
        return  ApiResponse.success(zbomZhongTaiService.getZSZXCatalogs());
    }
    @ApiOperation(value = "【端小程序】获取客户管理授权跳转地址", notes = "获取客户管理授权跳转地址")
    @PostMapping("/getCrmAuthUrl")
    public ApiResponse<String> getCrmAuthUrl() {
        return  ApiResponse.success(zbomCRMService.getCrmGoUrl(this.getLoginUserInfo().getIamUsername()));
    }
}
server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -1,5 +1,6 @@
package com.doumee.api.web;
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.config.annotation.LoginRequired;
import com.doumee.config.annotation.UserLoginRequired;
import com.doumee.core.annotation.trace.Trace;
@@ -49,7 +50,6 @@
    @Autowired
    public ShopService shopService;
    @ApiOperation(value = "小程序登陆", notes = "员工端小程序")
    @GetMapping("/loginByWx")
    @ApiImplicitParams({
@@ -58,7 +58,6 @@
    public ApiResponse<AccountResponse> loginByWx(@RequestParam String code) {
        return  ApiResponse.success(usersService.wxLogin(code));
    }
    @ApiOperation(value = "发送短信验证码", notes = "员工端小程序")
    @GetMapping("/sendSms")