xiongwanxiong 1 долоо хоног өмнө
parent
commit
7a8e654eed

+ 114 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/controller/CustomMStatFController.java

@@ -0,0 +1,114 @@
+package cn.gov.customs.wxjy.statReport.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.gov.customs.cacp.sdks.core.result.Result;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.cacp.sdks.core.user.trans.UserContextHolder;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import cn.gov.customs.wxjy.common.core.controller.BaseController;
+import org.springframework.web.multipart.MultipartFile;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatF;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatFQuery;
+import cn.gov.customs.wxjy.statReport.service.ICustomMStatFService;
+import cn.gov.customs.wxjy.common.utils.poi.ExcelUtil;
+import cn.gov.customs.wxjy.common.core.page.TableDataInfo;
+
+/**
+ * 按业务现场关区分类Controller
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+@RestController
+@RequestMapping("/statReport/CustomMStatF")
+@RequiredArgsConstructor
+public class CustomMStatFController extends BaseController {
+
+    private final ICustomMStatFService customMStatFService;
+
+    /**
+     * 查询按业务现场关区分类列表
+     */
+    @PostMapping("/get-list")
+    public Result<PageInfo<CustomMStatF>> list(@RequestBody CustomMStatFQuery query) {
+        PageHelper.startPage(query.getPageIndex(), query.getPageSize());
+        PageInfo<CustomMStatF> list = customMStatFService.selectPageList(query);
+        return Result.success(list);
+    }
+
+    /**
+     * 获取按业务现场关区分类详细信息
+     */
+    @GetMapping(value = "/get-detail")
+    public Result<CustomMStatF> getInfo(@RequestParam String ID) {
+        return Result.success(customMStatFService.selectByID(ID));
+    }
+
+    /**
+     * 新增按业务现场关区分类
+     */
+    @PostMapping("/insert-customMStatF")
+    public Result<Integer> add(@RequestBody CustomMStatF customMStatF) {
+        return Result.success(customMStatFService.insert(customMStatF));
+    }
+
+    /**
+     * 修改按业务现场关区分类
+     */
+    @PostMapping("/update-customMStatF")
+    public Result<Integer> edit(@RequestBody CustomMStatF customMStatF) {
+        return Result.success(customMStatFService.update(customMStatF));
+    }
+
+    /**
+     * 删除按业务现场关区分类
+     */
+    @PostMapping("/delete-customMStatF")
+    public Result<Integer> remove(@RequestBody String[] ids) {
+        return Result.success(customMStatFService.deleteByIDs(ids));
+    }
+
+    /**
+    * 导入 按业务现场关区分类
+    * @param file
+    * @param updateSupport
+    * @return
+    * @throws Exception
+    */
+    @PostMapping("/import-customMStatF")
+    public Result<String> importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        CacpTransUser user = UserContextHolder.currentUser();
+        ExcelUtil<CustomMStatF> util = new ExcelUtil<CustomMStatF>(CustomMStatF.class);
+        List<CustomMStatF> customMStatFList = util.importExcel(file.getInputStream());
+        String message = customMStatFService.importCustomMStatF(customMStatFList, updateSupport, user);
+        return Result.success(message);
+    }
+
+    /**
+     * 导出按业务现场关区分类列表
+     */
+    @PostMapping("/get-customMStatF-export")
+    public void export(HttpServletResponse response, @RequestBody CustomMStatFQuery query) {
+        List<CustomMStatF> list = customMStatFService.selectList(query);
+        ExcelUtil<CustomMStatF> util = new ExcelUtil<CustomMStatF>(CustomMStatF. class);
+        util.exportExcel(response, list, "按业务现场关区分类数据");
+    }
+
+    /**
+    * 获取导入模板
+    * @param response
+    */
+    @PostMapping("/template-customMStatF")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<CustomMStatF> util = new ExcelUtil<CustomMStatF>(CustomMStatF.class);
+        util.importTemplateExcel(response, "按业务现场关区分类");
+    }
+}

+ 72 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/dao/CustomMStatFMapper.java

@@ -0,0 +1,72 @@
+package cn.gov.customs.wxjy.statReport.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatF;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatFQuery;
+
+/**
+ * 按业务现场关区分类Mapper接口
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+@Mapper
+public interface CustomMStatFMapper {
+    /**
+     * 查询按业务现场关区分类
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 按业务现场关区分类
+     */
+    public CustomMStatF selectByID(String ID);
+
+    /**
+     * 查询按业务现场关区分类列表
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 按业务现场关区分类集合
+     */
+    public List<CustomMStatF> selectList(CustomMStatFQuery customMStatF);
+
+    /**
+     * 新增按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    public int insert(CustomMStatF customMStatF);
+
+    /**
+     * 修改按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    public int update(CustomMStatF customMStatF);
+
+    /**
+     * 删除按业务现场关区分类
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 批量删除按业务现场关区分类
+     *
+     * @param IDs 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] IDs);
+
+    /**
+     * 逻辑删除按业务现场关区分类
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+}

+ 166 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/pojo/CustomMStatF.java

@@ -0,0 +1,166 @@
+package cn.gov.customs.wxjy.statReport.pojo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import cn.gov.customs.wxjy.common.annotation.Excel;
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+
+/**
+ * 按业务现场关区分类对象 WXJY_CUSTOM_M_STAT_F
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+@Data
+public class CustomMStatF extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String ID;
+
+    /** 月度 */
+    @Excel(name = "月度")
+    private String MONTH;
+
+    /** 业务现场关区代码 */
+    @Excel(name = "业务现场关区代码")
+    private String customCode;
+
+    /** 进口单数 */
+    @Excel(name = "进口单数")
+    private String impDeclCount;
+
+    /** 进口查验单数 */
+    @Excel(name = "进口查验单数")
+    private String impManDeclCount;
+
+    /** 进口接单(人工审单)单数 */
+    @Excel(name = "进口接单", readConverterExp = "人=工审单")
+    private String impManualAuditDeclCount;
+
+    /** 上个月进口单数 */
+    @Excel(name = "上个月进口单数")
+    private String impDeclCountLm;
+
+    /** 去年12月进口单数 */
+    @Excel(name = "去年12月进口单数")
+    private String impDeclCountLyDec;
+
+    /** 今年截止当月总进口单数 */
+    @Excel(name = "今年截止当月总进口单数")
+    private String impDeclCountCuryear;
+
+    /** 前年总进口单数 */
+    @Excel(name = "前年总进口单数")
+    private String impDeclCountYbl;
+
+    /** 进口平均整体通关时间(小时) */
+    @Excel(name = "进口平均整体通关时间", readConverterExp = "小=时")
+    private String impTotalCost;
+
+    /** 进口平均整体通关时间-上月 */
+    @Excel(name = "进口平均整体通关时间-上月")
+    private String impTotalCostLm;
+
+    /** 进口平均整体通关时间-去年12月 */
+    @Excel(name = "进口平均整体通关时间-去年12月")
+    private String impTotalCostLyDec;
+
+    /** 进口平均整体通关时间-1至当月 */
+    @Excel(name = "进口平均整体通关时间-1至当月")
+    private String impTotalCostCy;
+
+    /** 进口平均整体通关时间-前年 */
+    @Excel(name = "进口平均整体通关时间-前年")
+    private String impTotalCostYbl;
+
+    /** 进口平均海关通关时间(小时) */
+    @Excel(name = "进口平均海关通关时间", readConverterExp = "小=时")
+    private String impCuCost;
+
+    /** 进口平均海关通关时间(小时)-上月 */
+    @Excel(name = "进口平均海关通关时间", readConverterExp = "小=时")
+    private String impCuCostLm;
+
+    /** 进口平均海关通关时间-去年12月 */
+    @Excel(name = "进口平均海关通关时间-去年12月")
+    private String impCuCostLyDec;
+
+    /** 进口平均海关通关时间-1至当月 */
+    @Excel(name = "进口平均海关通关时间-1至当月")
+    private String impCuCostCy;
+
+    /** 进口平均海关通关时间-前年 */
+    @Excel(name = "进口平均海关通关时间-前年")
+    private String impCuCostYbl;
+
+    /** 出口单数 */
+    @Excel(name = "出口单数")
+    private String expDeclCount;
+
+    /** 出口查验单数 */
+    @Excel(name = "出口查验单数")
+    private String expManDeclCount;
+
+    /** 出口接单(人工审单)单数 */
+    @Excel(name = "出口接单", readConverterExp = "人=工审单")
+    private String expManualAuditDeclCount;
+
+    /** 上个月出口单数 */
+    @Excel(name = "上个月出口单数")
+    private String expDeclCountLm;
+
+    /** 去年12月进口单数 */
+    @Excel(name = "去年12月进口单数")
+    private String expDeclCountLyDec;
+
+    /** 今年截止当月总出口单数 */
+    @Excel(name = "今年截止当月总出口单数")
+    private String expDeclCountCuryear;
+
+    /** 前年总出口单数 */
+    @Excel(name = "前年总出口单数")
+    private String expDeclCountYbl;
+
+    /** 出口平均整体通关时间(小时) */
+    @Excel(name = "出口平均整体通关时间", readConverterExp = "小=时")
+    private String expTotalCost;
+
+    /** 出口平均整体通关时间(小时)-上月 */
+    @Excel(name = "出口平均整体通关时间", readConverterExp = "小=时")
+    private String expTotalCostLm;
+
+    /** 出口平均整体通关时间-去年12月 */
+    @Excel(name = "出口平均整体通关时间-去年12月")
+    private String expTotalCostLyDec;
+
+    /** 出口平均整体通关时间-1至当月 */
+    @Excel(name = "出口平均整体通关时间-1至当月")
+    private String expTotalCostCy;
+
+    /** 出口平均整体通关时间-前年 */
+    @Excel(name = "出口平均整体通关时间-前年")
+    private String expTotalCostYbl;
+
+    /** 出口平均海关通关时间(小时) */
+    @Excel(name = "出口平均海关通关时间", readConverterExp = "小=时")
+    private String expCuCost;
+
+    /** 出口平均海关通关时间(小时)-上月 */
+    @Excel(name = "出口平均海关通关时间", readConverterExp = "小=时")
+    private String expCuCostLm;
+
+    /** 出口平均海关通关时间-去年12月 */
+    @Excel(name = "出口平均海关通关时间-去年12月")
+    private String expCuCostLyDec;
+
+    /** 出口平均海关通关时间-1至当月 */
+    @Excel(name = "出口平均海关通关时间-1至当月")
+    private String expCuCostCy;
+
+    /** 出口平均海关通关时间-前年 */
+    @Excel(name = "出口平均海关通关时间-前年")
+    private String expCuCostYbl;
+
+}

+ 135 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/pojo/CustomMStatFQuery.java

@@ -0,0 +1,135 @@
+package cn.gov.customs.wxjy.statReport.pojo;
+
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 按业务现场关区分类对象 WXJY_CUSTOM_M_STAT_F
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+@Data
+public class CustomMStatFQuery implements Serializable {
+
+    /** 主键 */
+    private String ID;
+
+    /** 月度 */
+                    private String MONTH;
+
+    /** 业务现场关区代码 */
+                    private String customCode;
+
+    /** 进口单数 */
+                    private String impDeclCount;
+
+    /** 进口查验单数 */
+                    private String impManDeclCount;
+
+    /** 进口接单(人工审单)单数 */
+                    private String impManualAuditDeclCount;
+
+    /** 上个月进口单数 */
+                    private String impDeclCountLm;
+
+    /** 去年12月进口单数 */
+                    private String impDeclCountLyDec;
+
+    /** 今年截止当月总进口单数 */
+                    private String impDeclCountCuryear;
+
+    /** 前年总进口单数 */
+                    private String impDeclCountYbl;
+
+    /** 进口平均整体通关时间(小时) */
+                    private String impTotalCost;
+
+    /** 进口平均整体通关时间-上月 */
+                    private String impTotalCostLm;
+
+    /** 进口平均整体通关时间-去年12月 */
+                    private String impTotalCostLyDec;
+
+    /** 进口平均整体通关时间-1至当月 */
+                    private String impTotalCostCy;
+
+    /** 进口平均整体通关时间-前年 */
+                    private String impTotalCostYbl;
+
+    /** 进口平均海关通关时间(小时) */
+                    private String impCuCost;
+
+    /** 进口平均海关通关时间(小时)-上月 */
+                    private String impCuCostLm;
+
+    /** 进口平均海关通关时间-去年12月 */
+                    private String impCuCostLyDec;
+
+    /** 进口平均海关通关时间-1至当月 */
+                    private String impCuCostCy;
+
+    /** 进口平均海关通关时间-前年 */
+                    private String impCuCostYbl;
+
+    /** 出口单数 */
+                    private String expDeclCount;
+
+    /** 出口查验单数 */
+                    private String expManDeclCount;
+
+    /** 出口接单(人工审单)单数 */
+                    private String expManualAuditDeclCount;
+
+    /** 上个月出口单数 */
+                    private String expDeclCountLm;
+
+    /** 去年12月进口单数 */
+                    private String expDeclCountLyDec;
+
+    /** 今年截止当月总出口单数 */
+                    private String expDeclCountCuryear;
+
+    /** 前年总出口单数 */
+                    private String expDeclCountYbl;
+
+    /** 出口平均整体通关时间(小时) */
+                    private String expTotalCost;
+
+    /** 出口平均整体通关时间(小时)-上月 */
+                    private String expTotalCostLm;
+
+    /** 出口平均整体通关时间-去年12月 */
+                    private String expTotalCostLyDec;
+
+    /** 出口平均整体通关时间-1至当月 */
+                    private String expTotalCostCy;
+
+    /** 出口平均整体通关时间-前年 */
+                    private String expTotalCostYbl;
+
+    /** 出口平均海关通关时间(小时) */
+                    private String expCuCost;
+
+    /** 出口平均海关通关时间(小时)-上月 */
+                    private String expCuCostLm;
+
+    /** 出口平均海关通关时间-去年12月 */
+                    private String expCuCostLyDec;
+
+    /** 出口平均海关通关时间-1至当月 */
+                    private String expCuCostCy;
+
+    /** 出口平均海关通关时间-前年 */
+                    private String expCuCostYbl;
+
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date beginDate;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+    private int pageIndex;
+    private int pageSize;
+}

+ 89 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/service/ICustomMStatFService.java

@@ -0,0 +1,89 @@
+package cn.gov.customs.wxjy.statReport.service;
+
+import java.util.List;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatF;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatFQuery;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 按业务现场关区分类Service接口
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+public interface ICustomMStatFService {
+    /**
+     * 查询按业务现场关区分类
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 按业务现场关区分类
+     */
+    public CustomMStatF selectByID(String ID);
+
+    /**
+     * 分页查询按业务现场关区分类列表
+     *
+     * @param query
+     * @return 按业务现场关区分类集合
+     */
+    public PageInfo<CustomMStatF> selectPageList(CustomMStatFQuery query);
+
+    /**
+     * 查询按业务现场关区分类列表
+     *
+     * @param query
+     * @return 按业务现场关区分类集合
+     */
+    public List<CustomMStatF> selectList(CustomMStatFQuery query);
+
+    /**
+     * 新增按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    public int insert(CustomMStatF customMStatF);
+
+    /**
+     * 修改按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    public int update(CustomMStatF customMStatF);
+
+    /**
+     * 批量删除按业务现场关区分类
+     *
+     * @param ids 需要删除的ids主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] ids);
+
+    /**
+     * 删除按业务现场关区分类信息
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 逻辑删除按业务现场关区分类信息
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+
+    /**
+     * 导入按业务现场关区分类数据
+     *
+     * @param customMStatFList 按业务现场关区分类数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    public String importCustomMStatF(List<CustomMStatF> customMStatFList, Boolean isUpdateSupport, CacpTransUser cacpTransUser);
+}

+ 171 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/statReport/service/impl/CustomMStatFServiceImpl.java

@@ -0,0 +1,171 @@
+package cn.gov.customs.wxjy.statReport.service.impl;
+
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.common.exception.ServiceException;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import cn.gov.customs.wxjy.common.utils.bean.BeanValidators;
+import cn.gov.customs.wxjy.common.utils.uuid.SnowflakeIdWorker;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.validation.Validator;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.statReport.dao.CustomMStatFMapper;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatF;
+import cn.gov.customs.wxjy.statReport.pojo.CustomMStatFQuery;
+import cn.gov.customs.wxjy.statReport.service.ICustomMStatFService;
+
+/**
+ * 按业务现场关区分类Service业务层处理
+ *
+ * @author xiong
+ * @date 2025-12-12
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class CustomMStatFServiceImpl implements ICustomMStatFService {
+
+    private final CustomMStatFMapper customMStatFMapper;
+
+    private final Validator validator;
+
+    /**
+     * 查询按业务现场关区分类
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 按业务现场关区分类
+     */
+    @Override
+    public CustomMStatF selectByID(String ID) {
+        return customMStatFMapper.selectByID(ID);
+    }
+
+    /**
+     * 分页查询按业务现场关区分类列表
+     *
+     * @param query
+     * @return 按业务现场关区分类
+     */
+    @Override
+    public PageInfo<CustomMStatF> selectPageList(CustomMStatFQuery query) {
+        return PageInfo.of(customMStatFMapper.selectList(query));
+    }
+
+    /**
+     * 查询按业务现场关区分类列表
+     *
+     * @param query
+     * @return 按业务现场关区分类
+     */
+    @Override
+    public List<CustomMStatF> selectList(CustomMStatFQuery query) {
+        return customMStatFMapper.selectList(query);
+    }
+
+    /**
+     * 新增按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    @Override
+    public int insert(CustomMStatF customMStatF) {
+            return customMStatFMapper.insert(customMStatF);
+    }
+
+    /**
+     * 修改按业务现场关区分类
+     *
+     * @param customMStatF 按业务现场关区分类
+     * @return 结果
+     */
+    @Override
+    public int update(CustomMStatF customMStatF) {
+        return customMStatFMapper.update(customMStatF);
+    }
+
+    /**
+     * 批量删除按业务现场关区分类
+     *
+     * @param ids 需要删除的按业务现场关区分类主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByIDs(String[] ids) {
+        return customMStatFMapper.deleteByIDs(ids);
+    }
+
+    /**
+     * 删除按业务现场关区分类信息
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByID(String ID) {
+        return customMStatFMapper.deleteByID(ID);
+    }
+
+    /**
+     * 逻辑删除按业务现场关区分类信息
+     *
+     * @param ID 按业务现场关区分类主键
+     * @return 结果
+     */
+    @Override
+    public int logicDelete(String ID) {
+
+        return customMStatFMapper.logicDelete(ID);
+    }
+
+    /**
+     * 导入按业务现场关区分类数据
+     *
+     * @param customMStatFList 按业务现场关区分类数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importCustomMStatF(List<CustomMStatF> customMStatFList, Boolean isUpdateSupport, CacpTransUser cacpTransUser) {
+        if (CollectionUtils.isEmpty(customMStatFList)) {
+            throw new ServiceException("导入数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (CustomMStatF customMStatF : customMStatFList) {
+            try {
+
+                BeanValidators.validateWithException(validator, customMStatF);
+                //id名称不统一,自行处理
+                customMStatF.setCreateTime(DateUtils.getNowDate());
+                customMStatF.setUpdateTime(DateUtils.getNowDate());
+                customMStatF.setCreateUser(cacpTransUser.getUserId());
+                customMStatF.setCreateDept(cacpTransUser.getParentGuid());
+
+                customMStatFMapper.insert(customMStatF);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、 " + cacpTransUser.getUserName() + " 导入成功");
+
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、" + cacpTransUser.getUserName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 458 - 0
wxjy-wxjy-service/src/main/resources/mapper/statReport/CustomMStatFMapper.xml

@@ -0,0 +1,458 @@
+<?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="cn.gov.customs.wxjy.statReport.dao.CustomMStatFMapper">
+
+    <resultMap type="CustomMStatF" id="CustomMStatFResult">
+        <result property="ID" column="ID"/>
+        <result property="MONTH" column="MONTH"/>
+        <result property="customCode" column="CUSTOM_CODE"/>
+        <result property="impDeclCount" column="IMP_DECL_COUNT"/>
+        <result property="impManDeclCount" column="IMP_MAN_DECL_COUNT"/>
+        <result property="impManualAuditDeclCount" column="IMP_MANUAL_AUDIT_DECL_COUNT"/>
+        <result property="impDeclCountLm" column="IMP_DECL_COUNT_LM"/>
+        <result property="impDeclCountLyDec" column="IMP_DECL_COUNT_LY_DEC"/>
+        <result property="impDeclCountCuryear" column="IMP_DECL_COUNT_CURYEAR"/>
+        <result property="impDeclCountYbl" column="IMP_DECL_COUNT_YBL"/>
+        <result property="impTotalCost" column="IMP_TOTAL_COST"/>
+        <result property="impTotalCostLm" column="IMP_TOTAL_COST_LM"/>
+        <result property="impTotalCostLyDec" column="IMP_TOTAL_COST_LY_DEC"/>
+        <result property="impTotalCostCy" column="IMP_TOTAL_COST_CY"/>
+        <result property="impTotalCostYbl" column="IMP_TOTAL_COST_YBL"/>
+        <result property="impCuCost" column="IMP_CU_COST"/>
+        <result property="impCuCostLm" column="IMP_CU_COST_LM"/>
+        <result property="impCuCostLyDec" column="IMP_CU_COST_LY_DEC"/>
+        <result property="impCuCostCy" column="IMP_CU_COST_CY"/>
+        <result property="impCuCostYbl" column="IMP_CU_COST_YBL"/>
+        <result property="expDeclCount" column="EXP_DECL_COUNT"/>
+        <result property="expManDeclCount" column="EXP_MAN_DECL_COUNT"/>
+        <result property="expManualAuditDeclCount" column="EXP_MANUAL_AUDIT_DECL_COUNT"/>
+        <result property="expDeclCountLm" column="EXP_DECL_COUNT_LM"/>
+        <result property="expDeclCountLyDec" column="EXP_DECL_COUNT_LY_DEC"/>
+        <result property="expDeclCountCuryear" column="EXP_DECL_COUNT_CURYEAR"/>
+        <result property="expDeclCountYbl" column="EXP_DECL_COUNT_YBL"/>
+        <result property="expTotalCost" column="EXP_TOTAL_COST"/>
+        <result property="expTotalCostLm" column="EXP_TOTAL_COST_LM"/>
+        <result property="expTotalCostLyDec" column="EXP_TOTAL_COST_LY_DEC"/>
+        <result property="expTotalCostCy" column="EXP_TOTAL_COST_CY"/>
+        <result property="expTotalCostYbl" column="EXP_TOTAL_COST_YBL"/>
+        <result property="expCuCost" column="EXP_CU_COST"/>
+        <result property="expCuCostLm" column="EXP_CU_COST_LM"/>
+        <result property="expCuCostLyDec" column="EXP_CU_COST_LY_DEC"/>
+        <result property="expCuCostCy" column="EXP_CU_COST_CY"/>
+        <result property="expCuCostYbl" column="EXP_CU_COST_YBL"/>
+    </resultMap>
+
+    <sql id="baseVo">
+        select ID, MONTH, CUSTOM_CODE, IMP_DECL_COUNT, IMP_MAN_DECL_COUNT, IMP_MANUAL_AUDIT_DECL_COUNT, IMP_DECL_COUNT_LM, IMP_DECL_COUNT_LY_DEC, IMP_DECL_COUNT_CURYEAR, IMP_DECL_COUNT_YBL, IMP_TOTAL_COST, IMP_TOTAL_COST_LM, IMP_TOTAL_COST_LY_DEC, IMP_TOTAL_COST_CY, IMP_TOTAL_COST_YBL, IMP_CU_COST, IMP_CU_COST_LM, IMP_CU_COST_LY_DEC, IMP_CU_COST_CY, IMP_CU_COST_YBL, EXP_DECL_COUNT, EXP_MAN_DECL_COUNT, EXP_MANUAL_AUDIT_DECL_COUNT, EXP_DECL_COUNT_LM, EXP_DECL_COUNT_LY_DEC, EXP_DECL_COUNT_CURYEAR, EXP_DECL_COUNT_YBL, EXP_TOTAL_COST, EXP_TOTAL_COST_LM, EXP_TOTAL_COST_LY_DEC, EXP_TOTAL_COST_CY, EXP_TOTAL_COST_YBL, EXP_CU_COST, EXP_CU_COST_LM, EXP_CU_COST_LY_DEC, EXP_CU_COST_CY, EXP_CU_COST_YBL
+        from WXJY_CUSTOM_M_STAT_F
+    </sql>
+
+    <select id="selectList" parameterType="CustomMStatFQuery" resultMap="CustomMStatFResult">
+        <include refid="baseVo"/>
+        <where>
+        <if test="MONTH != null  and MONTH != ''">
+            and MONTH = #{MONTH}
+        </if>
+        <if test="customCode != null  and customCode != ''">
+            and CUSTOM_CODE = #{customCode}
+        </if>
+        <if test="impDeclCount != null  and impDeclCount != ''">
+            and IMP_DECL_COUNT = #{impDeclCount}
+        </if>
+        <if test="impManDeclCount != null  and impManDeclCount != ''">
+            and IMP_MAN_DECL_COUNT = #{impManDeclCount}
+        </if>
+        <if test="impManualAuditDeclCount != null  and impManualAuditDeclCount != ''">
+            and IMP_MANUAL_AUDIT_DECL_COUNT = #{impManualAuditDeclCount}
+        </if>
+        <if test="impDeclCountLm != null  and impDeclCountLm != ''">
+            and IMP_DECL_COUNT_LM = #{impDeclCountLm}
+        </if>
+        <if test="impDeclCountLyDec != null  and impDeclCountLyDec != ''">
+            and IMP_DECL_COUNT_LY_DEC = #{impDeclCountLyDec}
+        </if>
+        <if test="impDeclCountCuryear != null  and impDeclCountCuryear != ''">
+            and IMP_DECL_COUNT_CURYEAR = #{impDeclCountCuryear}
+        </if>
+        <if test="impDeclCountYbl != null  and impDeclCountYbl != ''">
+            and IMP_DECL_COUNT_YBL = #{impDeclCountYbl}
+        </if>
+        <if test="impTotalCost != null  and impTotalCost != ''">
+            and IMP_TOTAL_COST = #{impTotalCost}
+        </if>
+        <if test="impTotalCostLm != null  and impTotalCostLm != ''">
+            and IMP_TOTAL_COST_LM = #{impTotalCostLm}
+        </if>
+        <if test="impTotalCostLyDec != null  and impTotalCostLyDec != ''">
+            and IMP_TOTAL_COST_LY_DEC = #{impTotalCostLyDec}
+        </if>
+        <if test="impTotalCostCy != null  and impTotalCostCy != ''">
+            and IMP_TOTAL_COST_CY = #{impTotalCostCy}
+        </if>
+        <if test="impTotalCostYbl != null  and impTotalCostYbl != ''">
+            and IMP_TOTAL_COST_YBL = #{impTotalCostYbl}
+        </if>
+        <if test="impCuCost != null  and impCuCost != ''">
+            and IMP_CU_COST = #{impCuCost}
+        </if>
+        <if test="impCuCostLm != null  and impCuCostLm != ''">
+            and IMP_CU_COST_LM = #{impCuCostLm}
+        </if>
+        <if test="impCuCostLyDec != null  and impCuCostLyDec != ''">
+            and IMP_CU_COST_LY_DEC = #{impCuCostLyDec}
+        </if>
+        <if test="impCuCostCy != null  and impCuCostCy != ''">
+            and IMP_CU_COST_CY = #{impCuCostCy}
+        </if>
+        <if test="impCuCostYbl != null  and impCuCostYbl != ''">
+            and IMP_CU_COST_YBL = #{impCuCostYbl}
+        </if>
+        <if test="expDeclCount != null  and expDeclCount != ''">
+            and EXP_DECL_COUNT = #{expDeclCount}
+        </if>
+        <if test="expManDeclCount != null  and expManDeclCount != ''">
+            and EXP_MAN_DECL_COUNT = #{expManDeclCount}
+        </if>
+        <if test="expManualAuditDeclCount != null  and expManualAuditDeclCount != ''">
+            and EXP_MANUAL_AUDIT_DECL_COUNT = #{expManualAuditDeclCount}
+        </if>
+        <if test="expDeclCountLm != null  and expDeclCountLm != ''">
+            and EXP_DECL_COUNT_LM = #{expDeclCountLm}
+        </if>
+        <if test="expDeclCountLyDec != null  and expDeclCountLyDec != ''">
+            and EXP_DECL_COUNT_LY_DEC = #{expDeclCountLyDec}
+        </if>
+        <if test="expDeclCountCuryear != null  and expDeclCountCuryear != ''">
+            and EXP_DECL_COUNT_CURYEAR = #{expDeclCountCuryear}
+        </if>
+        <if test="expDeclCountYbl != null  and expDeclCountYbl != ''">
+            and EXP_DECL_COUNT_YBL = #{expDeclCountYbl}
+        </if>
+        <if test="expTotalCost != null  and expTotalCost != ''">
+            and EXP_TOTAL_COST = #{expTotalCost}
+        </if>
+        <if test="expTotalCostLm != null  and expTotalCostLm != ''">
+            and EXP_TOTAL_COST_LM = #{expTotalCostLm}
+        </if>
+        <if test="expTotalCostLyDec != null  and expTotalCostLyDec != ''">
+            and EXP_TOTAL_COST_LY_DEC = #{expTotalCostLyDec}
+        </if>
+        <if test="expTotalCostCy != null  and expTotalCostCy != ''">
+            and EXP_TOTAL_COST_CY = #{expTotalCostCy}
+        </if>
+        <if test="expTotalCostYbl != null  and expTotalCostYbl != ''">
+            and EXP_TOTAL_COST_YBL = #{expTotalCostYbl}
+        </if>
+        <if test="expCuCost != null  and expCuCost != ''">
+            and EXP_CU_COST = #{expCuCost}
+        </if>
+        <if test="expCuCostLm != null  and expCuCostLm != ''">
+            and EXP_CU_COST_LM = #{expCuCostLm}
+        </if>
+        <if test="expCuCostLyDec != null  and expCuCostLyDec != ''">
+            and EXP_CU_COST_LY_DEC = #{expCuCostLyDec}
+        </if>
+        <if test="expCuCostCy != null  and expCuCostCy != ''">
+            and EXP_CU_COST_CY = #{expCuCostCy}
+        </if>
+        <if test="expCuCostYbl != null  and expCuCostYbl != ''">
+            and EXP_CU_COST_YBL = #{expCuCostYbl}
+        </if>
+        </where>
+    </select>
+
+    <select id="selectByID" parameterType="String"
+        resultMap="CustomMStatFResult">
+        <include refid="baseVo"/>
+        where ID = #{ID}
+    </select>
+
+    <insert id="insert" parameterType="CustomMStatF">
+        insert into WXJY_CUSTOM_M_STAT_F
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="ID != null and ID != ''">ID,
+            </if>
+            <if test="MONTH != null">MONTH,
+            </if>
+            <if test="customCode != null">CUSTOM_CODE,
+            </if>
+            <if test="impDeclCount != null">IMP_DECL_COUNT,
+            </if>
+            <if test="impManDeclCount != null">IMP_MAN_DECL_COUNT,
+            </if>
+            <if test="impManualAuditDeclCount != null">IMP_MANUAL_AUDIT_DECL_COUNT,
+            </if>
+            <if test="impDeclCountLm != null">IMP_DECL_COUNT_LM,
+            </if>
+            <if test="impDeclCountLyDec != null">IMP_DECL_COUNT_LY_DEC,
+            </if>
+            <if test="impDeclCountCuryear != null">IMP_DECL_COUNT_CURYEAR,
+            </if>
+            <if test="impDeclCountYbl != null">IMP_DECL_COUNT_YBL,
+            </if>
+            <if test="impTotalCost != null">IMP_TOTAL_COST,
+            </if>
+            <if test="impTotalCostLm != null">IMP_TOTAL_COST_LM,
+            </if>
+            <if test="impTotalCostLyDec != null">IMP_TOTAL_COST_LY_DEC,
+            </if>
+            <if test="impTotalCostCy != null">IMP_TOTAL_COST_CY,
+            </if>
+            <if test="impTotalCostYbl != null">IMP_TOTAL_COST_YBL,
+            </if>
+            <if test="impCuCost != null">IMP_CU_COST,
+            </if>
+            <if test="impCuCostLm != null">IMP_CU_COST_LM,
+            </if>
+            <if test="impCuCostLyDec != null">IMP_CU_COST_LY_DEC,
+            </if>
+            <if test="impCuCostCy != null">IMP_CU_COST_CY,
+            </if>
+            <if test="impCuCostYbl != null">IMP_CU_COST_YBL,
+            </if>
+            <if test="expDeclCount != null">EXP_DECL_COUNT,
+            </if>
+            <if test="expManDeclCount != null">EXP_MAN_DECL_COUNT,
+            </if>
+            <if test="expManualAuditDeclCount != null">EXP_MANUAL_AUDIT_DECL_COUNT,
+            </if>
+            <if test="expDeclCountLm != null">EXP_DECL_COUNT_LM,
+            </if>
+            <if test="expDeclCountLyDec != null">EXP_DECL_COUNT_LY_DEC,
+            </if>
+            <if test="expDeclCountCuryear != null">EXP_DECL_COUNT_CURYEAR,
+            </if>
+            <if test="expDeclCountYbl != null">EXP_DECL_COUNT_YBL,
+            </if>
+            <if test="expTotalCost != null">EXP_TOTAL_COST,
+            </if>
+            <if test="expTotalCostLm != null">EXP_TOTAL_COST_LM,
+            </if>
+            <if test="expTotalCostLyDec != null">EXP_TOTAL_COST_LY_DEC,
+            </if>
+            <if test="expTotalCostCy != null">EXP_TOTAL_COST_CY,
+            </if>
+            <if test="expTotalCostYbl != null">EXP_TOTAL_COST_YBL,
+            </if>
+            <if test="expCuCost != null">EXP_CU_COST,
+            </if>
+            <if test="expCuCostLm != null">EXP_CU_COST_LM,
+            </if>
+            <if test="expCuCostLyDec != null">EXP_CU_COST_LY_DEC,
+            </if>
+            <if test="expCuCostCy != null">EXP_CU_COST_CY,
+            </if>
+            <if test="expCuCostYbl != null">EXP_CU_COST_YBL,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="ID != null and ID != ''">#{ID},
+            </if>
+            <if test="MONTH != null">#{MONTH},
+            </if>
+            <if test="customCode != null">#{customCode},
+            </if>
+            <if test="impDeclCount != null">#{impDeclCount},
+            </if>
+            <if test="impManDeclCount != null">#{impManDeclCount},
+            </if>
+            <if test="impManualAuditDeclCount != null">#{impManualAuditDeclCount},
+            </if>
+            <if test="impDeclCountLm != null">#{impDeclCountLm},
+            </if>
+            <if test="impDeclCountLyDec != null">#{impDeclCountLyDec},
+            </if>
+            <if test="impDeclCountCuryear != null">#{impDeclCountCuryear},
+            </if>
+            <if test="impDeclCountYbl != null">#{impDeclCountYbl},
+            </if>
+            <if test="impTotalCost != null">#{impTotalCost},
+            </if>
+            <if test="impTotalCostLm != null">#{impTotalCostLm},
+            </if>
+            <if test="impTotalCostLyDec != null">#{impTotalCostLyDec},
+            </if>
+            <if test="impTotalCostCy != null">#{impTotalCostCy},
+            </if>
+            <if test="impTotalCostYbl != null">#{impTotalCostYbl},
+            </if>
+            <if test="impCuCost != null">#{impCuCost},
+            </if>
+            <if test="impCuCostLm != null">#{impCuCostLm},
+            </if>
+            <if test="impCuCostLyDec != null">#{impCuCostLyDec},
+            </if>
+            <if test="impCuCostCy != null">#{impCuCostCy},
+            </if>
+            <if test="impCuCostYbl != null">#{impCuCostYbl},
+            </if>
+            <if test="expDeclCount != null">#{expDeclCount},
+            </if>
+            <if test="expManDeclCount != null">#{expManDeclCount},
+            </if>
+            <if test="expManualAuditDeclCount != null">#{expManualAuditDeclCount},
+            </if>
+            <if test="expDeclCountLm != null">#{expDeclCountLm},
+            </if>
+            <if test="expDeclCountLyDec != null">#{expDeclCountLyDec},
+            </if>
+            <if test="expDeclCountCuryear != null">#{expDeclCountCuryear},
+            </if>
+            <if test="expDeclCountYbl != null">#{expDeclCountYbl},
+            </if>
+            <if test="expTotalCost != null">#{expTotalCost},
+            </if>
+            <if test="expTotalCostLm != null">#{expTotalCostLm},
+            </if>
+            <if test="expTotalCostLyDec != null">#{expTotalCostLyDec},
+            </if>
+            <if test="expTotalCostCy != null">#{expTotalCostCy},
+            </if>
+            <if test="expTotalCostYbl != null">#{expTotalCostYbl},
+            </if>
+            <if test="expCuCost != null">#{expCuCost},
+            </if>
+            <if test="expCuCostLm != null">#{expCuCostLm},
+            </if>
+            <if test="expCuCostLyDec != null">#{expCuCostLyDec},
+            </if>
+            <if test="expCuCostCy != null">#{expCuCostCy},
+            </if>
+            <if test="expCuCostYbl != null">#{expCuCostYbl},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="CustomMStatF">
+        update WXJY_CUSTOM_M_STAT_F
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="MONTH != null">MONTH =
+                #{MONTH},
+            </if>
+            <if test="customCode != null">CUSTOM_CODE =
+                #{customCode},
+            </if>
+            <if test="impDeclCount != null">IMP_DECL_COUNT =
+                #{impDeclCount},
+            </if>
+            <if test="impManDeclCount != null">IMP_MAN_DECL_COUNT =
+                #{impManDeclCount},
+            </if>
+            <if test="impManualAuditDeclCount != null">IMP_MANUAL_AUDIT_DECL_COUNT =
+                #{impManualAuditDeclCount},
+            </if>
+            <if test="impDeclCountLm != null">IMP_DECL_COUNT_LM =
+                #{impDeclCountLm},
+            </if>
+            <if test="impDeclCountLyDec != null">IMP_DECL_COUNT_LY_DEC =
+                #{impDeclCountLyDec},
+            </if>
+            <if test="impDeclCountCuryear != null">IMP_DECL_COUNT_CURYEAR =
+                #{impDeclCountCuryear},
+            </if>
+            <if test="impDeclCountYbl != null">IMP_DECL_COUNT_YBL =
+                #{impDeclCountYbl},
+            </if>
+            <if test="impTotalCost != null">IMP_TOTAL_COST =
+                #{impTotalCost},
+            </if>
+            <if test="impTotalCostLm != null">IMP_TOTAL_COST_LM =
+                #{impTotalCostLm},
+            </if>
+            <if test="impTotalCostLyDec != null">IMP_TOTAL_COST_LY_DEC =
+                #{impTotalCostLyDec},
+            </if>
+            <if test="impTotalCostCy != null">IMP_TOTAL_COST_CY =
+                #{impTotalCostCy},
+            </if>
+            <if test="impTotalCostYbl != null">IMP_TOTAL_COST_YBL =
+                #{impTotalCostYbl},
+            </if>
+            <if test="impCuCost != null">IMP_CU_COST =
+                #{impCuCost},
+            </if>
+            <if test="impCuCostLm != null">IMP_CU_COST_LM =
+                #{impCuCostLm},
+            </if>
+            <if test="impCuCostLyDec != null">IMP_CU_COST_LY_DEC =
+                #{impCuCostLyDec},
+            </if>
+            <if test="impCuCostCy != null">IMP_CU_COST_CY =
+                #{impCuCostCy},
+            </if>
+            <if test="impCuCostYbl != null">IMP_CU_COST_YBL =
+                #{impCuCostYbl},
+            </if>
+            <if test="expDeclCount != null">EXP_DECL_COUNT =
+                #{expDeclCount},
+            </if>
+            <if test="expManDeclCount != null">EXP_MAN_DECL_COUNT =
+                #{expManDeclCount},
+            </if>
+            <if test="expManualAuditDeclCount != null">EXP_MANUAL_AUDIT_DECL_COUNT =
+                #{expManualAuditDeclCount},
+            </if>
+            <if test="expDeclCountLm != null">EXP_DECL_COUNT_LM =
+                #{expDeclCountLm},
+            </if>
+            <if test="expDeclCountLyDec != null">EXP_DECL_COUNT_LY_DEC =
+                #{expDeclCountLyDec},
+            </if>
+            <if test="expDeclCountCuryear != null">EXP_DECL_COUNT_CURYEAR =
+                #{expDeclCountCuryear},
+            </if>
+            <if test="expDeclCountYbl != null">EXP_DECL_COUNT_YBL =
+                #{expDeclCountYbl},
+            </if>
+            <if test="expTotalCost != null">EXP_TOTAL_COST =
+                #{expTotalCost},
+            </if>
+            <if test="expTotalCostLm != null">EXP_TOTAL_COST_LM =
+                #{expTotalCostLm},
+            </if>
+            <if test="expTotalCostLyDec != null">EXP_TOTAL_COST_LY_DEC =
+                #{expTotalCostLyDec},
+            </if>
+            <if test="expTotalCostCy != null">EXP_TOTAL_COST_CY =
+                #{expTotalCostCy},
+            </if>
+            <if test="expTotalCostYbl != null">EXP_TOTAL_COST_YBL =
+                #{expTotalCostYbl},
+            </if>
+            <if test="expCuCost != null">EXP_CU_COST =
+                #{expCuCost},
+            </if>
+            <if test="expCuCostLm != null">EXP_CU_COST_LM =
+                #{expCuCostLm},
+            </if>
+            <if test="expCuCostLyDec != null">EXP_CU_COST_LY_DEC =
+                #{expCuCostLyDec},
+            </if>
+            <if test="expCuCostCy != null">EXP_CU_COST_CY =
+                #{expCuCostCy},
+            </if>
+            <if test="expCuCostYbl != null">EXP_CU_COST_YBL =
+                #{expCuCostYbl},
+            </if>
+        </trim>
+        where ID = #{ID}
+    </update>
+
+    <delete id="deleteByID" parameterType="String">
+        delete
+        from WXJY_CUSTOM_M_STAT_F where ID = #{ID}
+    </delete>
+
+    <delete id="deleteByIDs" parameterType="String">
+        delete from WXJY_CUSTOM_M_STAT_F where ID in
+        <foreach item="ID" collection="array" open="(" separator="," close=")">
+            #{ID}
+        </foreach>
+    </delete>
+
+    <delete id="logicDelete" parameterType="String">
+        update  WXJY_CUSTOM_M_STAT_F set is_del = 1  where ID = #{ID}
+    </delete>
+</mapper>

+ 15 - 0
wxjy-wxjy-web/src/App.vue

@@ -33,6 +33,21 @@
           </router-link>
         </el-sub-menu>
 
+        <el-sub-menu index="statReport">  <!-- index 为父菜单唯一标识(非路由路径) -->
+          <template #title>
+            <el-icon><Setting /></el-icon>  <!-- 父菜单图标 -->
+            <span>统计报表</span>  <!-- 父菜单名称 -->
+          </template>
+          <router-link to="/statReport-customMstatF">
+            <el-menu-item index="CustomMStatF" class="menu-item">
+              <el-icon>
+                <ScaleToOriginal />
+              </el-icon>
+              <span>申报地海关报表</span>
+            </el-menu-item>
+          </router-link>
+        </el-sub-menu>
+
         <router-link to="/user-info">
           <el-menu-item index="UserInfo">
             <el-icon><User /></el-icon>

+ 41 - 0
wxjy-wxjy-web/src/apis/statReport/CustomMStatF.ts

@@ -0,0 +1,41 @@
+import type { AxiosResponse } from 'axios'
+import type { PageInfo, Result } from '@cacp/ui'
+import request from '@/utils/request'
+
+import type {CustomMStatF,CustomMStatFQuery}  from '@/types/statReport/CustomMStatF'
+
+const contextPath = '/statReport/CustomMStatF'
+
+// 查询按业务现场关区分类列表
+export async function getList(query: CustomMStatFQuery): Promise<Result<PageInfo<CustomMStatF>>> {
+  const res: AxiosResponse<Result<PageInfo<CustomMStatF>>> = await request.post(`${contextPath}/get-list`, query)
+  return res.data
+}
+
+// 获取采购入库单详情
+export async function getDetail(ID: string): Promise<Result<CustomMStatF>> {
+  const res: AxiosResponse<Result<CustomMStatF>> = await request.get(`${contextPath}/get-detail?ID=${ID}`)
+  return res.data
+}
+
+// 新增采购入库单
+export async function insert(row: CustomMStatF): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/insert-customMStatF`, row)
+  return res.data
+}
+
+// 更新采购入库单
+export async function update(row: CustomMStatF): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/update-customMStatF`, row)
+  return res.data
+}
+
+// 删除采购入库单
+export async function remove(customMStatFs: string | string[]): Promise<Result<number>> {
+  // 统一转换为数组格式
+  const ids = Array.isArray(customMStatFs) ? customMStatFs : [customMStatFs];
+  const res: AxiosResponse<Result<number>> = await request.post(
+          `${contextPath}/delete-customMStatF?ids`,ids
+  )
+  return res.data
+}

+ 9 - 0
wxjy-wxjy-web/src/router/app-router.ts

@@ -61,6 +61,15 @@ const routers: Array<RouteRecordRaw> = [
       permissions:"ANALYZE_NEWDECLAREDGOODS_VIEW_BT"
     }
   },
+  {
+    path: '/statReport-customMstatF',
+    name: 'CustomMstatF',
+    component: () => import('@/views/statReport/CustomMStatF.vue'),
+    meta: {
+      title: '申报地海关报表',
+      permissions:"STAT_REPORT_CUSTOMMSTATF_VIEW_BT"
+    }
+  },
 ]
 
 export default routers

+ 84 - 0
wxjy-wxjy-web/src/types/statReport/CustomMStatF.ts

@@ -0,0 +1,84 @@
+// 按业务现场关区分类
+export interface CustomMStatF {
+                    ID?: string
+                    MONTH?: string
+                    customCode?: string
+                    impDeclCount?: string
+                    impManDeclCount?: string
+                    impManualAuditDeclCount?: string
+                    impDeclCountLm?: string
+                    impDeclCountLyDec?: string
+                    impDeclCountCuryear?: string
+                    impDeclCountYbl?: string
+                    impTotalCost?: string
+                    impTotalCostLm?: string
+                    impTotalCostLyDec?: string
+                    impTotalCostCy?: string
+                    impTotalCostYbl?: string
+                    impCuCost?: string
+                    impCuCostLm?: string
+                    impCuCostLyDec?: string
+                    impCuCostCy?: string
+                    impCuCostYbl?: string
+                    expDeclCount?: string
+                    expManDeclCount?: string
+                    expManualAuditDeclCount?: string
+                    expDeclCountLm?: string
+                    expDeclCountLyDec?: string
+                    expDeclCountCuryear?: string
+                    expDeclCountYbl?: string
+                    expTotalCost?: string
+                    expTotalCostLm?: string
+                    expTotalCostLyDec?: string
+                    expTotalCostCy?: string
+                    expTotalCostYbl?: string
+                    expCuCost?: string
+                    expCuCostLm?: string
+                    expCuCostLyDec?: string
+                    expCuCostCy?: string
+                    expCuCostYbl?: string
+}
+
+// 按业务现场关区分类查询参数
+export interface CustomMStatFQuery {
+                    MONTH?: string
+                    customCode?: string
+                    impDeclCount?: string
+                    impManDeclCount?: string
+                    impManualAuditDeclCount?: string
+                    impDeclCountLm?: string
+                    impDeclCountLyDec?: string
+                    impDeclCountCuryear?: string
+                    impDeclCountYbl?: string
+                    impTotalCost?: string
+                    impTotalCostLm?: string
+                    impTotalCostLyDec?: string
+                    impTotalCostCy?: string
+                    impTotalCostYbl?: string
+                    impCuCost?: string
+                    impCuCostLm?: string
+                    impCuCostLyDec?: string
+                    impCuCostCy?: string
+                    impCuCostYbl?: string
+                    expDeclCount?: string
+                    expManDeclCount?: string
+                    expManualAuditDeclCount?: string
+                    expDeclCountLm?: string
+                    expDeclCountLyDec?: string
+                    expDeclCountCuryear?: string
+                    expDeclCountYbl?: string
+                    expTotalCost?: string
+                    expTotalCostLm?: string
+                    expTotalCostLyDec?: string
+                    expTotalCostCy?: string
+                    expTotalCostYbl?: string
+                    expCuCost?: string
+                    expCuCostLm?: string
+                    expCuCostLyDec?: string
+                    expCuCostCy?: string
+                    expCuCostYbl?: string
+    beginDate?: string
+    endDate?: string
+    pageIndex?: number
+    pageSize?: number
+}

+ 894 - 0
wxjy-wxjy-web/src/views/statReport/CustomMStatF.vue

@@ -0,0 +1,894 @@
+<template>
+  <cacp-search-layout>
+    <template #search>
+      <cacp-search-panel-layout
+          :model="state.queryData"
+          ref="queryFormRef"
+          label-position="left"
+          label-width="auto"
+          :gutter="30"
+          :colSpan="6"
+      >
+        <template #buttonGroup>
+          <el-button type="primary" @click="onSearch">查询</el-button>
+          <el-button type="info" @click="onReset">重置</el-button>
+        </template>
+      </cacp-search-panel-layout>
+    </template>
+
+    <cacp-complex-table
+        :actions="actions"
+        :data="tableData"
+        :pagination="tablePagination"
+        :actionsWidth="120"
+        @selection-change="handleSelectionChange"
+        @on-page-change="onPageChange"
+        @on-size-change="onSizeChange"
+        :loading="loading"
+    >
+      <el-table-column type="selection" width="36" fixed="left" />
+              <el-table-column property="ID" label="主键" width="100" :show-overflow-tooltip="true" />
+              <el-table-column property="MONTH" label="月度" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="customCode" label="业务现场关区代码" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impDeclCount" label="进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impManDeclCount" label="进口查验单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impManualAuditDeclCount" label="进口接单" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impDeclCountLm" label="上个月进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impDeclCountLyDec" label="去年12月进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impDeclCountCuryear" label="今年截止当月总进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impDeclCountYbl" label="前年总进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impTotalCost" label="进口平均整体通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impTotalCostLm" label="进口平均整体通关时间-上月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impTotalCostLyDec" label="进口平均整体通关时间-去年12月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impTotalCostCy" label="进口平均整体通关时间-1至当月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impTotalCostYbl" label="进口平均整体通关时间-前年" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impCuCost" label="进口平均海关通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impCuCostLm" label="进口平均海关通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impCuCostLyDec" label="进口平均海关通关时间-去年12月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impCuCostCy" label="进口平均海关通关时间-1至当月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="impCuCostYbl" label="进口平均海关通关时间-前年" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expDeclCount" label="出口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expManDeclCount" label="出口查验单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expManualAuditDeclCount" label="出口接单" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expDeclCountLm" label="上个月出口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expDeclCountLyDec" label="去年12月进口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expDeclCountCuryear" label="今年截止当月总出口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expDeclCountYbl" label="前年总出口单数" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expTotalCost" label="出口平均整体通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expTotalCostLm" label="出口平均整体通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expTotalCostLyDec" label="出口平均整体通关时间-去年12月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expTotalCostCy" label="出口平均整体通关时间-1至当月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expTotalCostYbl" label="出口平均整体通关时间-前年" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expCuCost" label="出口平均海关通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expCuCostLm" label="出口平均海关通关时间" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expCuCostLyDec" label="出口平均海关通关时间-去年12月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expCuCostCy" label="出口平均海关通关时间-1至当月" width="120" :show-overflow-tooltip="true" />
+              <el-table-column property="expCuCostYbl" label="出口平均海关通关时间-前年" width="120" :show-overflow-tooltip="true" />
+    </cacp-complex-table>
+  </cacp-search-layout>
+
+  <!--新增、编辑弹框-->
+  <cacp-dialog
+      v-model="state.dialogVisible"
+      :resizable="false"
+      :title="state.title"
+      width="60%"
+      @closed="onDialogClosed"
+  >
+    <el-form
+        :model="state.formData"
+        ref="dialogFormRef"
+        :rules="infoRules"
+        label-width="auto"
+        label-position="left"
+        :disabled="!state.isEdit"
+    >
+    <el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="月度" prop="MONTH">
+                    <el-input v-model="state.formData.MONTH" placeholder="请输入月度" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="业务现场关区代码" prop="customCode">
+                    <el-input v-model="state.formData.customCode" placeholder="请输入业务现场关区代码" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口单数" prop="impDeclCount">
+                    <el-input v-model="state.formData.impDeclCount" placeholder="请输入进口单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口查验单数" prop="impManDeclCount">
+                    <el-input v-model="state.formData.impManDeclCount" placeholder="请输入进口查验单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口接单" prop="impManualAuditDeclCount">
+                    <el-input v-model="state.formData.impManualAuditDeclCount" placeholder="请输入进口接单" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="上个月进口单数" prop="impDeclCountLm">
+                    <el-input v-model="state.formData.impDeclCountLm" placeholder="请输入上个月进口单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="去年12月进口单数" prop="impDeclCountLyDec">
+                    <el-input v-model="state.formData.impDeclCountLyDec" placeholder="请输入去年12月进口单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="今年截止当月总进口单数" prop="impDeclCountCuryear">
+                    <el-input v-model="state.formData.impDeclCountCuryear" placeholder="请输入今年截止当月总进口单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="前年总进口单数" prop="impDeclCountYbl">
+                    <el-input v-model="state.formData.impDeclCountYbl" placeholder="请输入前年总进口单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口平均整体通关时间" prop="impTotalCost">
+                    <el-input v-model="state.formData.impTotalCost" placeholder="请输入进口平均整体通关时间" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口平均整体通关时间-上月" prop="impTotalCostLm">
+                    <el-input v-model="state.formData.impTotalCostLm" placeholder="请输入进口平均整体通关时间-上月" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口平均整体通关时间-去年12月" prop="impTotalCostLyDec">
+                    <el-input v-model="state.formData.impTotalCostLyDec" placeholder="请输入进口平均整体通关时间-去年12月" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口平均整体通关时间-1至当月" prop="impTotalCostCy">
+                    <el-input v-model="state.formData.impTotalCostCy" placeholder="请输入进口平均整体通关时间-1至当月" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口平均整体通关时间-前年" prop="impTotalCostYbl">
+                    <el-input v-model="state.formData.impTotalCostYbl" placeholder="请输入进口平均整体通关时间-前年" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口平均海关通关时间" prop="impCuCost">
+                    <el-input v-model="state.formData.impCuCost" placeholder="请输入进口平均海关通关时间" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口平均海关通关时间" prop="impCuCostLm">
+                    <el-input v-model="state.formData.impCuCostLm" placeholder="请输入进口平均海关通关时间" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口平均海关通关时间-去年12月" prop="impCuCostLyDec">
+                    <el-input v-model="state.formData.impCuCostLyDec" placeholder="请输入进口平均海关通关时间-去年12月" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="进口平均海关通关时间-1至当月" prop="impCuCostCy">
+                    <el-input v-model="state.formData.impCuCostCy" placeholder="请输入进口平均海关通关时间-1至当月" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="进口平均海关通关时间-前年" prop="impCuCostYbl">
+                    <el-input v-model="state.formData.impCuCostYbl" placeholder="请输入进口平均海关通关时间-前年" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口单数" prop="expDeclCount">
+                    <el-input v-model="state.formData.expDeclCount" placeholder="请输入出口单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口查验单数" prop="expManDeclCount">
+                    <el-input v-model="state.formData.expManDeclCount" placeholder="请输入出口查验单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口接单" prop="expManualAuditDeclCount">
+                    <el-input v-model="state.formData.expManualAuditDeclCount" placeholder="请输入出口接单" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="上个月出口单数" prop="expDeclCountLm">
+                    <el-input v-model="state.formData.expDeclCountLm" placeholder="请输入上个月出口单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="去年12月进口单数" prop="expDeclCountLyDec">
+                    <el-input v-model="state.formData.expDeclCountLyDec" placeholder="请输入去年12月进口单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="今年截止当月总出口单数" prop="expDeclCountCuryear">
+                    <el-input v-model="state.formData.expDeclCountCuryear" placeholder="请输入今年截止当月总出口单数" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="前年总出口单数" prop="expDeclCountYbl">
+                    <el-input v-model="state.formData.expDeclCountYbl" placeholder="请输入前年总出口单数" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口平均整体通关时间" prop="expTotalCost">
+                    <el-input v-model="state.formData.expTotalCost" placeholder="请输入出口平均整体通关时间" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口平均整体通关时间" prop="expTotalCostLm">
+                    <el-input v-model="state.formData.expTotalCostLm" placeholder="请输入出口平均整体通关时间" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口平均整体通关时间-去年12月" prop="expTotalCostLyDec">
+                    <el-input v-model="state.formData.expTotalCostLyDec" placeholder="请输入出口平均整体通关时间-去年12月" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口平均整体通关时间-1至当月" prop="expTotalCostCy">
+                    <el-input v-model="state.formData.expTotalCostCy" placeholder="请输入出口平均整体通关时间-1至当月" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口平均整体通关时间-前年" prop="expTotalCostYbl">
+                    <el-input v-model="state.formData.expTotalCostYbl" placeholder="请输入出口平均整体通关时间-前年" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口平均海关通关时间" prop="expCuCost">
+                    <el-input v-model="state.formData.expCuCost" placeholder="请输入出口平均海关通关时间" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口平均海关通关时间" prop="expCuCostLm">
+                    <el-input v-model="state.formData.expCuCostLm" placeholder="请输入出口平均海关通关时间" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口平均海关通关时间-去年12月" prop="expCuCostLyDec">
+                    <el-input v-model="state.formData.expCuCostLyDec" placeholder="请输入出口平均海关通关时间-去年12月" />
+                  </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+                  <el-form-item label="出口平均海关通关时间-1至当月" prop="expCuCostCy">
+                    <el-input v-model="state.formData.expCuCostCy" placeholder="请输入出口平均海关通关时间-1至当月" />
+                  </el-form-item>
+            </el-col>
+                <el-col :span="12">
+                  <el-form-item label="出口平均海关通关时间-前年" prop="expCuCostYbl">
+                    <el-input v-model="state.formData.expCuCostYbl" placeholder="请输入出口平均海关通关时间-前年" />
+                  </el-form-item>
+            </el-col>
+    </el-row>
+
+    </el-form>
+    <template #footer v-if="state.isEdit">
+      <el-button @click="onDialogClosed">取消</el-button>
+      <el-button type="primary" @click="onSubmit">确定</el-button>
+    </template>
+  </cacp-dialog>
+
+  <!--查看弹框-->
+  <cacp-dialog
+      v-model="state.viewDialogVisible"
+      :resizable="false"
+      :title="state.viewTitle"
+      width="50%"
+  >
+    <el-form
+        :model="state.viewForm"
+        label-width="auto"
+        label-position="left"
+        :disabled="true"
+    >
+    <el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="月度:" prop="MONTH">
+                <span>{{ state.viewForm.MONTH || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="业务现场关区代码:" prop="customCode">
+                <span>{{ state.viewForm.customCode || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口单数:" prop="impDeclCount">
+                <span>{{ state.viewForm.impDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口查验单数:" prop="impManDeclCount">
+                <span>{{ state.viewForm.impManDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口接单:" prop="impManualAuditDeclCount">
+                <span>{{ state.viewForm.impManualAuditDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="上个月进口单数:" prop="impDeclCountLm">
+                <span>{{ state.viewForm.impDeclCountLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="去年12月进口单数:" prop="impDeclCountLyDec">
+                <span>{{ state.viewForm.impDeclCountLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="今年截止当月总进口单数:" prop="impDeclCountCuryear">
+                <span>{{ state.viewForm.impDeclCountCuryear || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="前年总进口单数:" prop="impDeclCountYbl">
+                <span>{{ state.viewForm.impDeclCountYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口平均整体通关时间:" prop="impTotalCost">
+                <span>{{ state.viewForm.impTotalCost || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口平均整体通关时间-上月:" prop="impTotalCostLm">
+                <span>{{ state.viewForm.impTotalCostLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口平均整体通关时间-去年12月:" prop="impTotalCostLyDec">
+                <span>{{ state.viewForm.impTotalCostLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口平均整体通关时间-1至当月:" prop="impTotalCostCy">
+                <span>{{ state.viewForm.impTotalCostCy || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口平均整体通关时间-前年:" prop="impTotalCostYbl">
+                <span>{{ state.viewForm.impTotalCostYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口平均海关通关时间:" prop="impCuCost">
+                <span>{{ state.viewForm.impCuCost || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口平均海关通关时间:" prop="impCuCostLm">
+                <span>{{ state.viewForm.impCuCostLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口平均海关通关时间-去年12月:" prop="impCuCostLyDec">
+                <span>{{ state.viewForm.impCuCostLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="进口平均海关通关时间-1至当月:" prop="impCuCostCy">
+                <span>{{ state.viewForm.impCuCostCy || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="进口平均海关通关时间-前年:" prop="impCuCostYbl">
+                <span>{{ state.viewForm.impCuCostYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口单数:" prop="expDeclCount">
+                <span>{{ state.viewForm.expDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口查验单数:" prop="expManDeclCount">
+                <span>{{ state.viewForm.expManDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口接单:" prop="expManualAuditDeclCount">
+                <span>{{ state.viewForm.expManualAuditDeclCount || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="上个月出口单数:" prop="expDeclCountLm">
+                <span>{{ state.viewForm.expDeclCountLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="去年12月进口单数:" prop="expDeclCountLyDec">
+                <span>{{ state.viewForm.expDeclCountLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="今年截止当月总出口单数:" prop="expDeclCountCuryear">
+                <span>{{ state.viewForm.expDeclCountCuryear || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="前年总出口单数:" prop="expDeclCountYbl">
+                <span>{{ state.viewForm.expDeclCountYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口平均整体通关时间:" prop="expTotalCost">
+                <span>{{ state.viewForm.expTotalCost || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口平均整体通关时间:" prop="expTotalCostLm">
+                <span>{{ state.viewForm.expTotalCostLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口平均整体通关时间-去年12月:" prop="expTotalCostLyDec">
+                <span>{{ state.viewForm.expTotalCostLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口平均整体通关时间-1至当月:" prop="expTotalCostCy">
+                <span>{{ state.viewForm.expTotalCostCy || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口平均整体通关时间-前年:" prop="expTotalCostYbl">
+                <span>{{ state.viewForm.expTotalCostYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口平均海关通关时间:" prop="expCuCost">
+                <span>{{ state.viewForm.expCuCost || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口平均海关通关时间:" prop="expCuCostLm">
+                <span>{{ state.viewForm.expCuCostLm || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口平均海关通关时间-去年12月:" prop="expCuCostLyDec">
+                <span>{{ state.viewForm.expCuCostLyDec || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                </el-row><el-row :gutter="20">
+                <el-col :span="12">
+              <el-form-item label="出口平均海关通关时间-1至当月:" prop="expCuCostCy">
+                <span>{{ state.viewForm.expCuCostCy || '-' }}</span>
+              </el-form-item>
+            </el-col>
+                <el-col :span="12">
+              <el-form-item label="出口平均海关通关时间-前年:" prop="expCuCostYbl">
+                <span>{{ state.viewForm.expCuCostYbl || '-' }}</span>
+              </el-form-item>
+            </el-col>
+    </el-row>
+    </el-form>
+  </cacp-dialog>
+</template>
+
+<script lang="ts" setup>
+  import { onMounted, reactive, ref } from 'vue'
+  import type { FormInstance } from 'element-plus'
+  import { ElMessage, ElMessageBox, type FormRules } from 'element-plus'
+  import config from '@/config'
+  import {
+    SuccessResultCode,
+    useComplexTable,
+    type Result,
+    type SearchPanelLayoutInstance,
+    type TableAction,
+    useLoading
+  } from '@cacp/ui'
+  import type { CustomMStatF, CustomMStatFQuery } from '@/types/statReport/CustomMStatF'
+  import { insert, getList, getDetail, remove, update } from '@/apis/statReport/CustomMStatF'
+  import { permissionStatus } from '@/utils/globalPermission'
+
+  // 表单引用
+  const queryFormRef = ref<SearchPanelLayoutInstance>()
+  const dialogFormRef = ref<FormInstance>()
+
+  // 加载状态
+  const { loading, setLoading } = useLoading()
+
+  // 表格 Hook
+  const tableHooks = useComplexTable<CustomMStatF>(config)
+  const { tableData, tablePagination, setPagination, setPageIndex, setPageSizes } = tableHooks
+
+  // 响应式数据
+  interface State {
+    queryData: CustomMStatFQuery
+    formData: CustomMStatF
+    viewForm: CustomMStatF
+    viewTitle: string
+    viewDialogVisible: boolean
+    title: string
+    isEdit: boolean
+    dialogVisible: boolean
+  }
+
+  const state = reactive<State>({
+    queryData: {
+                MONTH: '',
+                customCode: '',
+                impDeclCount: '',
+                impManDeclCount: '',
+                impManualAuditDeclCount: '',
+                impDeclCountLm: '',
+                impDeclCountLyDec: '',
+                impDeclCountCuryear: '',
+                impDeclCountYbl: '',
+                impTotalCost: '',
+                impTotalCostLm: '',
+                impTotalCostLyDec: '',
+                impTotalCostCy: '',
+                impTotalCostYbl: '',
+                impCuCost: '',
+                impCuCostLm: '',
+                impCuCostLyDec: '',
+                impCuCostCy: '',
+                impCuCostYbl: '',
+                expDeclCount: '',
+                expManDeclCount: '',
+                expManualAuditDeclCount: '',
+                expDeclCountLm: '',
+                expDeclCountLyDec: '',
+                expDeclCountCuryear: '',
+                expDeclCountYbl: '',
+                expTotalCost: '',
+                expTotalCostLm: '',
+                expTotalCostLyDec: '',
+                expTotalCostCy: '',
+                expTotalCostYbl: '',
+                expCuCost: '',
+                expCuCostLm: '',
+                expCuCostLyDec: '',
+                expCuCostCy: '',
+                expCuCostYbl: '',
+      pageIndex: tablePagination.currentPage,
+      pageSize: tablePagination.pageSize
+    },
+    formData: {
+            ID: '',
+            MONTH: '',
+            customCode: '',
+            impDeclCount: '',
+            impManDeclCount: '',
+            impManualAuditDeclCount: '',
+            impDeclCountLm: '',
+            impDeclCountLyDec: '',
+            impDeclCountCuryear: '',
+            impDeclCountYbl: '',
+            impTotalCost: '',
+            impTotalCostLm: '',
+            impTotalCostLyDec: '',
+            impTotalCostCy: '',
+            impTotalCostYbl: '',
+            impCuCost: '',
+            impCuCostLm: '',
+            impCuCostLyDec: '',
+            impCuCostCy: '',
+            impCuCostYbl: '',
+            expDeclCount: '',
+            expManDeclCount: '',
+            expManualAuditDeclCount: '',
+            expDeclCountLm: '',
+            expDeclCountLyDec: '',
+            expDeclCountCuryear: '',
+            expDeclCountYbl: '',
+            expTotalCost: '',
+            expTotalCostLm: '',
+            expTotalCostLyDec: '',
+            expTotalCostCy: '',
+            expTotalCostYbl: '',
+            expCuCost: '',
+            expCuCostLm: '',
+            expCuCostLyDec: '',
+            expCuCostCy: '',
+            expCuCostYbl: '',
+    } as CustomMStatF,
+    viewForm: {} as CustomMStatF,
+    viewTitle: '',
+    viewDialogVisible: false,
+    title: '',
+    isEdit: false,
+    dialogVisible: false,
+  })
+
+  // 表单验证规则
+  const infoRules = reactive<FormRules<CustomMStatF>>({
+                  ID: [
+              { required: true, message: '主键不能为空', trigger: 'blur' }
+            ],
+  })
+
+  // 表格操作按钮配置
+  const actions = <Array<TableAction>>[
+    {
+      key: 'create',
+      text: '新增',
+      onclick: onCreate,
+      limit: permissionStatus('none', 'STATREPORT_CUSTOMMSTATF_ADD_BT'),
+      position: 'left',
+      type: 'primary',
+    },
+    {
+      key: 'view',
+      text: '查看',
+      onclick: onView,
+      limit: permissionStatus('one', 'STATREPORT_CUSTOMMSTATF_VIEW_BT'),
+      type: 'primary'
+    },
+    {
+      key: 'edit',
+      text: '修改',
+      onclick: onEdit,
+      limit: permissionStatus('one', 'STATREPORT_CUSTOMMSTATF_EDIT_BT'),
+      type: 'primary'
+    },
+    {
+      key: 'delete',
+      text: '删除',
+      onclick: onDelete,
+      confirm: true,
+      limit: permissionStatus('none', 'STATREPORT_CUSTOMMSTATF_DELETE_BT'),
+      type: 'primary'
+    },
+    {
+      key: 'refresh',
+      type: 'primary',
+      text: '刷新',
+      onclick: onRefresh,
+      limit: 'none',
+      position: 'left',
+      plain: true
+    }
+  ]
+
+  // 选中项的 ID 数组
+  const ids = ref<string[]>([])
+
+  // 多选框选中数据
+  function handleSelectionChange(selection: CustomMStatF[]) {
+    ids.value = selection
+        .map(item => item.ID)
+        .filter((id): id is string => id != null && id !== undefined)
+  }
+
+  // 搜索方法
+  const onSearch = () => {
+    setPageIndex(1)
+    onLoadData()
+  }
+
+  // 重置方法
+  const onReset = () => {
+    queryFormRef.value?.resetFields()
+    onPageChange(1)
+  }
+
+  // 每页显示条数变化
+  const onSizeChange = (size: number) => {
+    setPageSizes(size)
+    onLoadData()
+  }
+
+  // 翻页查询
+  const onPageChange = (currentPage: number) => {
+    setPageIndex(currentPage)
+    onLoadData()
+  }
+
+  // 弹框关闭方法
+  function onDialogClosed() {
+    state.dialogVisible = false
+    resetForm()
+  }
+
+  // 重置表单
+  function resetForm() {
+    state.formData = {
+            ID: '',
+            MONTH: '',
+            customCode: '',
+            impDeclCount: '',
+            impManDeclCount: '',
+            impManualAuditDeclCount: '',
+            impDeclCountLm: '',
+            impDeclCountLyDec: '',
+            impDeclCountCuryear: '',
+            impDeclCountYbl: '',
+            impTotalCost: '',
+            impTotalCostLm: '',
+            impTotalCostLyDec: '',
+            impTotalCostCy: '',
+            impTotalCostYbl: '',
+            impCuCost: '',
+            impCuCostLm: '',
+            impCuCostLyDec: '',
+            impCuCostCy: '',
+            impCuCostYbl: '',
+            expDeclCount: '',
+            expManDeclCount: '',
+            expManualAuditDeclCount: '',
+            expDeclCountLm: '',
+            expDeclCountLyDec: '',
+            expDeclCountCuryear: '',
+            expDeclCountYbl: '',
+            expTotalCost: '',
+            expTotalCostLm: '',
+            expTotalCostLyDec: '',
+            expTotalCostCy: '',
+            expTotalCostYbl: '',
+            expCuCost: '',
+            expCuCostLm: '',
+            expCuCostLyDec: '',
+            expCuCostCy: '',
+            expCuCostYbl: '',
+    } as CustomMStatF
+    dialogFormRef.value?.resetFields()
+  }
+
+  // 刷新方法
+  function onRefresh() {
+    onReset()
+  }
+
+  // 新增
+  function onCreate() {
+    resetForm()
+    state.dialogVisible = true
+    state.isEdit = true
+    state.title = '新增按业务现场关区分类'
+  }
+
+  // 查看
+  function onView(row: CustomMStatF) {
+    state.viewForm = { ...row }
+    state.viewDialogVisible = true
+    state.viewTitle = '查看按业务现场关区分类详情'
+  }
+
+  // 编辑
+  async function onEdit(row: CustomMStatF) {
+    const res = await getDetail(row.ID)
+    if (res.code === SuccessResultCode) {
+      state.formData = res.data
+      state.dialogVisible = true
+      state.isEdit = true
+      state.title = '修改按业务现场关区分类'
+    } else {
+      ElMessage.error(res.message || '数据获取异常')
+    }
+  }
+
+  // 删除
+  async function onDelete(row: CustomMStatF) {
+    const deleteIds = row.ID || ids.value
+    if (!deleteIds || deleteIds.length === 0) {
+      ElMessage.warning('请选择要删除的数据')
+      return
+    }
+
+    try {
+      await ElMessageBox.confirm('确定要删除选中的按业务现场关区分类吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      })
+
+      const res = await remove(deleteIds)
+      if (res.code === SuccessResultCode) {
+        ElMessage.success('删除成功')
+        onPageChange(1)
+      } else {
+        ElMessage.error(res.message || '删除失败')
+      }
+    } catch{
+      // 用户取消删除
+    }
+  }
+
+
+  // 新增/修改提交
+  async function onSubmit() {
+    if (!dialogFormRef.value) return
+
+    const isValid = await dialogFormRef.value.validate()
+    if (!isValid) return
+
+    try {
+
+
+      let res: Result<any>
+      if (state.formData.ID) {
+        res = await update(state.formData)
+      } else {
+        res = await insert(state.formData)
+      }
+
+      if (res.code === SuccessResultCode) {
+        ElMessage.success(state.formData.ID ? '修改成功' : '新增成功')
+        state.dialogVisible = false
+        onPageChange(1)
+      } else {
+        ElMessage.error(res.message || '操作失败')
+      }
+    } catch (error) {
+      console.error('提交失败:', error)
+      ElMessage.error('操作失败')
+    }
+  }
+
+  // 数据查询
+  async function onLoadData() {
+    setLoading(true)
+    try {
+      const query = {
+        ...state.queryData,
+        pageIndex: tablePagination.currentPage,
+        pageSize: tablePagination.pageSize
+      }
+      const res = await getList(query)
+      if (res.code === SuccessResultCode) {
+        setPagination(res.data)
+      } else {
+        ElMessage.error(res.message || '查询失败')
+      }
+    } catch (error) {
+      console.error('查询失败:', error)
+      ElMessage.error('查询失败')
+    } finally {
+      setLoading(false)
+    }
+  }
+
+
+  // 组件挂载时加载数据
+  onMounted(() => {
+    onLoadData()
+  })
+</script>
+
+<style scoped>
+  /* 自定义样式 */
+</style>