From 264c50e195fcaccc92850afb3e58e9c25cb4df47 Mon Sep 17 00:00:00 2001 From: Menethil Date: Sat, 28 Jul 2018 23:33:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E6=88=90=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=9C=8B=E5=8F=8B=E5=9C=88=E5=88=86=E4=BA=AB=E5=9B=BE?= =?UTF-8?q?=EF=BC=88=E5=B8=A6=E4=BA=8C=E7=BB=B4=E7=A0=81=EF=BC=8C=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E5=8F=AF=E4=BB=A5=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=8C=87=E5=AE=9A=E5=95=86=E5=93=81?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/web/AdminGoodsController.java | 53 +++---- litemall-core/pom.xml | 6 + .../core/notify/WxTemplateSender.java | 3 +- .../litemall/core/qcode/QCodeService.java | 129 ++++++++++++++++++ litemall-core/src/main/resources/back.jpg | Bin 0 -> 50626 bytes .../litemall/wx/web/WxAuthController.java | 4 +- .../litemall/wx/web/WxGoodsController.java | 6 + .../litemall/wx/web/WxOrderController.java | 2 +- pom.xml | 4 +- 9 files changed, 176 insertions(+), 31 deletions(-) create mode 100644 litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java create mode 100644 litemall-core/src/main/resources/back.jpg diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java index 88cc2ae1..d280de1e 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminGoodsController.java @@ -5,6 +5,7 @@ import org.apache.commons.logging.LogFactory; import org.linlinjava.litemall.admin.annotation.LoginAdmin; import org.linlinjava.litemall.admin.dao.GoodsAllinone; import org.linlinjava.litemall.admin.util.CatVo; +import org.linlinjava.litemall.core.qcode.QCodeService; import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.service.*; import org.linlinjava.litemall.core.util.ResponseUtil; @@ -15,7 +16,6 @@ import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; @@ -40,13 +40,16 @@ public class AdminGoodsController { @Autowired private LitemallBrandService brandService; + @Autowired + private QCodeService qCodeService; + @GetMapping("/list") public Object list(@LoginAdmin Integer adminId, String goodsSn, String name, @RequestParam(value = "page", defaultValue = "1") Integer page, @RequestParam(value = "limit", defaultValue = "10") Integer limit, - String sort, String order){ - if(adminId == null){ + String sort, String order) { + if (adminId == null) { return ResponseUtil.unlogin(); } @@ -71,8 +74,8 @@ public class AdminGoodsController { * 因此这里只能删除所有旧的数据,然后添加新的数据 */ @PostMapping("/update") - public Object update(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone){ - if(adminId == null){ + public Object update(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone) { + if (adminId == null) { return ResponseUtil.unlogin(); } @@ -97,7 +100,7 @@ public class AdminGoodsController { // 商品规格表litemall_goods_specification Map specIds = new HashMap<>(); - for(LitemallGoodsSpecification specification : specifications){ + for (LitemallGoodsSpecification specification : specifications) { specification.setGoodsId(goods.getId()); specification.setAddTime(LocalDateTime.now()); specificationService.add(specification); @@ -105,14 +108,14 @@ public class AdminGoodsController { } // 商品参数表litemall_goods_attribute - for(LitemallGoodsAttribute attribute : attributes){ + for (LitemallGoodsAttribute attribute : attributes) { attribute.setGoodsId(goods.getId()); attribute.setAddTime(LocalDateTime.now()); attributeService.add(attribute); } // 商品货品表litemall_product - for(LitemallProduct product : products){ + for (LitemallProduct product : products) { product.setGoodsId(goods.getId()); product.setAddTime(LocalDateTime.now()); productService.add(product); @@ -123,12 +126,14 @@ public class AdminGoodsController { } txManager.commit(status); + qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + return ResponseUtil.ok(); } @PostMapping("/delete") - public Object delete(@LoginAdmin Integer adminId, @RequestBody LitemallGoods goods){ - if(adminId == null){ + public Object delete(@LoginAdmin Integer adminId, @RequestBody LitemallGoods goods) { + if (adminId == null) { return ResponseUtil.unlogin(); } @@ -152,8 +157,8 @@ public class AdminGoodsController { } @PostMapping("/create") - public Object create(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone){ - if(adminId == null){ + public Object create(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone) { + if (adminId == null) { return ResponseUtil.unlogin(); } @@ -163,7 +168,7 @@ public class AdminGoodsController { LitemallProduct[] products = goodsAllinone.getProducts(); String name = goods.getName(); - if(goodsService.checkExistByName(name)){ + if (goodsService.checkExistByName(name)) { return ResponseUtil.fail(403, "商品名已经存在"); } @@ -179,7 +184,7 @@ public class AdminGoodsController { // 商品规格表litemall_goods_specification Map specIds = new HashMap<>(); - for(LitemallGoodsSpecification specification : specifications){ + for (LitemallGoodsSpecification specification : specifications) { specification.setGoodsId(goods.getId()); specification.setAddTime(LocalDateTime.now()); specificationService.add(specification); @@ -187,14 +192,14 @@ public class AdminGoodsController { } // 商品参数表litemall_goods_attribute - for(LitemallGoodsAttribute attribute : attributes){ + for (LitemallGoodsAttribute attribute : attributes) { attribute.setGoodsId(goods.getId()); attribute.setAddTime(LocalDateTime.now()); attributeService.add(attribute); } // 商品货品表litemall_product - for(LitemallProduct product : products){ + for (LitemallProduct product : products) { product.setGoodsId(goods.getId()); product.setAddTime(LocalDateTime.now()); productService.add(product); @@ -205,11 +210,13 @@ public class AdminGoodsController { } txManager.commit(status); + + qCodeService.createGoodShareImage(goods.getId().toString(), goods.getPicUrl(), goods.getName()); + return ResponseUtil.ok(); } - @GetMapping("/catAndBrand") public Object list2(@LoginAdmin Integer adminId) { if (adminId == null) { @@ -221,14 +228,14 @@ public class AdminGoodsController { List l1CatList = categoryService.queryL1(); List categoryList = new ArrayList<>(l1CatList.size()); - for(LitemallCategory l1 : l1CatList){ + for (LitemallCategory l1 : l1CatList) { CatVo l1CatVo = new CatVo(); l1CatVo.setValue(l1.getId()); l1CatVo.setLabel(l1.getName()); List l2CatList = categoryService.queryByPid(l1.getId()); List children = new ArrayList<>(l2CatList.size()); - for(LitemallCategory l2 : l2CatList) { + for (LitemallCategory l2 : l2CatList) { CatVo l2CatVo = new CatVo(); l2CatVo.setValue(l2.getId()); l2CatVo.setLabel(l2.getName()); @@ -243,7 +250,7 @@ public class AdminGoodsController { // 管理员设置“所属品牌商” List list = brandService.all(); List> brandList = new ArrayList<>(l1CatList.size()); - for(LitemallBrand brand : list){ + for (LitemallBrand brand : list) { Map b = new HashMap<>(2); b.put("value", brand.getId()); b.put("label", brand.getName()); @@ -251,7 +258,7 @@ public class AdminGoodsController { } Map data = new HashMap<>(); - data.put("categoryList" ,categoryList); + data.put("categoryList", categoryList); data.put("brandList", brandList); return ResponseUtil.ok(data); } @@ -276,11 +283,11 @@ public class AdminGoodsController { Integer[] categoryIds = new Integer[]{}; if (category != null) { Integer parentCategoryId = category.getPid(); - categoryIds = new Integer[] {parentCategoryId, categoryId}; + categoryIds = new Integer[]{parentCategoryId, categoryId}; } Map data = new HashMap<>(); - data.put("goods" ,goods); + data.put("goods", goods); data.put("specifications", specifications); data.put("products", products); data.put("attributes", attributes); diff --git a/litemall-core/pom.xml b/litemall-core/pom.xml index c4ece35b..a9a61cc5 100644 --- a/litemall-core/pom.xml +++ b/litemall-core/pom.xml @@ -81,6 +81,12 @@ weixin-java-pay 3.0.0 + + org.springframework + spring-test + 5.0.7.RELEASE + compile + diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/notify/WxTemplateSender.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/notify/WxTemplateSender.java index 5f01e7e0..e8dd998d 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/notify/WxTemplateSender.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/notify/WxTemplateSender.java @@ -2,7 +2,6 @@ package org.linlinjava.litemall.core.notify; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; -import me.chanjar.weixin.common.exception.WxErrorException; import org.linlinjava.litemall.db.domain.LitemallUserFormid; import org.linlinjava.litemall.db.service.LitemallUserFormIdService; import org.springframework.beans.factory.annotation.Autowired; @@ -61,7 +60,7 @@ public class WxTemplateSender { try { wxMaService.getMsgService().sendTemplateMsg(msg); formIdService.updateUserFormId(userFormid); - } catch (WxErrorException e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java new file mode 100644 index 00000000..81ed380d --- /dev/null +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java @@ -0,0 +1,129 @@ +package org.linlinjava.litemall.core.qcode; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import me.chanjar.weixin.common.error.WxErrorException; +import org.linlinjava.litemall.core.storage.StorageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.URL; + +@Service +public class QCodeService { + @Autowired + WxMaService wxMaService; + + @Autowired + private StorageService storageService; + + /** + * 创建商品分享图 + * + * @param goodId + * @param goodPicUrl + * @param goodName + */ + public void createGoodShareImage(String goodId, String goodPicUrl, String goodName) { + try { + //创建该商品的二维码 + File file = wxMaService.getQrcodeService().createWxaCodeUnlimit(goodId, "pages/index/index"); + FileInputStream inputStream = new FileInputStream(file); + //将商品图片,商品名字画到模版图中 + byte[] imageData = drawPicture(inputStream, goodPicUrl, goodName); + MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(), "image/jpeg", imageData); + //存储分享图 + storageService.store(multipartFile, getKeyName(goodId)); + } catch (WxErrorException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String getShareImageUrl(String goodId) { + return storageService.generateUrl(getKeyName(goodId)); + } + + private String getKeyName(String goodId) { + return "GOOD_QCODE_" + goodId; + } + + /** + * 将商品图片,商品名字画到模版图中 + * + * @param qrCodeImg 二维码图片 + * @param goodPicUrl 商品图片地址 + * @param goodName 商品名称 + * @return + * @throws IOException + */ + private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName) throws IOException { + //底图 + ClassPathResource redResource = new ClassPathResource("back.jpg"); + BufferedImage red = ImageIO.read(redResource.getInputStream()); + + //商品图片 + URL avatarUrl = new URL(goodPicUrl); + BufferedImage goodImage = ImageIO.read(avatarUrl); + + //小程序二维码 +// URL qrCodeUrl = new URL(qrCodeImg); + BufferedImage qrCodeImage = ImageIO.read(qrCodeImg); + + + // --- 画图 --- + + //底层空白 bufferedImage + BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); + + //画上图片 + drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight()); + + //画上商品图片 + drawImgInImg(baseImage, goodImage, 24, 24, 520, 520); + + + //画上小程序二维码 + drawImgInImg(baseImage, qrCodeImage, 143, 770, 280, 280); + + + //写上商品名称 + drawTextInImg(baseImage, goodName, 143, 614); + + + //转jpg + BufferedImage result = new BufferedImage(baseImage.getWidth(), baseImage + .getHeight(), BufferedImage.TYPE_3BYTE_BGR); + result.getGraphics().drawImage(baseImage, 0, 0, null); + ByteArrayOutputStream bs = new ByteArrayOutputStream(); + ImageIO.write(result, "jpg", bs); + + //最终byte数组 + return bs.toByteArray(); + } + + private void drawTextInImg(BufferedImage baseImage, String textToWrite, int x, int y) { + Graphics2D g2D = (Graphics2D) baseImage.getGraphics(); + g2D.setColor(new Color(167, 136, 69)); + g2D.setFont(new Font("黑体", Font.PLAIN, 42)); + g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + g2D.drawString(textToWrite, x, y); + g2D.dispose(); + } + + private void drawImgInImg(BufferedImage baseImage, BufferedImage imageToWrite, int x, int y, int width, int heigth) { + Graphics2D g2D = (Graphics2D) baseImage.getGraphics(); + g2D.drawImage(imageToWrite, x, y, width, heigth, null); + g2D.dispose(); + } +} diff --git a/litemall-core/src/main/resources/back.jpg b/litemall-core/src/main/resources/back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..159bfdac83c2e09096a0abd2437df067d7679c4a GIT binary patch literal 50626 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 XBK~yE+|D~(-&1w{bY=ezkjMWIiZ@ZX literal 0 HcmV?d00001 diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java index eca36c4d..ec70e2c6 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAuthController.java @@ -2,12 +2,10 @@ package org.linlinjava.litemall.wx.web; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import me.chanjar.weixin.common.exception.WxErrorException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.linlinjava.litemall.core.notify.NotifyService; import org.linlinjava.litemall.core.notify.NotifyType; -import org.linlinjava.litemall.core.notify.SmsResult; import org.linlinjava.litemall.core.util.CharUtil; import org.linlinjava.litemall.core.util.JacksonUtil; import org.linlinjava.litemall.core.util.RegexUtil; @@ -137,7 +135,7 @@ public class WxAuthController { WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(code); sessionKey = result.getSessionKey(); openId = result.getOpenid(); - } catch (WxErrorException e) { + } catch (Exception e) { e.printStackTrace(); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java index 19940bf4..1d4dfd2e 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGoodsController.java @@ -3,6 +3,7 @@ package org.linlinjava.litemall.wx.web; import com.mysql.jdbc.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.linlinjava.litemall.core.qcode.QCodeService; import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.db.domain.*; import org.linlinjava.litemall.db.service.*; @@ -49,6 +50,8 @@ public class WxGoodsController { private LitemallSearchHistoryService searchHistoryService; @Autowired private LitemallGoodsSpecificationService goodsSpecificationService; + @Autowired + private QCodeService qCodeService; /** @@ -147,6 +150,9 @@ public class WxGoodsController { data.put("attribute", goodsAttributeList); data.put("brand", brand); + //商品分享图片地址 + data.put("shareImage", qCodeService.getShareImageUrl(info.getId().toString())); + return ResponseUtil.ok(data); } diff --git a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java index 1599cc74..b3ce5268 100644 --- a/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java +++ b/litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxOrderController.java @@ -548,7 +548,7 @@ public class WxOrderController { String orderSn = result.getOutTradeNo(); String payId = result.getTransactionId(); // 分转化成元 - String totalFee = BaseWxPayResult.feeToYuan(result.getTotalFee()); + String totalFee = BaseWxPayResult.fenToYuan(result.getTotalFee()); LitemallOrder order = orderService.findBySn(orderSn); if (order == null) { diff --git a/pom.xml b/pom.xml index aa99675a..9ef2bd8d 100644 --- a/pom.xml +++ b/pom.xml @@ -86,13 +86,13 @@ com.github.binarywang weixin-java-pay - 3.0.0 + 3.1.0 com.github.binarywang weixin-java-miniapp - 3.0.0 + 3.1.0