Browse Source

图片添加水印

qin 1 năm trước cách đây
mục cha
commit
0e7b9cb45f

+ 24 - 1
src/main/java/com/poteviohealth/cgp/statistics/controller/OrderController.java

@@ -7,6 +7,8 @@ import com.poteviohealth.cgp.common.exception.BusinessException;
 import com.poteviohealth.cgp.common.facade.cache.CacheService;
 import com.poteviohealth.cgp.common.facade.constrain.OrgConstrainService;
 import com.poteviohealth.cgp.common.facade.lock.DistributedLock;
+import com.poteviohealth.cgp.common.facade.log.OperateType;
+import com.poteviohealth.cgp.common.facade.log.OperationLog;
 import com.poteviohealth.cgp.common.facade.time.MethodTime;
 import com.poteviohealth.cgp.common.filter.TokenContext;
 import com.poteviohealth.cgp.common.filter.repeatSubmit.RepeatSubmit;
@@ -16,6 +18,7 @@ import com.poteviohealth.cgp.statistics.model.outdto.DishesOrderWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderCostWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
 import com.poteviohealth.cgp.statistics.service.IOrderService;
+import com.poteviohealth.cgp.statistics.service.IWatermarkImgService;
 import com.poteviohealth.cgp.statistics.utils.ExcelUtils2;
 import com.poteviohealth.cgp.statistics.utils.OssUtils;
 import io.swagger.annotations.Api;
@@ -49,6 +52,8 @@ public class OrderController extends BaseWebController {
     private IOrderService orderService;
     @Resource
     private OssUtils ossUtils;
+    @Resource
+    private IWatermarkImgService watermarkImgService;
 
     @PostMapping(value = "/orderServiceExport")
     @ApiOperation(httpMethod = "POST", value = "工单Excel导出")
@@ -194,11 +199,29 @@ public class OrderController extends BaseWebController {
     @ResponseBody
     public VaultsResponse<String> uploadArrayFile(@RequestParam("file") MultipartFile file,@RequestParam("orderId") Long orderId){
         log.info(orderId);
-        VaultsResponse<String> vaultsResponse = ossUtils.uploadArrayFile2(file);
+        VaultsResponse<String> vaultsResponse = ossUtils.uploadOneFile(file,orderId);
         log.info(vaultsResponse.getData());
        /* if(vaultsResponse.validate()){
             return orderService.updateOrderUrl(list);
         }*/
         return vaultsResponse;
     }
+
+    @PostMapping("/orderFile")
+    @ApiOperation(value = "工单照片")
+    @ResponseBody
+    @OperationLog(type = OperateType.UPDATE, description = "工单照片处理")
+    @MethodTime
+    public VaultsResponse orderFile(@RequestBody List<PriceUploadDto> list) {
+        //处理水印
+       VaultsResponse<List<PriceUploadDto>> vaultsResponse = watermarkImgService.printingWatermark(list);
+       if(!vaultsResponse.validate()){
+           return vaultsResponse;
+       }
+        list = vaultsResponse.getData();
+        //处理照片
+        watermarkImgService.updateOrderUrl(list);
+
+        return VaultsResponse.success();
+    }
 }

+ 0 - 6
src/main/java/com/poteviohealth/cgp/statistics/mapper/OrderMapper.java

@@ -197,7 +197,6 @@ public interface OrderMapper extends BaseMapper<Order>{
     @SqlParser(filter = true)
     int costOrderPageListAllSize(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("dbName")String dbName,@Param("operatorId")Integer operatorId);
 
-
     /**
      * excel
      * @param wrapper
@@ -205,9 +204,4 @@ public interface OrderMapper extends BaseMapper<Order>{
      */
     @SqlParser(filter=true)
     LinkedList<OrderCostWebOutDTO> costOrderExcel(@Param(Constants.WRAPPER) Wrapper wrapper,@Param("dbName")String dbName,@Param("operatorId")Integer operatorId,@Param("start")Integer start);
-
-    @SqlParser(filter = true)
-    int updateOrderUrl(@Param("operatorId")Integer operatorId, @Param("startUrl") String startUrl,@Param("endUrl") String endUrl,@Param("dbName") String dbName,@Param("orderId") Long orderId);
-
-
 }

+ 18 - 0
src/main/java/com/poteviohealth/cgp/statistics/mapper/WatermarkImgMapper.java

@@ -0,0 +1,18 @@
+package com.poteviohealth.cgp.statistics.mapper;
+
+import com.baomidou.mybatisplus.annotation.SqlParser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poteviohealth.cgp.statistics.model.WatermarkImg;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 图片处理
+ * @author Qin
+ */
+@Mapper
+public interface WatermarkImgMapper extends BaseMapper<WatermarkImg>{
+    @SqlParser(filter = true)
+    int updateOrderUrl(@Param("operatorId")Integer operatorId, @Param("startUrl") String startUrl, @Param("endUrl") String endUrl, @Param("dbName") String dbName, @Param("orderId") Long orderId);
+
+}

+ 25 - 0
src/main/java/com/poteviohealth/cgp/statistics/model/WatermarkImg.java

@@ -0,0 +1,25 @@
+package com.poteviohealth.cgp.statistics.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poteviohealth.cgp.common.model.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 图片水印记录
+ * @author Qin
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("f_watermark_img")
+public class WatermarkImg extends BaseEntity {
+    @ApiModelProperty(value = "原始照片路径")
+    private String originalImg;
+    @ApiModelProperty(value = "新照片路径")
+    private String nowImg;
+    @ApiModelProperty(value = "图片标识")
+    private String uid;
+}

+ 7 - 3
src/main/java/com/poteviohealth/cgp/statistics/model/indto/PriceUploadDto.java

@@ -28,12 +28,16 @@ public class PriceUploadDto {
     @ApiModelProperty(value="水印时间")
     private String date;
 
-    @ApiModelProperty(value="图片")
-    private String base64;
-
     @ApiModelProperty(value="上传后的地址")
     private String url;
 
     @ApiModelProperty(value="类型")
     private String type;
+
+    @ApiModelProperty(value = "打卡经度")
+    private Double punchLongitude;
+    @ApiModelProperty(value = "打卡纬度")
+    private Double punchLatitude;
+    @ApiModelProperty(value = "打卡地址")
+    private String punchAddress;
 }

+ 4 - 10
src/main/java/com/poteviohealth/cgp/statistics/service/IOrderService.java

@@ -1,9 +1,11 @@
 package com.poteviohealth.cgp.statistics.service;
 
-import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.cgp.common.service.IBaseService;
 import com.poteviohealth.cgp.statistics.model.Order;
-import com.poteviohealth.cgp.statistics.model.indto.*;
+import com.poteviohealth.cgp.statistics.model.indto.DishesOrderWebInDTO;
+import com.poteviohealth.cgp.statistics.model.indto.OrderCostWebInDTO;
+import com.poteviohealth.cgp.statistics.model.indto.OrderServiceWebInDTO;
+import com.poteviohealth.cgp.statistics.model.indto.OrderWebInDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.DishesOrderWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderCostWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
@@ -43,12 +45,4 @@ public interface IOrderService extends IBaseService<Order> {
      * @return
      */
     List<OrderExcelDTO> excelList(OrderWebInDTO orderWebInDTO);
-
-    /**
-     * 更新图片地址
-     * @param list
-     * @return
-     */
-    VaultsResponse updateOrderUrl(List<PriceUploadDto> list);
-
 }

+ 30 - 0
src/main/java/com/poteviohealth/cgp/statistics/service/IWatermarkImgService.java

@@ -0,0 +1,30 @@
+package com.poteviohealth.cgp.statistics.service;
+
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.common.service.IBaseService;
+import com.poteviohealth.cgp.statistics.model.WatermarkImg;
+import com.poteviohealth.cgp.statistics.model.indto.PriceUploadDto;
+
+import java.util.List;
+
+/**
+ * 图片处理
+ * @author Qin
+ */
+public interface IWatermarkImgService extends IBaseService<WatermarkImg> {
+
+    /**
+     * 更新图片地址
+     * @param list
+     * @return
+     */
+    VaultsResponse updateOrderUrl(List<PriceUploadDto> list);
+
+    /**
+     * 处理照片水印
+     * @param list
+     * @return
+     */
+    VaultsResponse<List<PriceUploadDto>> printingWatermark(List<PriceUploadDto> list);
+
+}

+ 10 - 32
src/main/java/com/poteviohealth/cgp/statistics/service/impl/OrderServiceImpl.java

@@ -29,6 +29,8 @@ import com.poteviohealth.cgp.statistics.model.Order;
 import com.poteviohealth.cgp.statistics.model.indto.*;
 import com.poteviohealth.cgp.statistics.model.outdto.*;
 import com.poteviohealth.cgp.statistics.service.IOrderService;
+import com.poteviohealth.cgp.statistics.utils.OssUtils;
+import com.poteviohealth.cgp.statistics.utils.Watermark;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.EnumUtils;
@@ -36,8 +38,14 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.ibatis.builder.BuilderException;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.ParseException;
@@ -54,6 +62,8 @@ public class OrderServiceImpl extends BaseServiceImpl<OrderMapper, Order> implem
 
     @Value("${sync.dbName}")
     private String dbName;
+    @Resource
+    private OssUtils ossUtils;
     @Override
     public void statisticsOrder(String dateTime){
         try {
@@ -314,38 +324,6 @@ public class OrderServiceImpl extends BaseServiceImpl<OrderMapper, Order> implem
         }
     }
 
-    @Override
-    public VaultsResponse updateOrderUrl(List<PriceUploadDto> list) {
-        List<String> startUrl = Lists.newArrayList();
-        List<String> endUrl = Lists.newArrayList();
-        Long orderId = null;
-        for (PriceUploadDto dto : list) {
-            orderId = dto.getOrderId();
-            if(StringUtils.isNotEmpty(dto.getUrl())){
-                if(dto.getIndex() <=3){
-                    startUrl.add(dto.getUrl());
-                }else{
-                    endUrl.add(dto.getUrl());
-                }
-            }
-        }
-        String start = "";
-        if(!startUrl.isEmpty()){
-            start = startUrl.stream().map(String::valueOf).collect(Collectors.joining(","));
-        }
-
-        String end = "";
-        if(!endUrl.isEmpty()){
-            end = endUrl.stream().map(String::valueOf).collect(Collectors.joining(","));
-        }
-
-        if(orderId != null){
-            baseMapper.updateOrderUrl(TokenContext.cureOperatorId(),start ,end , dbName, orderId);
-        }
-        return VaultsResponse.success();
-    }
-
-
     private String getPayAccountString(String payAccount){
         StringBuilder sb = new StringBuilder();
         for (String s : payAccount.split(",")) {

+ 100 - 0
src/main/java/com/poteviohealth/cgp/statistics/service/impl/WatermarkImgServiceImpl.java

@@ -0,0 +1,100 @@
+package com.poteviohealth.cgp.statistics.service.impl;
+
+import com.google.common.collect.Lists;
+import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.common.service.impl.BaseServiceImpl;
+import com.poteviohealth.cgp.statistics.mapper.WatermarkImgMapper;
+import com.poteviohealth.cgp.statistics.model.WatermarkImg;
+import com.poteviohealth.cgp.statistics.model.indto.PriceUploadDto;
+import com.poteviohealth.cgp.statistics.service.IWatermarkImgService;
+import com.poteviohealth.cgp.statistics.utils.OssUtils;
+import com.poteviohealth.cgp.statistics.utils.Watermark;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 居家大屏
+ * @author Qin
+ */
+@Service
+@Log4j2
+public class WatermarkImgServiceImpl extends BaseServiceImpl<WatermarkImgMapper, WatermarkImg> implements IWatermarkImgService {
+
+    @Value("${sync.dbName}")
+    private String dbName;
+    @Resource
+    private OssUtils ossUtils;
+
+    @Override
+    public VaultsResponse updateOrderUrl(List<PriceUploadDto> list) {
+        List<String> startUrl = Lists.newArrayList();
+        List<String> endUrl = Lists.newArrayList();
+        Long orderId = null;
+        for (PriceUploadDto dto : list) {
+            orderId = dto.getOrderId();
+            if(StringUtils.isNotEmpty(dto.getUrl())){
+                if(dto.getIndex() <=3){
+                    startUrl.add(dto.getUrl());
+                }else{
+                    endUrl.add(dto.getUrl());
+                }
+            }
+        }
+        String start = "";
+        if(!startUrl.isEmpty()){
+            start = startUrl.stream().map(String::valueOf).collect(Collectors.joining(","));
+        }
+
+        String end = "";
+        if(!endUrl.isEmpty()){
+            end = endUrl.stream().map(String::valueOf).collect(Collectors.joining(","));
+        }
+
+        if(orderId != null){
+            baseMapper.updateOrderUrl(TokenContext.cureOperatorId(),start ,end , dbName, orderId);
+        }
+        return VaultsResponse.success();
+    }
+
+    @Override
+    public VaultsResponse<List<PriceUploadDto>> printingWatermark(List<PriceUploadDto> list) {
+        for (PriceUploadDto dto : list) {
+            if(dto.getType().contains("video")){
+                continue;
+            }
+            if(StringUtils.isNotBlank(dto.getDate()) && StringUtils.isNotBlank(dto.getUrl())){
+                String uid = (dto.getUrl().split("/")[dto.getUrl().split("/").length-1]).split("\\.")[0];
+                WatermarkImg watermarkImg = this.getEntityByBeanId("uid",uid );
+                if(watermarkImg != null){
+                    dto.setUrl(watermarkImg.getOriginalImg());
+                }
+                MultipartFile image = Watermark.createPrice(dto);
+                VaultsResponse vaultsResponse = ossUtils.uploadOneFile(image,dto.getOrderId());
+                if(!vaultsResponse.validate()){
+                    return VaultsResponse.failed("水印处理失败");
+                }
+                WatermarkImg newWi = new WatermarkImg();
+                newWi.setNowImg(vaultsResponse.getData().toString());
+                newWi.setOriginalImg(dto.getUrl());
+                newWi.setUid((newWi.getNowImg().split("/")[newWi.getNowImg().split("/").length-1]).split("\\.")[0]);
+                this.save(newWi);
+                dto.setUrl(newWi.getNowImg());
+            }
+        }
+        return VaultsResponse.success(list);
+    }
+
+    public static void main(String[] args) {
+        String url = "https://ptsubsidy.oss-cn-beijing.aliyuncs.com/yqaa/S123N-FAD786CB-AFB3-402C-9FD0-953838D74E8E.jpg";
+        String val = url.split("/")[url.split("/").length-1];
+        System.out.println(val.split("\\.")[0]);
+    }
+}

+ 2 - 84
src/main/java/com/poteviohealth/cgp/statistics/utils/OssUtils.java

@@ -4,9 +4,7 @@ import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
 import com.poteviohealth.cgp.common.model.VaultsResponse;
 import com.poteviohealth.cgp.common.utils.CgpTool;
-import com.poteviohealth.cgp.statistics.model.indto.PriceUploadDto;
 import lombok.extern.log4j.Log4j2;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
@@ -14,7 +12,6 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.Base64;
-import java.util.List;
 
 /**
  * 阿里云图片上传工具类
@@ -39,39 +36,12 @@ public class OssUtils {
     @Value("${aliyun.oss.dir}")
     private String dir;
 
-    public String uploadOneFile(MultipartFile file,String key) {
-        // 创建OSSClient实例。
-        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
-        //设置文件名
-        Integer pos = file.getName().lastIndexOf('.');
-        String suffix = "";
-        if (pos != -1) {
-            suffix = file.getName().substring(pos);
-        }
-        String fileName = dir+"S"+key+"N-"+ CgpTool.generateUUID() +suffix;
-
-        try {
-            // 创建PutObject请求。
-            ossClient.putObject(bucketName, fileName, file.getInputStream());
-
-            String url = "https://" + bucketName + "." + endPoint + "/" + fileName;
-            return url;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        } finally {
-            if (ossClient != null) {
-                ossClient.shutdown();
-            }
-        }
-    }
-
     private InputStream base64ToInputStream(String base64String) {
         byte[] bytes = Base64.getDecoder().decode(base64String);
         return new ByteArrayInputStream(bytes);
     }
 
-    public VaultsResponse<String> uploadArrayFile2(MultipartFile dto) {
+    public VaultsResponse<String> uploadOneFile(MultipartFile dto,Long orderId) {
         // 创建OSSClient实例。
         OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
         try {
@@ -81,7 +51,7 @@ public class OssUtils {
                 if (pos != -1) {
                     suffix = dto.getOriginalFilename().substring(pos);
                 }
-                String fileName = dir+"S"+123+"N-"+ CgpTool.generateUUID() +suffix;
+                String fileName = dir+"S"+orderId+"N-"+ CgpTool.generateUUID() +suffix;
                 // 创建PutObject请求。
                 ossClient.putObject(bucketName, fileName, dto.getInputStream());
 
@@ -99,58 +69,6 @@ public class OssUtils {
         }
     }
 
-
-    public VaultsResponse<List<PriceUploadDto>> uploadArrayFile(List<PriceUploadDto> dto) {
-        Long orderId = null;
-        Boolean checked = false;
-        for (PriceUploadDto uploadDto : dto) {
-            if(uploadDto.getOrderId() != null){
-                orderId = uploadDto.getOrderId();
-            }
-            if(StringUtils.isNotEmpty(uploadDto.getBase64())){
-                checked = true;
-                break;
-            }
-        }
-        if(orderId == null){
-            return VaultsResponse.failed("关键参数为空");
-        }
-        if(!checked){
-            return VaultsResponse.success();
-        }
-        // 创建OSSClient实例。
-        OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, secretAccessKey);
-        try {
-            //设置文件名
-            for (PriceUploadDto uploadDto : dto) {
-                if(StringUtils.isEmpty(uploadDto.getBase64())){
-                    continue;
-                }
-                Integer pos = uploadDto.getUrl().lastIndexOf('.');
-                String suffix = "";
-                if (pos != -1) {
-                    suffix = uploadDto.getUrl().substring(pos);
-                }
-                String fileName = dir+"S"+orderId+"N-"+ CgpTool.generateUUID() +suffix;
-                // 创建PutObject请求。
-                ossClient.putObject(bucketName, fileName, base64ToInputStream(uploadDto.getBase64()));
-
-                String url = "https://" + bucketName + "." + endPoint + "/" + fileName;
-                // System.out.println(url);
-                uploadDto.setUrl(url);
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        } finally {
-            if (ossClient != null) {
-                ossClient.shutdown();
-            }
-        }
-        return VaultsResponse.success(dto);
-    }
-
     public boolean deleteFile(String fileUrl) {
 
         // 创建OSSClient实例。

+ 181 - 0
src/main/java/com/poteviohealth/cgp/statistics/utils/Watermark.java

@@ -0,0 +1,181 @@
+package com.poteviohealth.cgp.statistics.utils;
+
+import com.poteviohealth.cgp.common.utils.DateUtils;
+import com.poteviohealth.cgp.statistics.model.indto.PriceUploadDto;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Date;
+
+/**
+ * 水印处理
+ * @author Qin
+ */
+public class Watermark {
+
+
+    /**
+     * 读取网络图片
+     *
+     * @param path 网络图片地址
+     */
+    public static Image readNetworkPicture(String path) {
+        if (null == path) {
+            throw new RuntimeException("网络图片路径不能为空");
+        }
+        try {
+            // 创建一个URL对象,获取网络图片的地址信息
+            URL url = new URL(path);
+            // 将URL对象输入流转化为图片对象 (url.openStream()方法,获得一个输入流)
+            BufferedImage bugImg = ImageIO.read(url.openStream());
+            if (null == bugImg) {
+                System.out.println(path);
+                throw new RuntimeException("网络图片地址不正确");
+            }
+            return bugImg;
+        } catch (IOException e) {
+            System.out.println(path);
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 水印处理
+     *
+     * @param image     图片对象
+     * @param watermark 水印内容(文字水印内容/图片水印的存放路径)
+     */
+    public static BufferedImage manageWatermark(Image image, String watermark) {
+        int imgWidth = image.getWidth(null);
+
+        int imgHeight = image.getHeight(null);
+        BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);
+        // 加水印:
+        // 创建画笔
+        Graphics2D graphics = bufImg.createGraphics();
+        // 绘制原始图片
+        graphics.drawImage(image, 0, 0, imgWidth, imgHeight, null);
+
+        // 校验水印的类型
+            if (StringUtils.isEmpty(watermark)) {
+                throw new RuntimeException("文字水印内容不能为空");
+            }
+            // 添加文字水印:
+            // 根据图片的背景设置水印颜色
+            graphics.setColor(new Color(255, 255, 255, 255));
+            // 设置字体  画笔字体样式为微软雅黑,加粗,文字大小为45pt
+            int size = imgWidth/25;
+            graphics.setFont(new Font("微软雅黑", Font.PLAIN, size));
+            // 数组长度
+            String[] waterMarkContents = watermark.split("\n");
+            int contentLength = waterMarkContents.length;
+            // 获取水印文字中最长的
+            int maxLength = 0;
+            for (int i = 0; i < contentLength; i++) {
+                int fontLen = getWatermarkLength(waterMarkContents[i], graphics);
+                if (maxLength < fontLen) {
+                    maxLength = fontLen;
+                }
+            }
+
+            for (int j = 0; j < contentLength; j++) {
+                watermark = waterMarkContents[j];
+                int tempX = 10;
+                int tempY = size+10;
+                // 单字符长度
+                int tempCharLen = 0;
+                // 单行字符总长度临时计算
+                int tempLineLen = 0;
+                StringBuffer sb = new StringBuffer();
+                for (int i = 0; i < watermark.length(); i++) {
+                    char tempChar = watermark.charAt(i);
+                    tempCharLen = getCharLen(tempChar, graphics);
+                    tempLineLen += tempCharLen;
+                    if (tempLineLen >= imgWidth) {
+                        // 长度已经满一行,进行文字叠加
+                        graphics.drawString(sb.toString(), tempX, tempY);
+                        // 清空内容,重新追加
+                        sb.delete(0, sb.length());
+                        tempLineLen = 0;
+                    }
+                    // 追加字符
+                    sb.append(tempChar);
+                }
+                // 通过设置后两个输入参数给水印定位
+                graphics.drawString(sb.toString(), 20, imgHeight - (contentLength - j) * tempY-10);
+            }
+            graphics.dispose();
+     /*   // 输出图片
+        try {
+            File file = new File(url);
+            File parentDir = file.getParentFile();
+
+            // 如果父目录不存在,则创建它
+            if (!parentDir.exists()) {
+                parentDir.mkdirs();
+            }
+            FileOutputStream outImgStream = new FileOutputStream(url);
+            ImageIO.write(bufImg, "jpg", outImgStream);
+            outImgStream.flush();
+            outImgStream.close();
+            return "水印添加成功";
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }*/
+
+        return bufImg;
+    }
+
+    public static int getCharLen(char c, Graphics2D g) {
+        return g.getFontMetrics(g.getFont()).charWidth(c);
+    }
+
+    /**
+     * 添加水印
+     *
+     * @param path          图片路径
+     * @param watermark     水印内容(文字水印内容/图片水印的存放路径)
+     */
+    public static BufferedImage addWatermark(String path, String watermark) {
+        Image image = readNetworkPicture(path);
+        // 添加文字水印
+       return  manageWatermark(image,watermark);
+    }
+
+    /**
+     * 获取水印文字的长度
+     *
+     * @param watermarkContent 文字水印内容
+     * @param graphics         图像类
+     */
+    private static int getWatermarkLength(String watermarkContent, Graphics2D graphics) {
+        return graphics.getFontMetrics(graphics.getFont()).charsWidth(watermarkContent.toCharArray(), 0, watermarkContent.length());
+    }
+
+    public static MultipartFile createPrice(PriceUploadDto imageConfig) {
+        String url = imageConfig.getUrl();
+        try {
+            String week = DateUtils.getWeek(org.apache.commons.lang3.time.DateUtils.parseDate(imageConfig.getDate(), "yyyy-MM-dd HH:mm:ss"));
+            Date date =org.apache.commons.lang3.time.DateUtils.parseDate(imageConfig.getDate(), "yyyy-MM-dd HH:mm:ss");
+            String dateVal = DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
+            String textWatermark = week + "\n" + dateVal + "\n" + imageConfig.getPunchLatitude() + "," + imageConfig.getPunchLongitude() + "\n" + imageConfig.getPunchAddress();
+            ByteArrayOutputStream bo = new ByteArrayOutputStream();
+            ImageIO.write(addWatermark(url, textWatermark), "jpg", bo );
+            //转换为MultipartFile
+            MultipartFile multipartFile = new MockMultipartFile("test.jpg", bo.toByteArray());
+
+            return multipartFile;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 1 - 3
src/main/resources/mapper/statistics/OrderMapper.xml

@@ -358,7 +358,5 @@
             limit 10000
     </select>
 
-    <update id="updateOrderUrl">
-        update  ${dbName}_order.o_order_detail_${operatorId} set start_url=#{startUrl},end_url=#{endUrl} where order_id = #{orderId}
-    </update>
+
 </mapper>

+ 7 - 0
src/main/resources/mapper/statistics/WatermarkImgMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.poteviohealth.cgp.statistics.mapper.WatermarkImgMapper">
+    <update id="updateOrderUrl">
+        update  ${dbName}_order.o_order_detail_${operatorId} set start_url=#{startUrl},end_url=#{endUrl} where order_id = #{orderId}
+    </update>
+</mapper>