111
Administrator
2025-11-12 8a7731d775057ccace9eabb238c1c9673d78dc85
111
已修改5个文件
已添加5个文件
383 ■■■■ 文件已修改
src/main/java/com/gs/xky/entity/VwCjScSjTsBb.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/entity/VwCjScSjTsBbMonth.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/mapper/VwCjScSjTsBbMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/mapper/VwCjScSjTsBbMonthMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbMonthServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbServiceImpl.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/VwCjScSjTsBbMonthService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/VwCjScSjTsBbService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/VwCjScSjTsBbMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/VwCjScSjTsBbMonthMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/entity/VwCjScSjTsBb.java
@@ -75,4 +75,6 @@
     * ç”³è¯·æœªå…¥åº“
     */
    private String sqwrk;
}
src/main/java/com/gs/xky/entity/VwCjScSjTsBbMonth.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.gs.xky.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
/**
 *
 * @TableName VW_CJ_SC_SJ_TS_BB_MONTH
 */
@TableName(value ="VW_CJ_SC_SJ_TS_BB_MONTH")
@Data
public class VwCjScSjTsBbMonth implements Serializable {
    /**
     *
     */
    private Object itemName;
    /**
     *
     */
    private Object itemNo;
    /**
     *
     */
    private Object departmentname;
    /**
     *
     */
    private Object departmentcode;
    /**
     *
     */
    private Object daa001;
    /**
     *
     */
    private Object lineName;
    /**
     *
     */
    private Object lineNo;
    /**
     *
     */
    private Object daa008;
    /**
     *
     */
    private Object yjkg;
    /**
     *
     */
    private Object sjkg;
    /**
     *
     */
    private Object sq;
    /**
     *
     */
    private Object rk;
    /**
     *
     */
    private Object sqwwg;
    /**
     *
     */
    private Object rkwwg;
    /**
     *
     */
    private Object sqwrk;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/gs/xky/mapper/VwCjScSjTsBbMapper.java
@@ -1,13 +1,13 @@
package com.gs.xky.mapper;
import com.gs.xky.entity.VwCjScSjTsBb;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gs.xky.entity.VwCjScSjTsBb;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB】的数据库操作Mapper
* @createDate 2025-11-12 16:42:06
* @Entity com.gs.xky.entity.VwCjScSjTsBb
* @createDate 2025-11-12 19:44:46
* @Entity generator.domain.VwCjScSjTsBb
*/
public interface VwCjScSjTsBbMapper extends BaseMapper<VwCjScSjTsBb> {
src/main/java/com/gs/xky/mapper/VwCjScSjTsBbMonthMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.gs.xky.mapper;
import com.gs.xky.entity.VwCjScSjTsBbMonth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB_MONTH】的数据库操作Mapper
* @createDate 2025-11-12 19:45:00
* @Entity com.gs.xky.entity.VwCjScSjTsBbMonth
*/
public interface VwCjScSjTsBbMonthMapper extends BaseMapper<VwCjScSjTsBbMonth> {
}
src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbMonthServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package generator.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gs.xky.entity.VwCjScSjTsBbMonth;
import generator.service.VwCjScSjTsBbMonthService;
import com.gs.xky.mapper.VwCjScSjTsBbMonthMapper;
import org.springframework.stereotype.Service;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB_MONTH】的数据库操作Service实现
* @createDate 2025-11-12 19:45:00
*/
@Service
public class VwCjScSjTsBbMonthServiceImpl extends ServiceImpl<VwCjScSjTsBbMonthMapper, VwCjScSjTsBbMonth>
    implements VwCjScSjTsBbMonthService{
}
src/main/java/com/gs/xky/service/Impl/VwCjScSjTsBbServiceImpl.java
@@ -1,182 +1,20 @@
package com.gs.xky.service.Impl;
package generator.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gs.xky.entity.VwCjScSjTsBb;
import com.gs.xky.mapper.VwCjScSjTsBbMapper;
import com.gs.xky.service.DingtalkInfoService;
import com.gs.xky.service.VwCjScSjTsBbService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import generator.domain.VwCjScSjTsBb;
import generator.service.VwCjScSjTsBbService;
import generator.mapper.VwCjScSjTsBbMapper;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB】的数据库操作Service实现
 * @createDate 2025-11-12 16:42:06
 */
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB】的数据库操作Service实现
* @createDate 2025-11-12 19:44:46
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class VwCjScSjTsBbServiceImpl extends ServiceImpl<VwCjScSjTsBbMapper, VwCjScSjTsBb>
        implements VwCjScSjTsBbService {
    implements VwCjScSjTsBbService{
    private final DingtalkInfoService dingtalkInfoService;
    @Override
    public boolean exportAndSendToDingtalk() throws Exception {
        String exportFilePath = null;
        try {
            // 1. æŸ¥è¯¢æ‰€æœ‰æ•°æ®
            log.info("开始查询生产数据...");
            List<VwCjScSjTsBb> dataList = list();
            if (dataList == null || dataList.isEmpty()) {
                log.warn("没有数据需要导出");
                return false;
            }
            log.info("查询到 {} æ¡æ•°æ®", dataList.size());
            // 2. å‡†å¤‡å¯¼å‡ºæ–‡ä»¶è·¯å¾„
            String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
            String fileName = "生产数据报表_" + timestamp + ".xlsx";
            exportFilePath = "D:\\BIFile\\" + fileName;
            // ç¡®ä¿ç›®å½•存在
            FileUtil.mkdir("D:\\BIFile");
            // 3. å¯¼å‡ºåˆ°Excel
            log.info("开始导出Excel文件: {}", exportFilePath);
            exportToExcel(dataList, exportFilePath);
            log.info("Excel文件导出成功");
            // 4. å‘送钉钉消息
            log.info("开始发送钉钉文件消息...");
            boolean sendResult = dingtalkInfoService.sendFileMessage(exportFilePath);
            if (sendResult) {
                log.info("钉钉文件消息发送成功");
            } else {
                log.warn("钉钉文件消息发送失败");
            }
            return sendResult;
        } catch (Exception e) {
            log.error("导出并发送失败", e);
            throw e;
        } finally {
            // å¯é€‰ï¼šå‘送后删除临时文件
            // if (exportFilePath != null && FileUtil.exist(exportFilePath)) {
            //     FileUtil.del(exportFilePath);
            //     log.info("临时文件已删除: {}", exportFilePath);
            // }
        }
    }
    /**
     * å¯¼å‡ºæ•°æ®åˆ°Excel(两个sheet页)
     *
     * @param dataList æ•°æ®åˆ—表
     * @param filePath æ–‡ä»¶è·¯å¾„
     */
    private void exportToExcel(List<VwCjScSjTsBb> dataList, String filePath) {
        // è®¡ç®—昨天的日期
        LocalDate yesterday = LocalDate.now().minusDays(1);
        String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        // è®¡ç®—本月的起止日期
        LocalDate today = LocalDate.now();
        LocalDate firstDayOfMonth = today.withDayOfMonth(1);
        LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
        String firstDayStr = firstDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        String lastDayStr = lastDayOfMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        log.info("昨天日期: {}", yesterdayStr);
        log.info("本月范围: {} è‡³ {}", firstDayStr, lastDayStr);
        // è¿‡æ»¤æ•°æ®ï¼šé¢„计开工在昨天的数据
        List<VwCjScSjTsBb> yesterdayData = dataList.stream()
                .filter(item -> item.getYjkg() != null && item.getYjkg().startsWith(yesterdayStr))
                .collect(Collectors.toList());
        // è¿‡æ»¤æ•°æ®ï¼šé¢„计开工在本月的数据
        List<VwCjScSjTsBb> thisMonthData = dataList.stream()
                .filter(item -> {
                    if (item.getYjkg() == null || item.getYjkg().trim().isEmpty()) {
                        return false;
                    }
                    String yjkg = item.getYjkg().substring(0, Math.min(10, item.getYjkg().length()));
                    return yjkg.compareTo(firstDayStr) >= 0 && yjkg.compareTo(lastDayStr) <= 0;
                })
                .collect(Collectors.toList());
        log.info("昨天数据: {} æ¡", yesterdayData.size());
        log.info("本月数据: {} æ¡", thisMonthData.size());
        // åˆ›å»ºExcel写入器(第一个sheet)
        ExcelWriter writer = ExcelUtil.getWriter(filePath, "昨天预计开工");
        // å†™å…¥ç¬¬ä¸€ä¸ªsheet:昨天预计开工的数据
        writeSheetData(writer, yesterdayData, "昨天预计开工数据(" + yesterdayStr + ")");
        // åˆ›å»ºç¬¬äºŒä¸ªsheet
        writer.setSheet("本月预计开工");
        // å†™å…¥ç¬¬äºŒä¸ªsheet:本月预计开工的数据
        writeSheetData(writer, thisMonthData, "本月预计开工数据(" + firstDayStr + " è‡³ " + lastDayStr + ")");
        // å…³é—­writer,释放内存
        writer.close();
    }
    /**
     * å†™å…¥å•个sheet的数据
     *
     * @param writer   Excel写入器
     * @param dataList æ•°æ®åˆ—表
     * @param title    æ ‡é¢˜
     */
    private void writeSheetData(ExcelWriter writer, List<VwCjScSjTsBb> dataList, String title) {
        // æ¸…空之前的别名设置
        writer.clearHeaderAlias();
        // è®¾ç½®è¡¨å¤´åˆ«åï¼ˆä¸­æ–‡åˆ—名)
        writer.addHeaderAlias("daa001", "工单号");
        writer.addHeaderAlias("itemNo", "物料编码");
        writer.addHeaderAlias("itemName", "物料名称");
        writer.addHeaderAlias("departmentname", "车间名称");
        writer.addHeaderAlias("lineName", "线体名称");
        writer.addHeaderAlias("departmentcode", "车间编码");
        writer.addHeaderAlias("lineNo", "线体编码");
        writer.addHeaderAlias("daa008", "工单数量");
        writer.addHeaderAlias("yjkg", "预计开工");
        writer.addHeaderAlias("sjkg", "实际开工");
        writer.addHeaderAlias("sq", "申请入库数");
        writer.addHeaderAlias("rk", "入库数");
        writer.addHeaderAlias("sqwwg", "申请未完工数");
        writer.addHeaderAlias("rkwwg", "入库未完工");
        writer.addHeaderAlias("sqwrk", "申请未入库");
        // åˆå¹¶å•元格作为标题行
        writer.merge(14, title);
        // å†™å…¥æ•°æ®ï¼Œé»˜è®¤ä¼šä½¿ç”¨åˆ«åä½œä¸ºè¡¨å¤´
        writer.write(dataList, true);
        // è®¾ç½®åˆ—宽自适应
        writer.autoSizeColumnAll();
    }
}
src/main/java/com/gs/xky/service/VwCjScSjTsBbMonthService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package generator.service;
import com.gs.xky.entity.VwCjScSjTsBbMonth;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB_MONTH】的数据库操作Service
* @createDate 2025-11-12 19:45:00
*/
public interface VwCjScSjTsBbMonthService extends IService<VwCjScSjTsBbMonth> {
}
src/main/java/com/gs/xky/service/VwCjScSjTsBbService.java
@@ -1,19 +1,13 @@
package com.gs.xky.service;
package generator.service;
import generator.domain.VwCjScSjTsBb;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gs.xky.entity.VwCjScSjTsBb;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB】的数据库操作Service
 * @createDate 2025-11-12 16:42:06
 */
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€VW_CJ_SC_SJ_TS_BB】的数据库操作Service
* @createDate 2025-11-12 19:44:46
*/
public interface VwCjScSjTsBbService extends IService<VwCjScSjTsBb> {
    /**
     * å¯¼å‡ºæ•°æ®åˆ°Excel并发送钉钉消息
     *
     * @return æ˜¯å¦æˆåŠŸ
     */
    boolean exportAndSendToDingtalk() throws Exception;
}
src/main/resources/mapper/VwCjScSjTsBbMapper.xml
@@ -2,7 +2,7 @@
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.xky.mapper.VwCjScSjTsBbMapper">
<mapper namespace="generator.mapper.VwCjScSjTsBbMapper">
</mapper>
src/main/resources/mapper/VwCjScSjTsBbMonthMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.xky.mapper.VwCjScSjTsBbMonthMapper">
    <resultMap id="BaseResultMap" type="com.gs.xky.entity.VwCjScSjTsBbMonth">
            <result property="itemName" column="ITEM_NAME" />
            <result property="itemNo" column="ITEM_NO" />
            <result property="departmentname" column="DEPARTMENTNAME" />
            <result property="departmentcode" column="DEPARTMENTCODE" />
            <result property="daa001" column="DAA001" />
            <result property="lineName" column="LINE_NAME" />
            <result property="lineNo" column="LINE_NO" />
            <result property="daa008" column="DAA008" />
            <result property="yjkg" column="YJKG" />
            <result property="sjkg" column="SJKG" />
            <result property="sq" column="SQ" />
            <result property="rk" column="RK" />
            <result property="sqwwg" column="SQWWG" />
            <result property="rkwwg" column="RKWWG" />
            <result property="sqwrk" column="SQWRK" />
    </resultMap>
    <sql id="Base_Column_List">
        ITEM_NAME,ITEM_NO,DEPARTMENTNAME,DEPARTMENTCODE,DAA001,LINE_NAME,
        LINE_NO,DAA008,YJKG,SJKG,SQ,
        RK,SQWWG,RKWWG,SQWRK
    </sql>
</mapper>