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")