lyhzzz 2 роки тому
батько
коміт
5ef568611d
27 змінених файлів з 772 додано та 244 видалено
  1. 18 5
      README.md
  2. 10 16
      pom.xml
  3. 3 3
      src/main/java/com/fdkankan/sale/common/RequestBase.java
  4. 2 2
      src/main/java/com/fdkankan/sale/controller/RepairInfoController.java
  5. 6 2
      src/main/java/com/fdkankan/sale/controller/TestController.java
  6. 2 2
      src/main/java/com/fdkankan/sale/entity/CameraDetail.java
  7. 0 12
      src/main/java/com/fdkankan/sale/entity/OrderReceiving.java
  8. 12 0
      src/main/java/com/fdkankan/sale/entity/Repair.java
  9. 6 0
      src/main/java/com/fdkankan/sale/entity/RepairRegister.java
  10. 2 1
      src/main/java/com/fdkankan/sale/service/ICameraService.java
  11. 2 0
      src/main/java/com/fdkankan/sale/service/IRepairService.java
  12. 2 8
      src/main/java/com/fdkankan/sale/service/impl/CameraServiceImpl.java
  13. 10 11
      src/main/java/com/fdkankan/sale/service/impl/DataCountService.java
  14. 7 6
      src/main/java/com/fdkankan/sale/service/impl/RepairCustomerService.java
  15. 6 1
      src/main/java/com/fdkankan/sale/service/impl/RepairPersonnelService.java
  16. 15 1
      src/main/java/com/fdkankan/sale/service/impl/RepairSaleService.java
  17. 8 0
      src/main/java/com/fdkankan/sale/service/impl/RepairServiceImpl.java
  18. 2 2
      src/main/java/com/fdkankan/sale/service/impl/RepairSupplyService.java
  19. 166 3
      src/main/java/com/fdkankan/sale/util/DateUtil.java
  20. 0 161
      src/main/java/com/fdkankan/sale/util/Dateutils.java
  21. 2 5
      src/main/java/com/fdkankan/sale/util/MyExcelUtil.java
  22. 15 0
      src/main/java/com/fdkankan/sale/util/pdf/DuizhangDomain.java
  23. 227 0
      src/main/java/com/fdkankan/sale/util/pdf/PageEvent.java
  24. 234 0
      src/main/java/com/fdkankan/sale/util/pdf/PdfUtil.java
  25. 12 0
      src/main/java/com/fdkankan/sale/util/pdf/YqTable.java
  26. 3 3
      src/main/java/com/fdkankan/sale/vo/request/RepairInvoiceParam.java
  27. BIN
      src/main/resources/templates/test3.pdf

+ 18 - 5
README.md

@@ -2,9 +2,22 @@
 
 ###**v1.0.0** 
 ~~~~
+
+~~~~
+
+
+###**v1.0.1** 
+~~~~
+详见文档
+1. /salePersonnel/saleOrderList  售后工程师工单列表
+    response 添加字段
+        warrantyDate        保修界满日期
+        warrantyType         0保内维修 ,1保内维修-人为损坏 = 保外 ,2保外维修
+2./salePersonnel/orderReceiving  售后工程师接单
+    request 删除必填参数
+        warrantyType
+        warrantyExpirationDate
+3./repairPersonnel/checkRegister  维修登记
+    request 添加必填参数
+        defineDamage    定损结论 0 非人为损坏,1人为损坏
 ~~~~
-todo:
-    1.取消维修支付检测费用
-    2.维修中添加备件,需再次报价,客户拒绝,按第一次报价流程走
-    3.客户支付,按确认过的报价单支付
-    

+ 10 - 16
pom.xml

@@ -165,23 +165,17 @@
             <version>1.34.0</version>
         </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>cn.dev33</groupId>-->
-<!--            <artifactId>sa-token-sso</artifactId>-->
-<!--            <version>1.34.0</version>-->
-<!--        </dependency>-->
-
-<!--        &lt;!&ndash; Sa-Token 整合redis (使用jackson序列化方式) &ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>cn.dev33</groupId>-->
-<!--            <artifactId>sa-token-dao-redis-jackson</artifactId>-->
-<!--            <version>1.34.0</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.5.9</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itext-asian</artifactId>
+            <version>5.2.0</version>
+        </dependency>
 
-<!--        <dependency>-->
-<!--            <groupId>org.apache.commons</groupId>-->
-<!--            <artifactId>commons-pool2</artifactId>-->
-<!--        </dependency>-->
 
     </dependencies>
 

+ 3 - 3
src/main/java/com/fdkankan/sale/common/RequestBase.java

@@ -1,6 +1,6 @@
 package com.fdkankan.sale.common;
 
-import com.fdkankan.sale.util.Dateutils;
+import com.fdkankan.sale.util.DateUtil;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 
@@ -30,14 +30,14 @@ public class RequestBase implements Serializable {
 
     public String getStartTime() {
         if(StringUtils.isBlank(startTime) && timeList != null && timeList.size() >0){
-            return Dateutils.getStartTime(timeList.get(0));
+            return DateUtil.getStartTime(timeList.get(0));
         }
         return startTime;
     }
 
     public String getEndTime() {
         if(StringUtils.isBlank(startTime) && timeList != null && timeList.size() >1){
-            return Dateutils.getEndTime(timeList.get(1));
+            return DateUtil.getEndTime(timeList.get(1));
         }
         return endTime;
     }

+ 2 - 2
src/main/java/com/fdkankan/sale/controller/RepairInfoController.java

@@ -86,11 +86,11 @@ public class RepairInfoController extends BaseController{
         vo.setSendDate(repairDetailVo.getRepairerVo().getCreateTime());
         vo.setFaultMsg(repairDetailVo.getRepairerVo().getFaultMsg());
 
-        vo.setWarrantyType(StatusUtil.getWarrantyType(repairDetailVo.getOrderReceivingVo().getWarrantyType()));
+        vo.setWarrantyType(StatusUtil.getWarrantyType(repairDetailVo.getRepairerVo().getWarrantyType()));
         vo.setOrderFaultMsg(repairDetailVo.getOrderReceivingVo().getOrderFaultMsg());
         vo.setSaleName(repairDetailVo.getOrderReceivingVo().getSysUserName());
         vo.setSaleDate(repairDetailVo.getOrderReceivingVo().getCreateTime());
-        vo.setWarrantyExpirationDate(repairDetailVo.getOrderReceivingVo().getWarrantyExpirationDate());
+        vo.setWarrantyExpirationDate(repairDetailVo.getRepairerVo().getWarrantyDate());
 
         vo.setCheckImg(JSONArray.toJSONString(repairDetailVo.getRepairRegisterVo().getCheckImg()));
         vo.setRepairMan(repairDetailVo.getRepairRegisterVo().getSysUserName());

+ 6 - 2
src/main/java/com/fdkankan/sale/controller/TestController.java

@@ -4,12 +4,15 @@ import com.fdkankan.sale.common.ResultData;
 import com.fdkankan.sale.service.IPriceListService;
 import com.fdkankan.sale.service.ISysUserService;
 import com.fdkankan.sale.util.MyExcelUtil;
+import com.fdkankan.sale.util.pdf.PdfUtil;
+import com.itextpdf.text.DocumentException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 @RestController
 @RequestMapping("/test")
@@ -18,13 +21,14 @@ public class TestController {
     @Autowired
     ISysUserService sysUserService;
     @Autowired
-    MyExcelUtil excelUtil;
+    PdfUtil pdfUtil;
     @Autowired
     IPriceListService priceListService;
 
     @GetMapping("/test1")
-    public ResultData test1(HttpServletResponse response) {
+    public ResultData test1(HttpServletResponse response) throws IOException, DocumentException {
         //模板中需要批量添加的,list{.**},obj{**}中的数据,
+        pdfUtil.createPdfFile(response);
         return ResultData.ok();
     }
 

+ 2 - 2
src/main/java/com/fdkankan/sale/entity/CameraDetail.java

@@ -122,13 +122,13 @@ public class CameraDetail implements Serializable {
      * 创建时间
      */
     @TableField("create_time")
-    private String createTime;
+    private Date createTime;
 
     /**
      * 更新时间
      */
     @TableField("update_time")
-    private String updateTime;
+    private Date updateTime;
 
     /**
      * 记录的状态,A: 生效,I: 禁用

+ 0 - 12
src/main/java/com/fdkankan/sale/entity/OrderReceiving.java

@@ -47,17 +47,6 @@ public class OrderReceiving implements Serializable {
     @TableField(typeHandler = JsonArrayTypeHandler.class)
     private JSONArray orderFaultImg;
 
-    /**
-     * 保修类型 0保修期内,1保修期外,2非保修项目
-     */
-    @TableField("warranty_type")
-    private Integer warrantyType;
-
-    /**
-     * 保修界面日期
-     */
-    @TableField("warranty_expiration_date")
-    private String warrantyExpirationDate;
 
     /**
      * 接单人
@@ -77,7 +66,6 @@ public class OrderReceiving implements Serializable {
      */
     @TableField("supply_admin_id")
     private Long supplyAdminId;
-
     /**
      * 测试工程师
      */

+ 12 - 0
src/main/java/com/fdkankan/sale/entity/Repair.java

@@ -98,4 +98,16 @@ public class Repair implements Serializable {
 
     @TableField("sys_user_id")
     private Long sysUserId;
+
+    /**
+     * 保修界满日期
+     */
+    @TableField("warranty_date")
+    private String warrantyDate;
+
+    /**
+     *  0保内维修 ,1保内维修-人为损坏 = 保外 ,2保外维修
+     */
+    @TableField("warrantyType")
+    private Integer warrantyType;
 }

+ 6 - 0
src/main/java/com/fdkankan/sale/entity/RepairRegister.java

@@ -78,4 +78,10 @@ public class RepairRegister implements Serializable {
     @TableField("sys_user_id")
     private Long sysUserId;
 
+    /**
+     * 定损结论 0 非人为损坏,1人为损坏
+     */
+    @TableField("define_damage")
+    private Integer defineDamage;
+
 }

+ 2 - 1
src/main/java/com/fdkankan/sale/service/ICameraService.java

@@ -2,6 +2,7 @@ package com.fdkankan.sale.service;
 
 import com.fdkankan.sale.entity.Camera;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.sale.entity.CameraDetail;
 
 /**
  * <p>
@@ -15,5 +16,5 @@ public interface ICameraService extends IService<Camera> {
 
     Camera getBySnCode(String cameraSnCode);
 
-    Integer getCameraTypeByCameraId(Long cameraId);
+    CameraDetail getCameraTypeByCameraId(Long cameraId);
 }

+ 2 - 0
src/main/java/com/fdkankan/sale/service/IRepairService.java

@@ -44,4 +44,6 @@ public interface IRepairService extends IService<Repair> {
     List<Repair> getBySnCode(String snCode);
 
     String getLastRepairId(String cameraSnCode, String repairId);
+
+    void updateWarrantyType(String repairId, Integer warrantyType);
 }

+ 2 - 8
src/main/java/com/fdkankan/sale/service/impl/CameraServiceImpl.java

@@ -39,19 +39,13 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     }
 
     @Override
-    public Integer getCameraTypeByCameraId(Long cameraId) {
+    public CameraDetail getCameraTypeByCameraId(Long cameraId) {
         LambdaQueryWrapper<CameraDetail> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(CameraDetail::getCameraId,cameraId);
         CameraDetail cameraDetail = cameraDetailService.getOne(wrapper);
         if(cameraDetail == null){
             throw new BusinessException(ResultCode.CAMERA_DETAIL_NOT_EXITS);
         }
-        Integer cameraType = null;
-        switch (cameraDetail.getType()){
-            case 9: cameraType = 1;break;
-            case 10: cameraType = 2;break;
-            default: cameraType = 0; break;
-        }
-        return cameraType;
+       return cameraDetail;
     }
 }

+ 10 - 11
src/main/java/com/fdkankan/sale/service/impl/DataCountService.java

@@ -3,7 +3,6 @@ package com.fdkankan.sale.service.impl;
 import com.fdkankan.sale.mapper.DataCountMapper;
 import com.fdkankan.sale.service.IRepairService;
 import com.fdkankan.sale.util.DateUtil;
-import com.fdkankan.sale.util.Dateutils;
 import com.fdkankan.sale.vo.response.DataGroupByCount;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -23,23 +22,23 @@ public class DataCountService {
     DataCountMapper dataCountMapper;
 
     public  List<DataGroupByCount> repairAddTrend(Integer cameraType, Integer type, String startTime, String endTime) {
-        startTime = Dateutils.formatStartTime(startTime);
-        endTime = Dateutils.formatEndTime(endTime);
+        startTime = DateUtil.formatStartTime(startTime);
+        endTime = DateUtil.formatEndTime(endTime);
         
         List<DataGroupByCount> dataList = new ArrayList<>();
         List<DataGroupByCount> result = new ArrayList<>();
-        int rule = Dateutils.DAY;
+        int rule = DateUtil.DAY;
         String tb ="t_repair";
         switch (type){
             case 0 :
                 dataList = dataCountMapper.repairDataGroupBy(tb, dayFormat, cameraType,startTime, endTime);
                 break;
             case 1 :
-                rule = Dateutils.WEEK;
+                rule = DateUtil.WEEK;
                 dataList = dataCountMapper.repairDataGroupByWeek(tb,cameraType,startTime,endTime);
                 break;
             case 2 :
-                rule = Dateutils.MONTH;
+                rule = DateUtil.MONTH;
                 dataList =  dataCountMapper.repairDataGroupBy(tb,mouthFormat,cameraType,startTime,endTime);
                 break;
         }
@@ -47,7 +46,7 @@ public class DataCountService {
         //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
         HashMap<String,Long> map = new HashMap<>();
         dataList.forEach(entity -> map.put(entity.getGroupKey(),entity.getCount()));
-        List<String> dates = Dateutils.findDatesStr(Dateutils.getDate(startTime), Dateutils.getDate(endTime),rule );
+        List<String> dates = DateUtil.findDatesStr(DateUtil.getDateByStr(startTime), DateUtil.getDateByStr(endTime),rule );
         setListData(result,map,dates);
         return result;
 
@@ -65,15 +64,15 @@ public class DataCountService {
     }
 
     public Object faultCount(Integer cameraType, String startTime, String endTime) {
-        startTime = Dateutils.formatStartTime(startTime);
-        endTime = Dateutils.formatEndTime(endTime);
+        startTime = DateUtil.formatStartTime(startTime);
+        endTime = DateUtil.formatEndTime(endTime);
 
         return dataCountMapper.faultCount( cameraType,startTime, endTime);
     }
 
     public Object warrantyTypeCount(Integer cameraType, String startTime, String endTime) {
-        startTime = Dateutils.formatStartTime(startTime);
-        endTime = Dateutils.formatEndTime(endTime);
+        startTime = DateUtil.formatStartTime(startTime);
+        endTime = DateUtil.formatEndTime(endTime);
         List<DataGroupByCount> list = dataCountMapper.warrantyTypeCount(cameraType, startTime, endTime);
         for (DataGroupByCount dataGroupByCount : list) {
             switch (dataGroupByCount.getGroupKey()){

+ 7 - 6
src/main/java/com/fdkankan/sale/service/impl/RepairCustomerService.java

@@ -69,12 +69,13 @@ public class RepairCustomerService {
             repairLogService.saveBySysUser(param.getUserId(),repair.getRepairId(),5,"确认维修");
         }
         if(param.getConfirm() == 1) {
-            repairLogService.saveBySysUser(param.getUserId(),repair.getRepairId(),4,"拒绝报价");
-            //存在确认过的报价单,返回维修中
-            List<PriceList> priceLists = priceListService.getByRepairIdAndStatus(repair.getRepairId(),1);
-            if(priceLists !=null && priceLists.size() >0){
-                repairService.updateRepairStatus(repair.getRepairId(),6);
-            }
+               repairLogService.saveBySysUser(param.getUserId(),repair.getRepairId(),4,"拒绝报价");
+//            //存在确认过的报价单,返回维修中
+//            List<PriceList> priceLists = priceListService.getByRepairIdAndStatus(repair.getRepairId(),1);
+//            if(priceLists !=null && priceLists.size() >0){
+//                repairService.updateRepairStatus(repair.getRepairId(),6);
+//            }
+
         }
     }
 

+ 6 - 1
src/main/java/com/fdkankan/sale/service/impl/RepairPersonnelService.java

@@ -85,7 +85,7 @@ public class RepairPersonnelService {
 
     public void checkRegister(CheckRegisterParam param, Long userId) {
         if(StringUtils.isBlank(param.getRepairId()) || StringUtils.isBlank(param.getCheckResult())
-                || param.getFaultIds() ==null || param.getFaultIds().size() <=0){
+                || param.getFaultIds() ==null || param.getFaultIds().size() <=0 || param.getDefineDamage() == null){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
         Repair repair = repairService.getById(param.getRepairId());
@@ -101,6 +101,11 @@ public class RepairPersonnelService {
         }
         Integer repairRegisterId = repairRegister.getRepairRegisterId();
         BeanUtils.copyProperties(param,repairRegister);
+
+        if(repairRegister.getDefineDamage() == 1 && repair.getWarrantyType() == 0){
+            repairService.updateWarrantyType(repair.getRepairId(),1);
+        }
+
         repairRegister.setRepairRegisterId(repairRegisterId);
         repairRegister.setSysUserId(userId);
         repairRegisterService.saveOrUpdate(repairRegister);

+ 15 - 1
src/main/java/com/fdkankan/sale/service/impl/RepairSaleService.java

@@ -115,7 +115,16 @@ public class RepairSaleService {
                 }
             }
         }
-        Integer cameraType = cameraService.getCameraTypeByCameraId(camera.getId());
+        CameraDetail cameraDetail = cameraService.getCameraTypeByCameraId(camera.getId());
+        Integer cameraType = null;
+        switch (cameraDetail.getType()){
+            case 9: cameraType = 1;break;
+            case 10: cameraType = 2;break;
+            default: cameraType = 0; break;
+        }
+        Date outTime = cameraDetail.getOutTime() == null ? cameraDetail.getCreateTime() : cameraDetail.getOutTime();
+        Date date = DateUtil.dateAddOne(outTime, 7);
+        String date1 = DateUtil.getDate(DateUtil.dayFmt, date) +" 23:59:59";
 
         Repair repair = new Repair();
         BeanUtils.copyProperties(param,repair);
@@ -123,6 +132,11 @@ public class RepairSaleService {
         repair.setReceiverType(receiverType);
         repair.setCameraType(cameraType);
         repair.setSysUserId(userId);
+        repair.setWarrantyDate(date1);
+        repair.setWarrantyType(1);
+        if(DateUtil.getDateByStr(date1).getTime() >= new Date().getTime()){
+            repair.setWarrantyType(0);
+        }
 
         Customer customer = new Customer();
         BeanUtils.copyProperties(param,customer);

+ 8 - 0
src/main/java/com/fdkankan/sale/service/impl/RepairServiceImpl.java

@@ -166,4 +166,12 @@ public class RepairServiceImpl extends ServiceImpl<IRepairMapper, Repair> implem
         }
         return list.get(0).getRepairId();
     }
+
+    @Override
+    public void updateWarrantyType(String repairId, Integer warrantyType) {
+        LambdaUpdateWrapper<Repair> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(Repair::getRepairId,repairId);
+        wrapper.set(Repair::getWarrantyType,warrantyType);
+        this.update(wrapper);
+    }
 }

+ 2 - 2
src/main/java/com/fdkankan/sale/service/impl/RepairSupplyService.java

@@ -132,7 +132,7 @@ public class RepairSupplyService {
         if(repair == null){
             throw new BusinessException(ResultCode.REPAIR_NOT_EXITS);
         }
-        if(repair.getStatus() !=7){
+        if(repair.getStatus() !=10){
             throw new BusinessException(ResultCode.REPAIR_STATUS_NOT_EXITS);
         }
         List<RepairRegisterPartVo> partVoList = this.partInfo(param.getRepairId(),1);
@@ -141,6 +141,6 @@ public class RepairSupplyService {
         }
         priceListService.recoveryPart(repair.getRepairId());
 
-        repairLogService.saveBySysUser(userId,param.getRepairId(),8,"备件回收");
+        repairLogService.saveBySysUser(userId,param.getRepairId(),7,"备件回收");
     }
 }

+ 166 - 3
src/main/java/com/fdkankan/sale/util/DateUtil.java

@@ -1,27 +1,190 @@
 package com.fdkankan.sale.util;
 
 
+import org.apache.commons.lang3.StringUtils;
+
 import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.util.*;
 
 public class DateUtil {
 
     public static String repairIdFmt = "yyyyMMddHHmmssSSS";
     public static String dFmt = "yyyy-MM-dd HH:mm:ss";
+    public static String dayFmt = "yyyy-MM-dd";
 
     public static String getDate(String dateFormat) {
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
         Date date = new Date();
         return simpleDateFormat.format(date);
     }
+    public static Date getDateByStr(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+
+    public static String getDate(String dateFormat,Date date) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
+        return simpleDateFormat.format(date);
+    }
+
     public static String getDate() {
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dFmt);
         Date date = new Date();
         return simpleDateFormat.format(date);
     }
 
-    public static void main(String[] args) {
-        System.out.println(getDate(repairIdFmt));
+    public static int  DAY =  Calendar.DAY_OF_MONTH;
+    public static int  WEEK =  Calendar.WEEK_OF_MONTH;
+    public static int  MONTH =  Calendar.MONTH;
+
+    /**
+     * 获取指定时间区间的所有数据(包含日期和月份)
+     * @param dBegin
+     * @param dEnd
+     * @param rule 日历规则 如:Calendar.DAY_OF_MONTH
+     * @return
+     */
+    public static List<Date> findDates(Date dBegin, Date dEnd, int rule) {
+        List<Date> lDate = new ArrayList<>();
+        if (dEnd.before(dBegin)){
+            return lDate;
+        }
+        Calendar calBegin = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calBegin.setTime(dBegin);
+        Calendar calEnd = Calendar.getInstance();
+        // 使用给定的 Date 设置此 Calendar 的时间
+        calEnd.setTime(dEnd);
+        // 测试此日期是否在指定日期之后
+        while (dEnd.after(calBegin.getTime())) {
+            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
+            Date time = calBegin.getTime();
+            if(rule == Calendar.WEEK_OF_MONTH){
+                time = getMonday(time);
+            }
+            lDate.add(time);
+            calBegin.add(rule, 1);
+        }
+        return lDate;
+    }
+    public static List<String> findDatesStr(Date dBegin, Date dEnd, int rule) {
+        List<String> datesStr = new ArrayList<>();
+        List<Date> dates = findDates(dBegin, dEnd, rule);
+        for (Date date : dates) {
+            String day ;
+            if(rule == MONTH){
+                day =getMonthDate(date);
+            }else {
+                day = getDayDate(date);
+            }
+            datesStr.add(day);
+        }
+        return datesStr;
+    }
+    public static Date getMonday(Date date) {
+        Calendar calBegin = Calendar.getInstance();
+        calBegin.setTime(date);
+        calBegin.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    //周一
+        return calBegin.getTime();
     }
 
+    public static String getDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+    public static String getDateN(Date date) {
+        return new SimpleDateFormat("yyyyMMddHHmmss").format(date);
+    }
+
+    public static String getMonthDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM").format(date);
+    }
+    public static Date getMonthDate(String date) {
+        try {
+            return new SimpleDateFormat("yyyy-MM").parse(date);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new Date();
+    }
+
+    public static String getDayDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date);
+
+    }
+    public static String getDayZeroDate(Date date) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(date) +" 00:00:00";
+    }
+
+
+    public static String getHalfYearStr() {
+        return new SimpleDateFormat("yyyy-MM-dd").format(getHalfYear())+" 00:00:00";
+    }
+    public static Date getHalfYear() {
+        Calendar c = Calendar.getInstance();
+        c.setTime(new Date());
+        c.add(Calendar.MONTH, -6);
+        return c.getTime();
+    }
+
+    public static  String getLastMonTh(Date date){
+        Calendar ca = Calendar.getInstance();
+        ca.setTime(date);
+        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
+        return new SimpleDateFormat("yyyy-MM-dd").format(ca.getTime()) +" 23:59:59";
+    }
+
+    public static String formatStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            startTime = DateUtil.getHalfYearStr();
+        }
+        if(startTime.length() <12){  //月,开始时间到1号 0点
+            startTime +=  " 00:00:00";
+        }
+        return startTime;
+    }
+    public static String formatEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            endTime = DateUtil.getDate(new Date());
+        }
+        if(endTime.length() <12 ){  //月,开始时间到1号 0点
+            endTime +=  " 23:59:59";
+        }
+        return endTime;
+    }
+
+
+    public static String getStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            return null;
+        }
+        if(startTime.length() > 12){
+            return startTime;
+        }
+        return startTime +" 00:00:00";
+    }
+
+    public static String getEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            return null;
+        }
+        if(endTime.length() > 12){
+            return endTime;
+        }
+        return endTime +" 23:59:59";
+    }
+
+
+    /*日期加+1天*/
+    public static Date dateAddOne(Date date,Integer i) {
+        Calendar  calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        calendar.add(calendar.DATE,i); //把日期往后增加一天,整数  往后推,负数往前移动
+        date=calendar.getTime(); //这个时间就是日期往后推一天的结果
+        return date;
+
+    }
 }

+ 0 - 161
src/main/java/com/fdkankan/sale/util/Dateutils.java

@@ -1,161 +0,0 @@
-package com.fdkankan.sale.util;
-
-import org.apache.commons.lang3.StringUtils;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-public class Dateutils {
-
-    public static int  DAY =  Calendar.DAY_OF_MONTH;
-    public static int  WEEK =  Calendar.WEEK_OF_MONTH;
-    public static int  MONTH =  Calendar.MONTH;
-
-    /**
-     * 获取指定时间区间的所有数据(包含日期和月份)
-     * @param dBegin
-     * @param dEnd
-     * @param rule 日历规则 如:Calendar.DAY_OF_MONTH
-     * @return
-     */
-    public static List<Date> findDates(Date dBegin, Date dEnd, int rule) {
-        List<Date> lDate = new ArrayList<>();
-        if (dEnd.before(dBegin)){
-            return lDate;
-        }
-        Calendar calBegin = Calendar.getInstance();
-        // 使用给定的 Date 设置此 Calendar 的时间
-        calBegin.setTime(dBegin);
-        Calendar calEnd = Calendar.getInstance();
-        // 使用给定的 Date 设置此 Calendar 的时间
-        calEnd.setTime(dEnd);
-        // 测试此日期是否在指定日期之后
-        while (dEnd.after(calBegin.getTime())) {
-            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
-            Date time = calBegin.getTime();
-            if(rule == Calendar.WEEK_OF_MONTH){
-                time = getMonday(time);
-            }
-            lDate.add(time);
-            calBegin.add(rule, 1);
-        }
-        return lDate;
-    }
-    public static List<String> findDatesStr(Date dBegin, Date dEnd, int rule) {
-        List<String> datesStr = new ArrayList<>();
-        List<Date> dates = findDates(dBegin, dEnd, rule);
-        for (Date date : dates) {
-            String day ;
-            if(rule == MONTH){
-                day =getMonthDate(date);
-            }else {
-                day = getDayDate(date);
-            }
-            datesStr.add(day);
-        }
-        return datesStr;
-    }
-    public static Date getDate(String date) {
-        try {
-            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return new Date();
-    }
-    public static Date getMonday(Date date) {
-        Calendar calBegin = Calendar.getInstance();
-        calBegin.setTime(date);
-        calBegin.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);    //周一
-        return calBegin.getTime();
-    }
-
-    public static String getDate(Date date) {
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
-    }
-    public static String getDateN(Date date) {
-        return new SimpleDateFormat("yyyyMMddHHmmss").format(date);
-    }
-
-    public static String getMonthDate(Date date) {
-        return new SimpleDateFormat("yyyy-MM").format(date);
-    }
-    public static Date getMonthDate(String date) {
-        try {
-            return new SimpleDateFormat("yyyy-MM").parse(date);
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return new Date();
-    }
-
-    public static String getDayDate(Date date) {
-        return new SimpleDateFormat("yyyy-MM-dd").format(date);
-
-    }
-    public static String getDayZeroDate(Date date) {
-        return new SimpleDateFormat("yyyy-MM-dd").format(date) +" 00:00:00";
-    }
-
-
-    public static String getHalfYearStr() {
-        return new SimpleDateFormat("yyyy-MM-dd").format(getHalfYear())+" 00:00:00";
-    }
-    public static Date getHalfYear() {
-        Calendar c = Calendar.getInstance();
-        c.setTime(new Date());
-        c.add(Calendar.MONTH, -6);
-        return c.getTime();
-    }
-
-    public static  String getLastMonTh(Date date){
-        Calendar ca = Calendar.getInstance();
-        ca.setTime(date);
-        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
-        return new SimpleDateFormat("yyyy-MM-dd").format(ca.getTime()) +" 23:59:59";
-    }
-
-    public static String formatStartTime(String startTime) {
-        if(StringUtils.isBlank(startTime)){
-            startTime = Dateutils.getHalfYearStr();
-        }
-        if(startTime.length() <12){  //月,开始时间到1号 0点
-            startTime +=  " 00:00:00";
-        }
-        return startTime;
-    }
-    public static String formatEndTime(String endTime) {
-        if(StringUtils.isBlank(endTime)){
-            endTime = Dateutils.getDate(new Date());
-        }
-        if(endTime.length() <12 ){  //月,开始时间到1号 0点
-            endTime +=  " 23:59:59";
-        }
-        return endTime;
-    }
-
-
-    public static String getStartTime(String startTime) {
-        if(StringUtils.isBlank(startTime)){
-            return null;
-        }
-        if(startTime.length() > 12){
-            return startTime;
-        }
-        return startTime +" 00:00:00";
-    }
-
-    public static String getEndTime(String endTime) {
-        if(StringUtils.isBlank(endTime)){
-            return null;
-        }
-        if(endTime.length() > 12){
-            return endTime;
-        }
-        return endTime +" 23:59:59";
-    }
-
-}

+ 2 - 5
src/main/java/com/fdkankan/sale/util/MyExcelUtil.java

@@ -23,6 +23,7 @@ import java.util.*;
 
 @Component
 public class MyExcelUtil {
+
     @Autowired
     FYunFileServiceInterface fYunFileServiceInterface;
 
@@ -41,7 +42,7 @@ public class MyExcelUtil {
         // 填充list 的时候还要注意 模板中{.} 多了个点 表示list
         //获取文件路径
         String ossPath =   String.format(FilePath.oss_file_path,FilePath.common,fileName);
-        String localPath = FilePath.file_path  + ossPath;
+        String localPath = FilePath.file_path + FilePath.common +"/"  + fileName;
         File file = new File(localPath);
         if(!file.exists()){
             fYunFileServiceInterface.downloadFile(ossPath,localPath );
@@ -50,10 +51,6 @@ public class MyExcelUtil {
 
         ExcelWriter excelWriter = null;
         try {
-            //合并前6列
-            int[] mergeColumeIndex = {0,1,2,3,4,5};
-            //合并行,两组数字为一次合并,比如3、4为一组,合并3到4行,5、6同理
-            int[] mergeRowIndex = {3,4,5,6};
             excelWriter = EasyExcel.write(response.getOutputStream())
                     .withTemplate(templateFileName)
                     //调用合并策略

+ 15 - 0
src/main/java/com/fdkankan/sale/util/pdf/DuizhangDomain.java

@@ -0,0 +1,15 @@
+package com.fdkankan.sale.util.pdf;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+@Data
+@Accessors(chain = true)
+public class DuizhangDomain {
+    private String jg;
+    private Integer ydz;
+    private Integer wdz;
+    private BigDecimal dzl;
+}

+ 227 - 0
src/main/java/com/fdkankan/sale/util/pdf/PageEvent.java

@@ -0,0 +1,227 @@
+package com.fdkankan.sale.util.pdf;
+
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+
+import java.io.IOException;
+
+public class PageEvent extends PdfPageEventHelper {
+    /**
+     * 页眉
+     */
+    //public String header = "itext测试页眉";
+
+    /**
+     * 文档字体大小,页脚页眉最好和文本大小一致
+     */
+    public int presentFontSize = 10;
+
+    /**
+     * 文档页面大小,最好前面传入,否则默认为A4纸张
+     */
+    public Rectangle pageSize = PageSize.A4;
+
+    // 模板
+    public PdfTemplate total;
+
+    // 基础字体对象
+    public BaseFont bf = null;
+
+    // 利用基础字体生成的字体对象,一般用于生成中文文字
+    public Font fontDetail = null;
+
+
+    /**
+     *
+     * Creates a new instance of PdfReportM1HeaderFooter 无参构造方法.
+     *
+     */
+    public PageEvent() {
+
+    }
+
+    /**
+     *
+     * Creates a new instance of PdfReportM1HeaderFooter 构造方法.
+     *
+     * @param
+     *
+     * @param presentFontSize
+     *            数据体字体大小
+     * @param pageSize
+     *            页面文档大小,A4,A5,A6横转翻转等Rectangle对象
+     */
+//    public PDFBuilder(String yeMei, int presentFontSize, Rectangle pageSize) {
+//        this.header = yeMei;
+//        this.presentFontSize = presentFontSize;
+//        this.pageSize = pageSize;
+//    }
+    public PageEvent( int presentFontSize, Rectangle pageSize) {
+        this.presentFontSize = presentFontSize;
+        this.pageSize = pageSize;
+    }
+
+//    public void setHeader(String header) {
+//        this.header = header;
+//    }
+
+    public void setPresentFontSize(int presentFontSize) {
+        this.presentFontSize = presentFontSize;
+    }
+
+
+    /**
+     *
+     * TODO 文档打开时创建模板
+     *
+     * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter,
+     *      com.itextpdf.text.Document)
+     */
+    public void onOpenDocument(PdfWriter writer, Document document) {
+        total = writer.getDirectContent().createTemplate(50, 50);// 共 页 的矩形的长宽高
+    }
+
+    /**
+     *
+     * TODO 关闭每页的时候,写入页眉,写入'第几页共'这几个字。
+     *
+     * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
+     *      com.itextpdf.text.Document)
+     */
+    public void onEndPage(PdfWriter writer, Document document) {
+        this.addPage(writer, document);
+        //加水印
+        //this.addWatermark(writer);
+    }
+
+    //加分页
+    public void addPage(PdfWriter writer, Document document){
+        //设置分页页眉页脚字体
+        try {
+            if (bf == null) {
+                bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
+            }
+            if (fontDetail == null) {
+                fontDetail = new Font(bf, presentFontSize, Font.NORMAL);// 数据体字体
+            }
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        // 1.写入页眉
+//        ColumnText.showTextAligned(writer.getDirectContent(),
+//                Element.ALIGN_LEFT, new Phrase(header, fontDetail),
+//                document.left(), document.top() + 20, 0);
+//		页眉添加图片
+//		String path = ResourceUtils.getFile("classpath:").getPath();
+//      Image img = Image.getInstance(path + "/pdfTemplates/logo.jpg");
+//      img.setAlignment(Image.MIDDLE);
+//      img.setWidthPercentage(80);
+//      img.scaleToFit(50,40);
+//      img.setAbsolutePosition(document.left(),document.top());
+//      writer.getDirectContent().addImage(img);
+        //页眉加下划线
+//        PdfPTable tableHeader = new PdfPTable(1);
+//        tableHeader.setTotalWidth(PageSize.A4.getWidth() - 60);
+//        PdfPCell pCell = new PdfPCell();
+//        pCell.setBorderWidthBottom(0.3f);
+//        tableHeader.addCell(pCell);
+//        tableHeader.writeSelectedRows(0, -1, 30, 805, writer.getDirectContent());
+
+        // 2.写入前半部分的 第 X页/共
+        int pageS = writer.getPageNumber();
+        String foot1 = "第 " + pageS + " 页 /共";
+//        String foot1 = pageS  +"/";
+        Phrase footer = new Phrase(foot1, fontDetail);
+
+        // 3.计算前半部分的foot1的长度,后面好定位最后一部分的'Y页'这俩字的x轴坐标,字体长度也要计算进去 = len
+        float len = bf.getWidthPoint(foot1, presentFontSize);
+
+        // 4.拿到当前的PdfContentByte
+        PdfContentByte cb = writer.getDirectContent();
+
+        // 5.写入页脚1,x轴就是(右margin+左margin + right() -left()- len)/2.0F
+        // 再给偏移20F适合人类视觉感受,否则肉眼看上去就太偏左了
+        // ,y轴就是底边界-20,否则就贴边重叠到数据体里了就不是页脚了;注意Y轴是从下往上累加的,最上方的Top值是大于Bottom好几百开外的。
+        ColumnText
+                .showTextAligned(
+                        cb,
+                        Element.ALIGN_CENTER,
+                        footer,
+                        (document.rightMargin() + document.right()
+                                + document.leftMargin() - document.left() - len) / 2.0F ,
+                        document.bottom() - 20, 0);
+
+        // 6.写入页脚2的模板(就是页脚的Y页这俩字)添加到文档中,计算模板的和Y轴,X=(右边界-左边界 - 前半部分的len值)/2.0F +
+        // len , y 轴和之前的保持一致,底边界-20
+        cb.addTemplate(total, (document.rightMargin() + document.right()
+                        + document.leftMargin() - document.left()) / 2.0F ,
+                document.bottom() - 20); // 调节模版显示的位置
+
+    }
+
+    //加水印
+    public void addWatermark(PdfWriter writer) {
+        // 水印图片
+//        Image image;
+//        try {
+//            image = Image.getInstance("./web/images/001.jpg");
+//            PdfContentByte content = writer.getDirectContentUnder();
+//            content.beginText();
+//            // 开始写入水印
+//            for(int k=0;k<5;k++){
+//                for (int j = 0; j <4; j++) {
+//                    image.setAbsolutePosition(150*j,170*k);
+//                    content.addImage(image);
+//                }
+//            }
+//            content.endText();
+//        } catch (IOException | DocumentException e) {
+//            // TODO Auto-generated catch block
+//            e.printStackTrace();
+//        }
+        BaseFont font = null;
+        try {
+            font = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        PdfGState gs = new PdfGState();
+        //添加透明度
+        gs.setFillOpacity(0.4f);
+        PdfContentByte content = writer.getDirectContentUnder();
+        content.beginText();
+        //水印颜色
+        content.setColorFill(BaseColor.DARK_GRAY);
+        content.setGState(gs);
+        //水印字体样式和大小
+        content.setFontAndSize(font, 35);
+        //插入水印  循环每页插入的条数
+        for (int j = 0; j < 3; j++) {
+            content.showTextAligned(Element.ALIGN_CENTER, "锦鲤飞上天测试水印", 300, 200 * (j + 1), 30);
+        }
+        content.endText();
+    }
+
+    /**
+     *
+     * TODO 关闭文档时,替换模板,完成整个页眉页脚组件
+     *
+     * @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter,
+     *      com.itextpdf.text.Document)
+     */
+    public void onCloseDocument(PdfWriter writer, Document document) {
+        // 7.最后一步了,就是关闭文档的时候,将模板替换成实际的 Y 值,至此,page x of y 制作完毕,完美兼容各种文档size。
+        total.beginText();
+        total.setFontAndSize(bf, presentFontSize);// 生成的模版的字体、颜色
+        String foot2 = " " + (writer.getPageNumber()) + " 页"; //页脚内容拼接  如  第1页/共2页
+//        String foot2 = String.valueOf(writer.getPageNumber()); //页脚内容拼接  如  1/2
+        total.showText(foot2);// 模版显示的内容
+        total.endText();
+        total.closePath();
+    }
+}

+ 234 - 0
src/main/java/com/fdkankan/sale/util/pdf/PdfUtil.java

@@ -0,0 +1,234 @@
+package com.fdkankan.sale.util.pdf;
+
+import cn.hutool.core.date.DateUtil;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 模板第一页不占满,生成表格
+ */
+@Component
+public class PdfUtil {
+
+    public void createPdfFile(HttpServletResponse response) throws IOException, DocumentException {
+        //设置请求返回类型
+        response.setHeader("Content-Disposition", "attachment; filename=测试.pdf");
+        OutputStream outputStream = response.getOutputStream();
+        //模板路径,放到项目里用这个ClassPathResource
+        ClassPathResource classPathResource = new ClassPathResource("templates/test3.pdf");
+        InputStream inputStream = classPathResource.getInputStream();
+
+        PdfReader reader = new PdfReader(inputStream);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        PdfStamper ps = new PdfStamper(reader, bos);
+
+        //设置字体
+        final BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        ArrayList<BaseFont> fontList = new ArrayList<>();
+        fontList.add(font);
+
+        //提取表单
+        AcroFields s = ps.getAcroFields();
+        s.setSubstitutionFonts(fontList);
+
+        s.setFieldProperty("type", "textfont", font, null);
+        s.setFieldProperty("createTime", "textfont", font, null);
+        s.setFieldProperty("title", "textfont", font, null);
+        s.setField("type", "日报");
+        s.setField("createTime", DateUtil.now());
+        s.setField("title", "这是title,模板画的位置框");
+        ps.setFormFlattening(true);
+        ps.close();
+
+        //*******************填充编辑好后的pdf**************
+        reader = new PdfReader(bos.toByteArray());
+        Rectangle pageSize = reader.getPageSize(1);
+        Document document = new Document(pageSize);
+        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
+        writer.setPageEvent(new PageEvent());
+        // 打开文档
+        document.open();
+        PdfContentByte cbUnder = writer.getDirectContentUnder();
+        PdfImportedPage pageTemplate = writer.getImportedPage(reader, 1);
+        cbUnder.addTemplate(pageTemplate, 0, 0);
+        //添加间隙,这里为进行了一个封装,因为这个模板第一页只有一些title啥的,
+        //重开一页太浪费,只需要确定表格要在什么位置生成,添加一个间隙就可以了
+        //createBlankTable(writer, document, font, 180);
+       // createTable(writer, document);
+       // createBlankTable(writer, document, font, 20);
+       // createTableYq(writer, document);
+
+        document.close();
+        outputStream.close();
+    }
+
+    //为一个表格添加内容
+    public PdfPCell createSetCell(String value, Font font) {
+        PdfPCell cell = new PdfPCell();
+        cell.setPhrase(new Phrase(value, font));
+        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        return cell;
+    }
+
+
+    //添加表格
+    public void createTable(PdfWriter writer, Document document) throws DocumentException, IOException {
+
+        PdfPTable table = new PdfPTable(new float[]{30, 80, 50, 50, 50});
+        table.setTotalWidth(520);
+        table.setPaddingTop(500);
+        table.setLockedWidth(true);
+        table.setHorizontalAlignment(Element.ALIGN_CENTER);//居中
+        table.writeSelectedRows(0, -1, 500, 800, writer.getDirectContentUnder());
+        //每页都显示表头,输入几就是第几行的表头固定
+        table.setHeaderRows(1);
+        table.setHeaderRows(2);
+
+        //定义数据的字体
+        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        Font textFont = new Font(baseFont, 10, Font.NORMAL);
+
+        //表头信息
+        PdfPCell heandCell = new PdfPCell();
+        heandCell.setRowspan(1);
+        heandCell.setColspan(5);
+        heandCell.setFixedHeight(30);
+        heandCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        heandCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        heandCell.setPhrase(new Phrase("对账情况表", textFont));
+        table.addCell(heandCell);
+
+        //表字段
+        String title[] = {"序号", "机构", "已对账", "未对账", "对账率%"};
+        for (int i = 0; i < title.length; i++) {
+            PdfPCell heardCell = new PdfPCell();
+            heardCell.setRowspan(1);
+            heardCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            heardCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            heardCell.setPhrase(new Phrase(title[i], textFont));
+            heardCell.setMinimumHeight(20);
+            table.addCell(heardCell);
+
+        }
+
+
+        //列表数据
+
+        List<DuizhangDomain> duizhangDomains = new ArrayList<>();
+        for (int i = 1; i <= 1000; i++) {
+            DuizhangDomain duizhangDomain = new DuizhangDomain();
+            duizhangDomain.setJg("机构" + i).setYdz(i).setWdz(i).setDzl(new BigDecimal(i));
+            duizhangDomains.add(duizhangDomain);
+        }
+
+        for (int i = 0; i < duizhangDomains.size(); i++) {
+            PdfPCell setCell1 = createSetCell((i + 1) + "", textFont);
+            PdfPCell setCell2 = createSetCell(duizhangDomains.get(i).getJg(), textFont);
+            PdfPCell setCell3 = createSetCell(duizhangDomains.get(i).getYdz().toString(), textFont);
+            PdfPCell setCell4 = createSetCell(duizhangDomains.get(i).getWdz().toString(), textFont);
+            PdfPCell setCell5 = createSetCell(duizhangDomains.get(i).getDzl() + "%", textFont);
+            table.addCell(setCell1);
+            table.addCell(setCell2);
+            table.addCell(setCell3);
+            table.addCell(setCell4);
+            table.addCell(setCell5);
+        }
+        document.add(table);
+    }
+
+
+    public void createTableYq(PdfWriter writer, Document document) throws DocumentException, IOException {
+
+        PdfPTable table = new PdfPTable(new float[]{80, 50});
+        table.setTotalWidth(520);
+        table.setPaddingTop(500);
+        table.setLockedWidth(true);
+        table.setHorizontalAlignment(Element.ALIGN_CENTER);//居中
+        table.writeSelectedRows(0, -1, 500, 800, writer.getDirectContentUnder());
+        //每页都显示表头,输入几就是第几行的表头固定
+        table.setHeaderRows(2);
+        table.setHeaderRows(3);
+
+        //定义数据的字体
+        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        Font textFont = new Font(baseFont, 10, Font.NORMAL);
+
+        //表头信息
+        PdfPCell heandCell = new PdfPCell();
+        heandCell.setRowspan(1);
+        heandCell.setColspan(2);
+        heandCell.setFixedHeight(30);
+        heandCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+        heandCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+        heandCell.setPhrase(new Phrase("逾期表", textFont));
+        table.addCell(heandCell);
+
+        //表字段
+        String title[] = {"机构名称", "逾期数"};
+        for (int i = 0; i < title.length; i++) {
+            PdfPCell heardCell = new PdfPCell();
+            heardCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+            heardCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+            heardCell.setPhrase(new Phrase(title[i], textFont));
+            heardCell.setMinimumHeight(20);
+            table.addCell(heardCell);
+        }
+
+        //列表数据
+
+        List<YqTable> yqTables = new ArrayList<>();
+        for (int i = 1; i <= 1000; i++) {
+            YqTable yq = new YqTable();
+            yq.setJg("逾期机构" + i).setYqs(i);
+            yqTables.add(yq);
+        }
+
+        for (int i = 0; i < yqTables.size(); i++) {
+            PdfPCell setCell2 = createSetCell(yqTables.get(i).getJg(), textFont);
+            PdfPCell setCell3 = createSetCell(yqTables.get(i).getYqs().toString(), textFont);
+            table.addCell(setCell2);
+            table.addCell(setCell3);
+        }
+        document.add(table);
+    }
+
+    /**
+     * 创建表格跟表格之间的空白间隔
+     */
+    public void createBlankTable(PdfWriter writer, Document document, BaseFont font, int height) throws DocumentException {
+        PdfPTable table = new PdfPTable(new float[]{30});
+        table.setTotalWidth(520);
+        table.setPaddingTop(500);
+        table.setLockedWidth(true);
+        table.setHorizontalAlignment(Element.ALIGN_CENTER);//居中
+        table.writeSelectedRows(0, -1, 500, 800, writer.getDirectContentUnder());
+        Font textFont = new Font(font, 10, Font.NORMAL);
+        PdfPCell cell = new PdfPCell(new Paragraph(" ", textFont));
+
+        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
+
+        cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
+
+        cell.setBorder(Rectangle.NO_BORDER);
+        cell.setFixedHeight(height);
+
+        cell.setColspan(1);
+
+        table.addCell(cell);
+        document.add(table);
+    }
+}
+
+

+ 12 - 0
src/main/java/com/fdkankan/sale/util/pdf/YqTable.java

@@ -0,0 +1,12 @@
+package com.fdkankan.sale.util.pdf;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+@Data
+@Accessors(chain = true)
+public class YqTable implements Serializable {
+    private String jg;
+    private Integer yqs;
+}

+ 3 - 3
src/main/java/com/fdkankan/sale/vo/request/RepairInvoiceParam.java

@@ -1,7 +1,7 @@
 package com.fdkankan.sale.vo.request;
 
 import com.fdkankan.sale.common.RequestBase;
-import com.fdkankan.sale.util.Dateutils;
+import com.fdkankan.sale.util.DateUtil;
 import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
 
@@ -21,14 +21,14 @@ public class RepairInvoiceParam extends RequestBase {
 
     public String getPayStartTime() {
         if(StringUtils.isBlank(payStartTime) && payTimeList != null && payTimeList.size() >0){
-            return Dateutils.getStartTime(payTimeList.get(0));
+            return DateUtil.getStartTime(payTimeList.get(0));
         }
         return payStartTime;
     }
 
     public String getPayEndTime() {
         if(StringUtils.isBlank(payEndTime) && payTimeList != null && payTimeList.size() >1){
-            return Dateutils.getEndTime(payTimeList.get(1));
+            return DateUtil.getEndTime(payTimeList.get(1));
         }
         return payEndTime;
     }

BIN
src/main/resources/templates/test3.pdf