pom.xml
@@ -28,6 +28,13 @@ </properties> <dependencies> <!-- 图片压缩--> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
@@ -22,14 +22,18 @@ import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.coobird.thumbnailator.Thumbnails; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.io.IOException; import java.awt.image.BufferedImage; import java.io.*; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -55,14 +59,33 @@ new FebsResponse().message("上传文件为空"); } //文件加密 BASE64Encoder base64Encoder =new BASE64Encoder(); String base64EncoderImg = null; String base64EncoderImg = ""; try { base64EncoderImg = base64Encoder.encode(file.getBytes()); } catch (IOException e) { //输出到BufferedImage BufferedImage bufferedImage = Thumbnails.of(file.getInputStream()) // 图片大小(长宽)压缩比例 从0-1,1表示原图 .scale(1f) // 图片质量压缩比例 从0-1,越接近1质量越好 .outputQuality(0.5f) .asBufferedImage(); //对内存中的图片文件进行Base64处理 ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流 ImageIO.write(bufferedImage, "jpg", newBaos);//写入流中 byte[] bytes = newBaos.toByteArray();//转换成字节 base64EncoderImg = new BASE64Encoder().encode(bytes); // base64EncoderImg = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } //文件加密 // BASE64Encoder base64Encoder =new BASE64Encoder(); // try { // base64EncoderImg = base64Encoder.encode(file.getBytes()); // } catch (IOException e) { // e.printStackTrace(); // } String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); // String imageFuffix = ".png"; @@ -82,6 +105,19 @@ return map; } public String Base64ImageByMemory(BufferedImage pic) { String imgString = ""; ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流 try { ImageIO.write(pic, "jpg", newBaos);//写入流中 byte[] bytes = newBaos.toByteArray();//转换成字节 imgString = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return imgString; } /** * 商品列表 * @param mallGoods src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -113,6 +113,15 @@ } /** * 订单列表-修改物流编号 */ @PostMapping("deliverGoodsUpdate") @ControllerEndpoint(operation = "订单列表-修改物流编号", exceptionMessage = "操作失败") public FebsResponse deliverGoodsUpdate(@Valid DeliverGoodsDto deliverGoodsDto) { return adminMallOrderService.deliverGoodsUpdate(deliverGoodsDto); } /** * 订单列表-取消订单 * * @param id src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java
@@ -2,11 +2,15 @@ import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.utils.FebsUtil; import cc.mrbird.febs.mall.entity.MallExpressInfo; import cc.mrbird.febs.mall.entity.MallOrderRefund; import cc.mrbird.febs.mall.mapper.MallExpressInfoMapper; import cc.mrbird.febs.mall.mapper.MallOrderRefundMapper; import cc.mrbird.febs.mall.service.IAdminMallOrderService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; @@ -23,6 +27,8 @@ private final IAdminMallOrderService adminMallOrderService; private final MallOrderRefundMapper mallOrderRefundMapper; private final MallExpressInfoMapper mallExpressInfoMapper; public static long idFromMember; @@ -69,6 +75,13 @@ public String deliverGoods(@PathVariable long id, Model model) { AdminMallOrderVo data = adminMallOrderService.getMallOrderInfoById(id); data.setExpressCom("中通快递"); MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id); if(ObjectUtil.isNotEmpty(mallExpressInfo)){ data.setExpressNo(mallExpressInfo.getExpressNo()); data.setExpressCom(mallExpressInfo.getExpressCom()); }else{ data.setExpressCom("中通快递"); } model.addAttribute("deliverInfo", data); return FebsUtil.view("modules/order/deliverGoods"); } src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java
@@ -74,4 +74,6 @@ IPage<MallRefundEntity> getOrderRefundListInPage(MallRefundEntity mallRefundEntity, QueryRequest request); IPage<AdminGoodsStatisticsVo> goodsStatistics(MallOrderItem mallOrderItem, QueryRequest request); FebsResponse deliverGoodsUpdate(DeliverGoodsDto deliverGoodsDto); } src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -79,7 +79,7 @@ stringBuffer.append(mallOrderItem.getGoodsName()) .append("-") .append(mallOrderItem.getSkuName()) .append("*").append(mallOrderItem.getCnt()).append(";"); .append("*").append(mallOrderItem.getCnt()).append(";"); } adminMallOrderInfoVo.setGoodsName(stringBuffer.toString()); } @@ -449,6 +449,40 @@ } @Override public FebsResponse deliverGoodsUpdate(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId()); if(ObjectUtil.isEmpty(mallOrderInfo)){ return new FebsResponse().fail().message("订单不存在,刷新后重试"); } Integer status = mallOrderInfo.getStatus(); if(3 != status){ return new FebsResponse().fail().message("订单不是待收货状态"); } Integer deliveryType = mallOrderInfo.getDeliveryType(); if(2 != deliveryType){ return new FebsResponse().fail().message("订单的配送方式不是快递"); } String expressNo = deliverGoodsDto.getExpressNo(); if(StrUtil.isEmpty(expressNo)){ return new FebsResponse().fail().message("请输入物流单号"); } String expressCom = deliverGoodsDto.getExpressCom(); if(StrUtil.isEmpty(expressCom)){ return new FebsResponse().fail().message("请输入物流公司"); } MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId()); if(ObjectUtil.isEmpty(mallExpressInfo)){ return new FebsResponse().fail().message("请先发货"); } mallExpressInfo.setExpressNo(expressNo); mallExpressInfo.setExpressCom(expressCom); mallExpressInfoMapper.updateById(mallExpressInfo); return new FebsResponse().success(); } @Override public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) { MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo()); if (mallOrderInfo == null) { src/main/java/cc/mrbird/febs/mall/vo/AdminMallOrderVo.java
@@ -16,4 +16,6 @@ private String address; private String expressCom; private String expressNo; } src/main/resources/templates/febs/views/modules/order/deliverGoods.html
@@ -62,6 +62,7 @@ </div> <div class="layui-form-item febs-hide"> <button class="layui-btn" lay-submit="" lay-filter="deliver-update-form-submit" id="submit"></button> <button class="layui-btn" lay-submit="" lay-filter="deliverInfo-update-form-submit" id="deliverInfoSubmit"></button> </div> </form> </div> @@ -90,6 +91,7 @@ "name": deliverInfo.name, "phone": deliverInfo.phone, "expressCom": deliverInfo.expressCom, "expressNo": deliverInfo.expressNo, "address": deliverInfo.address }); } @@ -102,5 +104,15 @@ }); return false; }); form.on('submit(deliverInfo-update-form-submit)', function (data) { // febs.alert.success('操作成功'); febs.post(ctx + 'admin/order/deliverGoodsUpdate', data.field, function () { layer.closeAll(); febs.alert.success('操作成功'); $('#febs-order').find('#query').click(); }); return false; }); }); </script> src/main/resources/templates/febs/views/modules/order/orderList.html
@@ -321,9 +321,21 @@ layEvent = obj.event; if (layEvent === 'deliverGoods') { febs.modal.open('发货', 'modules/order/deliverGoods/' + data.id, { btn: ['确认', '取消'], btn: ['确认','取消'], yes: function (index, layero) { $('#deliver-update').find('#submit').trigger('click'); // $query.click(); }, btn2: function () { layer.closeAll(); } }); } if (layEvent === 'updateDeliver') { febs.modal.open('修改物流信息', 'modules/order/deliverGoods/' + data.id, { btn: ['确认','取消'], yes: function (index, layero) { $('#deliver-update').find('#deliverInfoSubmit').trigger('click'); // $query.click(); }, btn2: function () { @@ -442,6 +454,9 @@ if(d.status === 2){ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>' }else if(d.status === 3){ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateDeliver" shiro:hasPermission="user:update">修改物流信息</button>' }else{ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>' } @@ -518,7 +533,7 @@ //用于包含内容 var v = document.createElement("div"); //页面头部,导入css ,media="print"表示打印时使用该样式 var f = ["<head>", "<style>", "div{font-size:8px;}", ".main{width:100%;height:10%}", var f = ["<head>", "<style>", "div{font-size:8px;}", ".main{width:100%;}", ".main div{width:100%;display:inline-block;}", "</style>", "</head>" ].join(""); var contentHtml = ""; @@ -527,12 +542,11 @@ var template = "<div class='main'>" + "<div style='text-align: center;font-size: 10px;font-weight: bold;margin-bottom: 10px'>订单编号:" + data.orderNo + "</div>" + "<div>收货人:" + data.name + ",电话:" + data.phone + ",地址:" + data.address + "</div><br><br>" + // "<div>电话:" + data.phone + "</div><br><br>" + // "<div>地址:" + data.address + "</div><br><br>" + // "<div>编号:" + data.orderNo + "</div><br><br>" + "<div>商品:" + data.goodsName + "</div><br><br>" + "<div>备注:" + data.remark + "</div><br><br>" + "<span style='font-size: 10px;font-weight: bold;'>收货人:</span><span>" + data.name + ",</span>" + "<span style='font-size: 10px;font-weight: bold;'>电话:</span><span>" + data.phone + ",</span>" + "<span style='font-size: 10px;font-weight: bold;'>地址:</span><span>" + data.address + "</span><br>" + "<span style='font-size: 10px;font-weight: bold;'>商品:</span><span>" + data.goodsName + "</span><br>" + "<span style='font-size: 10px;font-weight: bold;'>备注:</span><span>" + data.remark + "</span><br>" + "</div>" contentHtml += template;