lyhzzz 2 年之前
父节点
当前提交
a30f6bbdea

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

@@ -73,60 +73,28 @@ public class RepairInfoController extends BaseController{
     @GetMapping("/exportExcel")
     public void exportExcel(@RequestParam(required = false) String repairId,
                             @RequestParam(required = false,defaultValue = "0") Integer type){
-        RepairDetailVo repairDetailVo = repairInfoService.getDetailsByRepairId(repairId);
-        OrderListVo vo = new OrderListVo();
-        vo.setCompanyName(repairDetailVo.getCustomer().getCompanyName());
-        vo.setCustomerName(repairDetailVo.getCustomer().getCustomerName());
-        vo.setCustomerPhone(repairDetailVo.getCustomer().getPhone());
-        vo.setCustomerAddress(repairDetailVo.getCustomerAddress().getGetAddress());
-
-        vo.setRepairId(repairDetailVo.getRepairerVo().getRepairId());
-        vo.setCameraName(StatusUtil.getCameraName(repairDetailVo.getRepairerVo().getCameraType()));
-        vo.setCameraSnCode(repairDetailVo.getRepairerVo().getCameraSnCode());
-        vo.setSendDate(repairDetailVo.getRepairerVo().getCreateTime());
-        vo.setFaultMsg(repairDetailVo.getRepairerVo().getFaultMsg());
-
-        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.getRepairerVo().getWarrantyDate());
-
-        vo.setCheckImg(JSONArray.toJSONString(repairDetailVo.getRepairRegisterVo().getCheckImg()));
-        vo.setRepairMan(repairDetailVo.getRepairRegisterVo().getSysUserName());
-        vo.setRepairOverTime(repairDetailVo.getRepairRegisterVo().getOverTime());
-        vo.setRepairRemark(repairDetailVo.getRepairRegisterVo().getRemark());
-        vo.setCheckDate(repairDetailVo.getRepairRegisterVo().getCreateTime());
-        vo.setCheckResult(repairDetailVo.getRepairRegisterVo().getCheckResult());
-
-        vo.setLastRepairId(repairDetailVo.getLastRepairId());
-
-
-        List<PriceList> priceList = repairDetailVo.getPriceList();
-        BigDecimal totalAmount = BigDecimal.ZERO;
-        String priceData = "";
-        List<PriceListExcelVo> excelVos = new ArrayList<>();
-        for (PriceList list : priceList) {
-            PriceListExcelVo excelVo = new PriceListExcelVo();
-            BeanUtils.copyProperties(list,excelVo);
-            excelVo.setAmount(list.getPrice().multiply(new BigDecimal(list.getCount())));
-            excelVos.add(excelVo);
-            totalAmount = totalAmount.add(excelVo.getAmount());
-            priceData = list.getCreateTime();
+        OrderListVo orderListVo = repairInfoService.getExportVo(repairId);
+        if(type == 0){
+            excelUtil.listFill(response,"四维时代服务清单",orderListVo,orderListVo.getPriceListExcelVos(),type);
         }
-        vo.setTotalCount(totalAmount);
-        vo.setPriceListDate(priceData);
-        String priceData2 = "";
-        List<RepairLog> repairLogList = repairLogService.getByRepairIdAndStatus(repairId, 5);
-        for (RepairLog repairLog : repairLogList) {
-            priceData2 = repairLog.getCreateTime();
+        if(type == 1){
+            excelUtil.listFill(response,"维修服务工作单",orderListVo,orderListVo.getPriceListExcelVos(),type);
         }
-        vo.setConfirmPriceListDate(priceData2);
+    }
+
+    /**
+     * 0 四维时代服务清单(模板)
+     * 1 维修服务工作单(模板)
+     */
+    @GetMapping("/exportPdf")
+    public void exportPdf(@RequestParam(required = false) String repairId,
+                            @RequestParam(required = false,defaultValue = "0") Integer type){
+        OrderListVo orderListVo = repairInfoService.getExportVo(repairId);
         if(type == 0){
-            excelUtil.listFill(response,"四维时代服务清单",vo,excelVos,type);
+            excelUtil.listFill(response,"四维时代服务清单",orderListVo,orderListVo.getPriceListExcelVos(),type);
         }
         if(type == 1){
-            excelUtil.listFill(response,"维修服务工作单",vo,excelVos,type);
+            excelUtil.listFill(response,"维修服务工作单",orderListVo,orderListVo.getPriceListExcelVos(),type);
         }
     }
 }

+ 81 - 0
src/main/java/com/fdkankan/sale/controller/TestController.java

@@ -1,18 +1,31 @@
 package com.fdkankan.sale.controller;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.fdkankan.sale.common.ResultData;
 import com.fdkankan.sale.service.IPriceListService;
 import com.fdkankan.sale.service.ISysUserService;
+import com.fdkankan.sale.service.impl.RepairInfoService;
 import com.fdkankan.sale.util.MyExcelUtil;
+import com.fdkankan.sale.util.OrderListVo;
 import com.fdkankan.sale.util.pdf.PdfUtil;
+import com.fdkankan.sale.util.pdf.PdfUtils;
+import com.fdkankan.sale.vo.response.PriceListExcelVo;
 import com.itextpdf.text.DocumentException;
+import org.springframework.beans.BeanUtils;
 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.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/test")
@@ -24,6 +37,8 @@ public class TestController {
     PdfUtil pdfUtil;
     @Autowired
     IPriceListService priceListService;
+    @Autowired
+    RepairInfoService repairInfoService;
 
     @GetMapping("/test1")
     public ResultData test1(HttpServletResponse response) throws IOException, DocumentException {
@@ -32,4 +47,70 @@ public class TestController {
         return ResultData.ok();
     }
 
+    /**
+     * 导出数据 生成pdf
+     *
+     * @param response
+     */
+    @GetMapping("/exportPdf")
+    public void exportPdf(@RequestParam(required = false) String repairId,HttpServletResponse response) {
+        // 模板路径
+        String tempPath = "G:\\templates\\pdf\\四维时代售后服务清单-模版.pdf";
+        //文字类
+        // dataMap中的key要和模板中的域名对应
+        OrderListVo orderListVo = repairInfoService.getExportVo(repairId);
+        Map<String, Object> dataMap = BeanUtil.beanToMap(orderListVo);
+        //图片
+        Map<String, Object> imgMap = BeanUtil.beanToMap(orderListVo.getPdfImg());
+        // imgMap中的key要和模板中的域名对应
+
+        //表格 一行数据是一个list
+        List<String> list = new ArrayList<>();
+        list.add("序号");
+        list.add("项目");
+        list.add("单价(元)");
+        list.add("数量");
+        list.add("总价(元)");
+        list.add("备注");
+
+        List<List<String>> partTableList = new ArrayList<>();
+        partTableList.add(list);
+        List<PriceListExcelVo> priceListExcelVos = orderListVo.getPriceListExcelVos();
+        for (PriceListExcelVo priceListExcelVo : priceListExcelVos) {
+            List<String> listVo = new ArrayList<>();
+            Map<String, Object> map = BeanUtil.beanToMap(priceListExcelVo);
+            for (Map.Entry<String, Object> entry : map.entrySet()) {
+                listVo.add(entry.getValue().toString());
+            }
+            partTableList.add(listVo);
+        }
+
+        Map<String, List<List<String>>> listMap = new HashMap<>();
+        // 这里的listMap中key要和模板中的域名对应
+        listMap.put("partTable", partTableList);
+
+        Map<String, Object> o = new HashMap<>();
+        o.put("tempPath", tempPath);
+        o.put("dataMap", dataMap);
+        o.put("imgMap", imgMap);
+        o.put("tableList", listMap);
+        try {
+            OutputStream out = response.getOutputStream();
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("content-type", "application/octet-stream");
+
+            String fileName = URLEncoder.encode("pdf模板导出"  + ".pdf", "UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            try {
+                PdfUtils.creatPdf(o, out);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            out.flush();
+            out.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
 }

+ 59 - 0
src/main/java/com/fdkankan/sale/service/impl/RepairInfoService.java

@@ -1,18 +1,23 @@
 package com.fdkankan.sale.service.impl;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.sale.common.PageInfo;
 import com.fdkankan.sale.common.RepairStatusEnum;
 import com.fdkankan.sale.entity.*;
 import com.fdkankan.sale.service.*;
+import com.fdkankan.sale.util.OrderListVo;
+import com.fdkankan.sale.util.StatusUtil;
 import com.fdkankan.sale.vo.request.RepairInfoListParam;
 import com.fdkankan.sale.vo.response.*;
 
 import com.fdkankan.sale.common.ResultCode;
 import com.fdkankan.sale.exception.BusinessException;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -142,4 +147,58 @@ public class RepairInfoService {
         Page<RepairerVo> page = repairService.pageInfoList(param);
         return PageInfo.PageInfo(page);
     }
+
+    public OrderListVo getExportVo(String repairId) {
+        RepairDetailVo repairDetailVo = this.getDetailsByRepairId(repairId);
+        OrderListVo vo = new OrderListVo();
+        vo.setCompanyName(repairDetailVo.getCustomer().getCompanyName());
+        vo.setCustomerName(repairDetailVo.getCustomer().getCustomerName());
+        vo.setCustomerPhone(repairDetailVo.getCustomer().getPhone());
+        vo.setCustomerAddress(repairDetailVo.getCustomerAddress().getGetAddress());
+
+        vo.setRepairId(repairDetailVo.getRepairerVo().getRepairId());
+        vo.setCameraName(StatusUtil.getCameraName(repairDetailVo.getRepairerVo().getCameraType()));
+        vo.setCameraSnCode(repairDetailVo.getRepairerVo().getCameraSnCode());
+        vo.setSendDate(repairDetailVo.getRepairerVo().getCreateTime());
+        vo.setFaultMsg(repairDetailVo.getRepairerVo().getFaultMsg());
+
+        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.getRepairerVo().getWarrantyDate());
+
+        vo.setPdfImg(repairDetailVo.getRepairRegisterVo().getCheckImg());
+        vo.setRepairMan(repairDetailVo.getRepairRegisterVo().getSysUserName());
+        vo.setRepairOverTime(repairDetailVo.getRepairRegisterVo().getOverTime());
+        vo.setRepairRemark(repairDetailVo.getRepairRegisterVo().getRemark());
+        vo.setCheckDate(repairDetailVo.getRepairRegisterVo().getCreateTime());
+        vo.setCheckResult(repairDetailVo.getRepairRegisterVo().getCheckResult());
+
+        vo.setLastRepairId(repairDetailVo.getLastRepairId());
+
+
+        List<PriceList> priceList = repairDetailVo.getPriceList();
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        String priceData = "";
+        List<PriceListExcelVo> excelVos = new ArrayList<>();
+        for (PriceList list : priceList) {
+            PriceListExcelVo excelVo = new PriceListExcelVo();
+            BeanUtils.copyProperties(list,excelVo);
+            excelVo.setAmount(list.getPrice().multiply(new BigDecimal(list.getCount())));
+            excelVos.add(excelVo);
+            totalAmount = totalAmount.add(excelVo.getAmount());
+            priceData = list.getCreateTime();
+        }
+        vo.setPriceListExcelVos(excelVos);
+        vo.setTotalCount(totalAmount);
+        vo.setPriceListDate(priceData);
+        String priceData2 = "";
+        List<RepairLog> repairLogList = repairLogService.getByRepairIdAndStatus(repairId, 5);
+        for (RepairLog repairLog : repairLogList) {
+            priceData2 = repairLog.getCreateTime();
+        }
+        vo.setConfirmPriceListDate(priceData2);
+        return vo;
+    }
 }

+ 26 - 2
src/main/java/com/fdkankan/sale/util/OrderListVo.java

@@ -1,17 +1,21 @@
 package com.fdkankan.sale.util;
 
+import com.alibaba.fastjson.JSONArray;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fdkankan.sale.entity.PriceList;
+import com.fdkankan.sale.util.pdf.PdfImg;
+import com.fdkankan.sale.vo.response.PriceListExcelVo;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
 import java.util.List;
 
 @Data
 public class OrderListVo {
 
     private String repairId;                        //维修单号
-    private String lastRepairId;                        //上次维修单号
+    private String lastRepairId;                    //上次维修单号
     private String companyName;                     //客户名称
     private String customerName;                    //联系人
     private String customerPhone;                   //联系方式
@@ -27,7 +31,7 @@ public class OrderListVo {
     private String orderFaultMsg;                   // 机器外观
     private String checkResult;                     // 故障确认结果
     private String repairRemark;                     // 维修记录
-    private String checkImg;                        // 故障现象图片
+    private PdfImg pdfImg;
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private BigDecimal totalCount;                  //总金额
     private String priceListDate;                  //报价日期
@@ -36,4 +40,24 @@ public class OrderListVo {
     private String saleDate;                    //接单日期
     private String repairMan;                    //维修人员
     private String repairOverTime;               //维修完成时间
+    private String invoiceType;               //发票种类
+
+    private List<PriceListExcelVo> priceListExcelVos;
+
+    public void setPdfImg(JSONArray list) {
+        PdfImg pdfImg = new PdfImg();
+        HashMap<Integer,String> map = new HashMap<>();
+        for (int i = 0 ;i <=list.size();i ++){
+            Object o = list.get(0);
+            String image = o.toString();
+            map.put(i ,image);
+        }
+        pdfImg.setCheckImg1(map.get(0));
+        pdfImg.setCheckImg2(map.get(1));
+        pdfImg.setCheckImg3(map.get(2));
+        pdfImg.setCheckImg4(map.get(3));
+        pdfImg.setCheckImg5(map.get(4));
+        pdfImg.setCheckImg6(map.get(5));
+        this.pdfImg = pdfImg;
+    }
 }

+ 13 - 0
src/main/java/com/fdkankan/sale/util/pdf/PdfImg.java

@@ -0,0 +1,13 @@
+package com.fdkankan.sale.util.pdf;
+
+import lombok.Data;
+
+@Data
+public class PdfImg {
+    private String checkImg1;                        // 故障现象图片
+    private String checkImg2;                        // 故障现象图片
+    private String checkImg3;                        // 故障现象图片
+    private String checkImg4;                        // 故障现象图片
+    private String checkImg5;                        // 故障现象图片
+    private String checkImg6;                        // 故障现象图片
+}

+ 113 - 0
src/main/java/com/fdkankan/sale/util/pdf/PdfUtils.java

@@ -0,0 +1,113 @@
+package com.fdkankan.sale.util.pdf;
+
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+public class PdfUtils {
+
+    /**
+     * pdf模板导出
+     */
+    public static void creatPdf(Map<String, Object> map, OutputStream out) throws Exception {
+        try {
+            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+            // 输出流
+            PdfReader reader = new PdfReader(String.valueOf(map.get("tempPath")));
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            PdfStamper stamper = new PdfStamper(reader, bos);
+            stamper.setFormFlattening(true);
+            AcroFields form = stamper.getAcroFields();
+            // 文字类的内容处理
+            Map<String, String> datemap = (Map<String, String>) map.get("dataMap");
+            form.addSubstitutionFont(bf);
+            for (String key : datemap.keySet()) {
+                String value = datemap.get(key);
+                form.setField(key, value);
+            }
+            // 图片类的内容处理
+            Map<String, String> imgmap = (Map<String, String>) map.get("imgMap");
+            for (String key : imgmap.keySet()) {
+                String value = imgmap.get(key);
+                String imgpath = value;
+                int pageNo = form.getFieldPositions(key).get(0).page;
+                Rectangle signRect = form.getFieldPositions(key).get(0).position;
+                float x = signRect.getLeft();
+                float y = signRect.getBottom();
+                // 根据路径读取图片
+                Image image = Image.getInstance(imgpath);
+                // 获取图片页面
+                PdfContentByte under = stamper.getOverContent(pageNo);
+                // 图片大小自适应
+                image.scaleToFit(signRect.getWidth(), signRect.getHeight());
+                // 添加图片
+                image.setAbsolutePosition(x, y);
+                under.addImage(image);
+            }
+            // 表格类
+            Map<String, List<List<String>>> listMap = (Map<String, List<List<String>>>) map.get("tableList");
+            for (String key : listMap.keySet()) {
+                List<List<String>> lists = listMap.get(key);
+                int pageNo = form.getFieldPositions(key).get(0).page;
+                PdfContentByte pcb = stamper.getOverContent(pageNo);
+                Rectangle signRect = form.getFieldPositions(key).get(0).position;
+                //表格位置
+                int column = lists.get(0).size();
+                int row = lists.size();
+                PdfPTable table = new PdfPTable(column);
+                float tatalWidth = signRect.getRight() - signRect.getLeft() - 1;
+                int size = lists.get(0).size();
+                float width[] = new float[size];
+                for (int i = 0; i < size; i++) {
+                    if (i == 0) {
+                        width[i] = 60f;
+                    } else {
+                        width[i] = (tatalWidth - 60) / (size - 1);
+                    }
+                }
+                table.setTotalWidth(width);
+                table.setLockedWidth(true);
+                table.setKeepTogether(true);
+                table.setSplitLate(false);
+                table.setSplitRows(true);
+                Font FontProve = new Font(bf, 10, 0);
+                //表格数据填写
+                for (int i = 0; i < row; i++) {
+                    List<String> list = lists.get(i);
+                    for (int j = 0; j < column; j++) {
+                        Paragraph paragraph = new Paragraph(String.valueOf(list.get(j)), FontProve);
+                        PdfPCell cell = new PdfPCell(paragraph);
+                        cell.setBorderWidth(1);
+                        cell.setVerticalAlignment(Element.ALIGN_CENTER);
+                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+                        cell.setLeading(0, (float) 1.4);
+                        table.addCell(cell);
+                    }
+                }
+                table.writeSelectedRows(0, -1, signRect.getLeft(), signRect.getTop(), pcb);
+            }
+            // 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
+            stamper.setFormFlattening(true);
+            stamper.close();
+            Document doc = new Document();
+            PdfCopy copy = new PdfCopy(doc, out);
+            doc.open();
+            int pageNum = reader.getNumberOfPages();
+            for (int i = 1; i <= pageNum; i++) {
+                PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
+                copy.addPage(importPage);
+            }
+            doc.close();
+        } catch (IOException e) {
+            System.out.println(e);
+        } catch (DocumentException e) {
+            System.out.println(e);
+        }
+    }
+
+}

+ 4 - 5
src/main/resources/mapper/sale/DataCountMapper.xml

@@ -27,10 +27,9 @@
     </select>
 
     <select id="warrantyTypeCount" resultType="com.fdkankan.sale.vo.response.DataGroupByCount">
-        SELECT tor.warranty_type as groupKey,count(1) as count FROM  t_order_receiving tor
-             left join t_repair r on tor.repair_id = r.repair_id
-        WHERE tor.rec_status = 'A' and r.camera_type = #{cameraType}
-          and tor.create_time between #{startTime} and #{endTime}
-        GROUP BY tor.warranty_type
+        SELECT r.warranty_type as groupKey,count(1) as count FROM  t_repair r
+        WHERE r.rec_status = 'A' and r.camera_type = #{cameraType}
+          and r.create_time between #{startTime} and #{endTime}
+        GROUP BY r.warranty_type
     </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/sale/RepairMapper.xml

@@ -115,7 +115,7 @@
 
     <select id="pageInfoList" resultType="com.fdkankan.sale.vo.response.RepairerVo">
         select distinct  r.*,rr.check_result,o.create_time as orderReceivingTime,c.customer_name,
-        o.warranty_type ,o.sys_user_id as saleId,rr.sys_user_id as repairManId, rr.over_time as repairOverTime
+        r.warranty_type ,o.sys_user_id as saleId,rr.sys_user_id as repairManId, rr.over_time as repairOverTime
         from t_repair r
         left join  t_order_receiving o on r.repair_id = o.repair_id
         left join  t_repair_register rr on r.repair_id = rr.repair_id
@@ -141,7 +141,7 @@
             and r.receiver_type = #{param.receiverType}
         </if>
         <if test="param.warrantyType != null ">
-            and o.warranty_type = #{param.warrantyType}
+            and r.warranty_type = #{param.warrantyType}
         </if>
         <if test="param.customerName != null and param.customerName != ''">
             and c.customer_name like  concat ('%',#{param.customerName},'%')