Redeem 1 år sedan
förälder
incheckning
d6b5a2c995

+ 6 - 2
pom.xml

@@ -6,7 +6,7 @@
 
     <groupId>org.example</groupId>
     <artifactId>dil-wms-api</artifactId>
-    <version>1.10</version>
+    <version>1.11</version>
 
     <parent>
         <groupId>org.springframework.boot</groupId>
@@ -108,7 +108,11 @@
             <artifactId>framework</artifactId>
             <version>1.0</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.1.1</version>
+        </dependency>
 
     </dependencies>
     <build>

+ 4 - 0
src/main/java/com/steerinfo/dil/mapper/OyeOutboundResultMapper.java

@@ -26,4 +26,8 @@ public interface OyeOutboundResultMapper extends IBaseMapper<OyeOutboundResult,
 
     int updateOrderStatus(BigDecimal orderId);
 
+    Map<String, Object> getOldMes(BigDecimal resultId);
+
+    int updateSaleMakeDate1(Map<String, Object> updateMap);
+
 }

+ 105 - 1
src/main/java/com/steerinfo/dil/service/impl/OyeResultServiceImpl.java

@@ -1,6 +1,7 @@
 package com.steerinfo.dil.service.impl;
 
 
+import com.alibaba.excel.EasyExcel;
 import com.alibaba.fastjson.JSONObject;
 import com.steerinfo.dil.feign.BmsTruckFeign;
 import com.steerinfo.dil.mapper.OyeInboundResultMapper;
@@ -13,13 +14,17 @@ import com.steerinfo.dil.model.OyeRealtimeInventory;
 import com.steerinfo.dil.model.TmstruckWeightBatch;
 import com.steerinfo.dil.service.IOyeResultService;
 import com.steerinfo.dil.util.DataChange;
+import com.steerinfo.dil.util.EasyExcelUtils;
 import com.sun.org.apache.bcel.internal.generic.RETURN;
+import org.omg.PortableInterceptor.SUCCESSFUL;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.xml.crypto.Data;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 @Service
@@ -171,6 +176,10 @@ public class OyeResultServiceImpl implements IOyeResultService {
 
     @Transactional(rollbackFor = Exception.class)
     public synchronized String insertOutboundResult(Map<String,Object> mapValue) throws Exception {
+        if (DataChange.dataToBigDecimal(mapValue.get("reUpdateOutBound")).intValue() == 1) {
+            reUpdateOutBound(mapValue);
+            return "操作成功";
+        }
         List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
         List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
         List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
@@ -218,7 +227,6 @@ public class OyeResultServiceImpl implements IOyeResultService {
             oyeOutboundResult.setInboundArea(map.get("inboundArea").toString());
             oyeOutboundResult.setInboundWarehouse(map.get("inboundWarehouse").toString());
             oyeOutboundResult.setSaleMaterialId(DataChange.dataToBigDecimal(map.get("saleMaterialId")));
-
             //更新制单日期
             oyeOutboundResult.setMeter(meter);
             oyeOutboundResult.setMaterialId(materialId);
@@ -325,6 +333,10 @@ public class OyeResultServiceImpl implements IOyeResultService {
 
     @Transactional(rollbackFor = Exception.class)
     public synchronized String updateInsertRealTime(Map<String, Object> map) throws Exception{
+        System.out.println("===========" + new Date());
+        JSONObject jsonObject = new JSONObject(map);
+        System.out.println(jsonObject);
+        System.out.println("===========" + new Date());
         // 划分实时库存数据
         // 针对原先的库存,需要进行出库;针对划分后的库存需要进行入库;先出后入;
         // 创建出库需要的数据;
@@ -416,6 +428,8 @@ public class OyeResultServiceImpl implements IOyeResultService {
         return "操作成功";
     }
 
+
+
     @Transactional(rollbackFor = Exception.class)
     public List<Map<String, Object>> receiveSendReport(Map<String, Object> map) {
         return oyeRealtimeInventoryMapper.receiveSendReport(map);
@@ -465,4 +479,94 @@ public class OyeResultServiceImpl implements IOyeResultService {
         }
         return 1;
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    public int reUpdateOutBound(Map<String, Object> mapValue) throws Exception {
+        List<OyeOutboundResult> oyeOutboundResults = new ArrayList<>();
+        List<TmstruckWeightBatch> tmstruckWeightBatches = new ArrayList<>();
+        List<OyeRealtimeInventory> oyeRealtimeInventories = new ArrayList<>();
+        List<Map<String,Object>> mapList = (List<Map<String,Object>>) mapValue.get("mapList");
+        System.out.println("===========" + new Date());
+        JSONObject jsonObject = new JSONObject(mapValue);
+        System.out.println(jsonObject);
+        System.out.println("===========" + new Date());
+        for (Map<String,Object> map : mapList) {
+            BigDecimal resultId =  DataChange.dataToBigDecimal(map.get("resultId"));
+            BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
+            //判断有没有实绩ID
+            if(resultId == null || resultId.intValue() == 0) {
+                continue;
+            }
+            //获取前端传输过来的件数、理重、净重
+            BigDecimal materialNumber = DataChange.dataToBigDecimal(map.get("materialNumber"));
+            BigDecimal theoryWeight = DataChange.dataToBigDecimal(map.get("theoryWeight"));
+            BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
+            if(materialNumber == null || materialNumber.intValue() == 0) {
+                throw new Exception("物资件数错误");
+            }
+            if(theoryWeight == null || theoryWeight.intValue() == 0) {
+                throw new Exception("理重信息错误");
+            }
+            if(netWeight == null || netWeight.intValue() == 0) {
+                throw new Exception("净重信息错误");
+            }
+            //根据实绩id获取件数、理重、净重
+            Map<String,Object> oldMes = oyeOutboundResultMapper.getOldMes(resultId);
+            BigDecimal netWeightSub = netWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("netWeight")));
+            BigDecimal theoryWeightSub = theoryWeight.subtract(DataChange.dataToBigDecimal(oldMes.get("theoryWeight")));
+            if (netWeightSub.compareTo(new BigDecimal(0)) == 0 && theoryWeightSub.compareTo(new BigDecimal(0)) == 0) {
+                continue;
+            }
+            OyeOutboundResult oyeOutboundResult = oyeOutboundResultMapper.selectByPrimaryKey(resultId);
+            oyeOutboundResult.setTheoryWeight(theoryWeight);
+            oyeOutboundResult.setNetWeight(netWeight);
+            oyeOutboundResult.setMaterialNumber(materialNumber);
+            oyeOutboundResult.setUpdateTime(new Date());
+            map.put("flag",2);
+            Map<String, Object> updateRealMap = new HashMap<>();
+            updateRealMap.put("inventoryId",oldMes.get("inventoryId"));
+            updateRealMap.put("materialNumber",materialNumber.subtract(DataChange.dataToBigDecimal(oldMes.get("materialNumber"))));
+            updateRealMap.put("netWeight",netWeightSub);
+            updateRealMap.put("theoryWeight",theoryWeightSub);
+            OyeRealtimeInventory oyeRealtimeInventory = updateRealTimeInventory(updateRealMap);
+            oyeRealtimeInventories.add(oyeRealtimeInventory);
+            TmstruckWeightBatch  tmstruckWeightBatch  = tmstruckWeightBatchMapper.selectByPrimaryKey(weightBatchId);
+            tmstruckWeightBatch.setBatchNetWeight(netWeight);
+            tmstruckWeightBatches.add(tmstruckWeightBatch);
+            Map<String, Object> updateMap = new HashMap<>();
+            updateMap.put("weightBatchId",tmstruckWeightBatch.getWeightBatchId());
+            updateMap.put("materialNumber",materialNumber);
+            updateMap.put("saleMaterialId",DataChange.dataToBigDecimal(map.get("saleMaterialId")));
+            updateMap.put("materialWeight",theoryWeight);
+            oyeOutboundResultMapper.updateSaleMakeDate1(updateMap);
+            oyeOutboundResultMapper.updateOrderStatus(DataChange.dataToBigDecimal(map.get("orderId")));
+            oyeOutboundResults.add(oyeOutboundResult);
+        }
+        oyeOutboundResultMapper.batchUpdate(oyeOutboundResults);
+        oyeRealtimeInventoryMapper.batchUpdate(oyeRealtimeInventories);
+        tmstruckWeightBatchMapper.batchUpdate(tmstruckWeightBatches);
+        return 1;
+    }
+
+
+
+
+
+    //public int exportExcel() {
+    //    Calendar calendar = Calendar.getInstance();
+    //    int year = calendar.get(Calendar.YEAR);
+    //    int month = calendar.get(Calendar.MONTH) + 1;
+    //    int day = calendar.get(Calendar.DAY_OF_MONTH);
+    //    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+    //    String dateStr = simpleDateFormat.format(calendar.getTime());
+    //    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+    //    response.setCharacterEncoding("utf-8");
+    //    String fileName = URLEncoder.encode(year + "" + month + "" + day + "运输单价", "UTF-8").replaceAll("\\+", "%20");
+    //    response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+    //    EasyExcel.write(response.getOutputStream(), AmsTransPrice.class).sheet(dateStr + "运输单价").
+    //            registerWriteHandler(new CustomCellWriteWidthConfig()).registerWriteHandler(new CustomCellWriteHeightConfig()).
+    //            registerWriteHandler(EasyExcelUtils.getStyleStrategy()).
+    //            doWrite(list);
+    //    return success();
+    //}
 }

+ 71 - 0
src/main/java/com/steerinfo/dil/util/EasyExcelUtils.java

@@ -0,0 +1,71 @@
+package com.steerinfo.dil.util;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.List;
+
+
+public class EasyExcelUtils {
+    /**
+     * 设置excel样式
+     */
+    public static HorizontalCellStyleStrategy getStyleStrategy() {
+        // 头的策略  样式调整
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 头背景 浅绿
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        WriteFont headWriteFont = new WriteFont();
+        // 头字号
+        headWriteFont.setFontHeightInPoints((short) 12);
+        // 字体样式
+        headWriteFont.setFontName("宋体");
+        headWriteCellStyle.setWriteFont(headWriteFont);
+        // 自动换行
+        headWriteCellStyle.setWrapped(true);
+        // 设置细边框
+        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);
+        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);
+        headWriteCellStyle.setBorderRight(BorderStyle.THIN);
+        headWriteCellStyle.setBorderTop(BorderStyle.THIN);
+        // 设置边框颜色 25灰度
+        headWriteCellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
+        headWriteCellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
+        headWriteCellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
+        headWriteCellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
+        // 水平对齐方式
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        // 垂直对齐方式
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 内容的策略 宋体
+        WriteCellStyle contentStyle = new WriteCellStyle();
+        // 设置垂直居中
+        contentStyle.setWrapped(true);
+        contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 设置 水平居中
+//        contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+        WriteFont contentWriteFont = new WriteFont();
+        // 内容字号
+        contentWriteFont.setFontHeightInPoints((short) 12);
+        // 字体样式
+        contentWriteFont.setFontName("宋体");
+        contentStyle.setWriteFont(contentWriteFont);
+        // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
+        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentStyle);
+    }
+
+
+
+}

+ 172 - 0
src/main/java/com/steerinfo/dil/util/poiutil.java

@@ -0,0 +1,172 @@
+package com.steerinfo.dil.util;
+
+
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+//导入excle工具类
+
+public class poiutil {
+    private final static String xls = "xls";
+    private final static String xlsx = "xlsx";
+    private final static String DATE_FORMAT = "yyyy/MM/dd";
+
+    //参数说明:  fileName:文件名   projects:对象集合  columnNames: 列名   keys: map中的key
+    public static void start_download(HttpServletResponse response, String fileName, List<?> projects, String[] columnNames, String[] keys) throws IOException {
+
+        //将集合中对象的属性  对应到  List<Map<String,Object>>
+        List<Map<String, Object>> list = createExcelRecord(projects, keys);
+
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        try {
+            //将转换成的Workbook对象通过流形式下载
+            createWorkBook(list, keys, columnNames).write(os);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        byte[] content = os.toByteArray();
+        InputStream is = new ByteArrayInputStream(content);
+        // 设置response参数,可以打开下载页面
+        response.reset();
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes(), StandardCharsets.ISO_8859_1));
+        ServletOutputStream out = response.getOutputStream();
+        BufferedInputStream bis = null;
+        BufferedOutputStream bos = null;
+        try {
+            bis = new BufferedInputStream(is);
+            bos = new BufferedOutputStream(out);
+            byte[] buff = new byte[2048];
+            int bytesRead;
+            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
+                bos.write(buff, 0, bytesRead);
+            }
+        } catch (final IOException e) {
+            throw e;
+        } finally {
+            if (bis != null) bis.close();
+            if (bos != null) bos.close();
+        }
+    }
+
+    private static List<Map<String, Object>> createExcelRecord(List<?> projects, String[] keys) {
+        List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("sheetName", "sheet");
+        listmap.add(map);
+        Object project = null;
+        for (int j = 0; j < projects.size(); j++) {
+            project = projects.get(j);
+            Map<String, Object> mapValue = new HashMap<String, Object>();
+            for (int i = 0; i < keys.length; i++) {
+                mapValue.put(keys[i], getFieldValueByName(keys[i], project));
+            }
+
+            listmap.add(mapValue);
+        }
+        return listmap;
+    }
+
+    /**
+     * 利用反射  根据属性名获取属性值
+     */
+    private static Object getFieldValueByName(String fieldName, Object o) {
+        try {
+            String firstLetter = fieldName.substring(0, 1).toUpperCase();
+            String getter = "get" + firstLetter + fieldName.substring(1);
+            Method method = o.getClass().getMethod(getter);
+            Object value = method.invoke(o);
+            return value;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 创建excel文档对象
+     *
+     * @param keys        list中map的key数组集合
+     * @param columnNames excel的列名
+     */
+    private static Workbook createWorkBook(List<Map<String, Object>> list, String[] keys, String[] columnNames) {
+        // 创建excel工作簿
+        Workbook wb = new XSSFWorkbook();
+
+        // 创建第一个sheet(页),并命名
+        Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
+        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
+        for (int i = 0; i < keys.length; i++) {
+            sheet.setColumnWidth((short) i, (short) (35.7 * 150));
+        }
+
+        // 创建第一行
+        Row row = sheet.createRow((short) 0);
+
+        // 创建两种单元格格式
+        CellStyle cs = wb.createCellStyle();
+        CellStyle cs2 = wb.createCellStyle();
+
+        // 创建两种字体
+        Font f = wb.createFont();
+        Font f2 = wb.createFont();
+
+        // 创建第一种字体样式(用于列名)
+        f.setFontHeightInPoints((short) 10);
+        f.setColor(IndexedColors.BLACK.getIndex());
+        f.setBold(true);
+
+        // 创建第二种字体样式(用于值)
+        f2.setFontHeightInPoints((short) 10);
+        f2.setColor(IndexedColors.BLACK.getIndex());
+
+        // 设置第一种单元格的样式(用于列名)
+        cs.setFont(f);
+        cs.setBorderLeft(BorderStyle.THIN);
+        cs.setBorderRight(BorderStyle.THIN);
+        cs.setBorderTop(BorderStyle.THIN);
+        cs.setBorderBottom(BorderStyle.THIN);
+        cs.setAlignment(HorizontalAlignment.CENTER);
+
+        // 设置第二种单元格的样式(用于值)
+        cs2.setFont(f2);
+        cs2.setBorderLeft(BorderStyle.THIN);
+        cs2.setBorderRight(BorderStyle.THIN);
+        cs2.setBorderTop(BorderStyle.THIN);
+        cs2.setBorderBottom(BorderStyle.THIN);
+        cs2.setAlignment(HorizontalAlignment.CENTER);
+        //设置列名
+        for (int i = 0; i < columnNames.length; i++) {
+            Cell cell = row.createCell(i);
+            cell.setCellValue(columnNames[i]);
+            cell.setCellStyle(cs);
+        }
+        //设置每行每列的值
+        for (short i = 1; i < list.size(); i++) {
+            // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
+            // 创建一行,在页sheet上
+            Row row1 = sheet.createRow(i);
+            // 在row行上创建一个方格
+            for (short j = 0; j < keys.length; j++) {
+                Cell cell = row1.createCell(j);
+                cell.setCellValue(list.get(i).get(keys[j]) == null ? " " : list.get(i).get(keys[j]).toString());
+                cell.setCellStyle(cs2);
+            }
+        }
+        return wb;
+    }
+
+
+}

+ 16 - 0
src/main/resources/com/steerinfo/dil/mapper/OyeOutboundResultMapper.xml

@@ -886,5 +886,21 @@
     SET ORDER_STATUS = '已出库'
     WHERE ORDER_ID = #{orderId}
   </update>
+  <select id="getOldMes" resultType="java.util.Map">
+    SELECT OOR.MATERIAL_NUMBER "materialNumber",
+           OOR.THEORY_WEIGHT   "theoryWeight",
+           OOR.NET_WEIGHT      "netWeight",
+           OOR.INVENTORY_ID    "inventoryId"
+           FROM OYE_OUTBOUND_RESULT OOR
+    WHERE OOR.RESULT_ID = #{resultId}
+  </select>
+  <update id="updateSaleMakeDate1">
+    UPDATE AMS_SALE_MATERIAL ASM
+    SET ASM.WEIGHT_BATCH_ID = #{weightBatchId},
+        ASM.MATERIAL_NUMBER = #{materialNumber},
+        ASM.MATERIAL_WEIGHT = #{materialWeight}
+    WHERE ASM.SALE_MATERIAL_ID = #{saleMaterialId}
+  </update>
+
 
 </mapper>