Commit 79bebed7 authored by hongguangwu's avatar hongguangwu

回盘

parent 9ea9c330
...@@ -16,11 +16,13 @@ ...@@ -16,11 +16,13 @@
*/ */
package com.yifu.cloud.plus.v1.yifu.salary.vo; package com.yifu.cloud.plus.v1.yifu.salary.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsCurrentReportMarket; import com.yifu.cloud.plus.v1.yifu.salary.entity.TStatisticsCurrentReportMarket;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Set;
/** /**
* 统计-本期申报-回盘数据 * 统计-本期申报-回盘数据
...@@ -37,6 +39,10 @@ public class TStatisticsCurrentReportMarketSearchVo extends TStatisticsCurrentRe ...@@ -37,6 +39,10 @@ public class TStatisticsCurrentReportMarketSearchVo extends TStatisticsCurrentRe
@Schema(description = "选中ID,多个逗号分割") @Schema(description = "选中ID,多个逗号分割")
private String ids; private String ids;
@TableField(exist = false)
@Schema(description = "导出的表头的Set")
private Set<String> exportFields;
/** /**
* 创建时间区间 [开始时间,结束时间] * 创建时间区间 [开始时间,结束时间]
*/ */
......
...@@ -83,14 +83,32 @@ public class TStatisticsCurrentReportMarketController { ...@@ -83,14 +83,32 @@ public class TStatisticsCurrentReportMarketController {
* @param id id * @param id id
* @return R * @return R
*/ */
@Operation(summary = "通过id删除统计-本期申报-回盘数据", description = "通过id删除统计-本期申报-回盘数据:hasPermission('salary_tstatisticscurrentreportmarket_del')") @Operation(summary = "通过id删除统计-本期申报-回盘数据", description = "通过id删除统计-本期申报-回盘数据:hasPermission('salary_report_market_del')")
@SysLog("通过id删除统计-本期申报-回盘数据") @SysLog("通过id删除统计-本期申报-回盘数据")
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('salary_tstatisticscurrentreportmarket_del')") @PreAuthorize("@pms.hasPermission('salary_report_market_del')")
public R<Boolean> removeById(@PathVariable String id) { public R<Boolean> removeById(@PathVariable String id) {
return R.ok(tStatisticsCurrentReportMarketService.removeById(id)); return R.ok(tStatisticsCurrentReportMarketService.removeById(id));
} }
/**
* @param yearMonth 年月
* @return R
*/
@Operation(summary = "删除-按申报月份", description = "通过id删除统计-本期申报-回盘数据:hasPermission('salary_report_market_doDeleteByDeclareMonth')")
@SysLog("删除-按申报月份")
@PostMapping("/doDeleteByDeclareMonth")
@PreAuthorize("@pms.hasPermission('salary_report_market_doDeleteByDeclareMonth')")
public R<String> doDeleteByDeclareMonth(@RequestParam String yearMonth) {
int num = tStatisticsCurrentReportMarketService.deleteByYearMonth(yearMonth);
if (num == 0) {
return R.failed("当前条件查询无数据,未删除");
} else {
return R.ok("已删除" + num + "条数据");
}
}
/** /**
* 统计-本期申报-回盘数据 批量导入 * 统计-本期申报-回盘数据 批量导入
* *
...@@ -98,24 +116,12 @@ public class TStatisticsCurrentReportMarketController { ...@@ -98,24 +116,12 @@ public class TStatisticsCurrentReportMarketController {
* @date 2022-08-05 11:40:14 * @date 2022-08-05 11:40:14
**/ **/
@SneakyThrows @SneakyThrows
@Operation(description = "批量新增统计-本期申报-回盘数据 hasPermission('salary_tstatisticscurrentreportmarket-batch-import')") @Operation(description = "批量导入-回盘数据 hasPermission('salary_report_market-batch-import')")
@SysLog("批量新增统计-本期申报-回盘数据") @SysLog("批量导入-回盘数据")
@PostMapping("/importListAdd") @PostMapping("/importListAdd")
@PreAuthorize("@pms.hasPermission('salary_tstatisticscurrentreportmarket-batch-import')") @PreAuthorize("@pms.hasPermission('salary_report_market-batch-import')")
public R<List<ErrorMessage>> importListAdd(@RequestBody MultipartFile file) { public R<List<ErrorMessage>> importListAdd(@RequestBody MultipartFile file) {
return tStatisticsCurrentReportMarketService.importDiy(file.getInputStream()); return tStatisticsCurrentReportMarketService.importDiy(file.getInputStream());
} }
/**
* 统计-本期申报-回盘数据 批量导出
*
* @author hgw
* @date 2022-08-05 11:40:14
**/
@Operation(description = "导出统计-本期申报-回盘数据 hasPermission('salary_tstatisticscurrentreportmarket-export')")
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('salary_tstatisticscurrentreportmarket-export')")
public void export(HttpServletResponse response, @RequestBody TStatisticsCurrentReportMarketSearchVo searchVo) {
tStatisticsCurrentReportMarketService.listExport(response, searchVo);
}
} }
...@@ -36,5 +36,25 @@ public interface TStatisticsCurrentReportMarketMapper extends BaseMapper<TStatis ...@@ -36,5 +36,25 @@ public interface TStatisticsCurrentReportMarketMapper extends BaseMapper<TStatis
* @param tStatisticsCurrentReportMarket 统计-本期申报-回盘数据 * @param tStatisticsCurrentReportMarket 统计-本期申报-回盘数据
* @return * @return
*/ */
IPage<TStatisticsCurrentReportMarket> getTStatisticsCurrentReportMarketPage(Page<TStatisticsCurrentReportMarket> page, @Param("tStatisticsCurrentReportMarket") TStatisticsCurrentReportMarket tStatisticsCurrentReportMarket); IPage<TStatisticsCurrentReportMarket> getTStatisticsCurrentReportMarketPage(Page<TStatisticsCurrentReportMarket> page
, @Param("tStatisticsCurrentReportMarket") TStatisticsCurrentReportMarket tStatisticsCurrentReportMarket);
/**
* @param yearMonth
* @Description: 删除-按申报月份
* @Author: hgw
* @Date: 2020/6/16 15:19
* @return: int
**/
int deleteByYearMonth(@Param("yearMonth") String yearMonth);
/**
* @param declareMonth
* @param declareTitle
* @Description: 查重
* @Author: hgw
* @Date: 2022/8/18 16:05
* @return: int
**/
int getCountByMonthAndTitle(@Param("declareMonth") String declareMonth, @Param("declareTitle") String declareTitle);
} }
...@@ -45,7 +45,15 @@ public interface TStatisticsCurrentReportMarketService extends IService<TStatist ...@@ -45,7 +45,15 @@ public interface TStatisticsCurrentReportMarketService extends IService<TStatist
R<List<ErrorMessage>> importDiy(InputStream inputStream); R<List<ErrorMessage>> importDiy(InputStream inputStream);
void listExport(HttpServletResponse response, TStatisticsCurrentReportMarketSearchVo searchVo);
List<TStatisticsCurrentReportMarket> noPageDiy(TStatisticsCurrentReportMarketSearchVo searchVo); List<TStatisticsCurrentReportMarket> noPageDiy(TStatisticsCurrentReportMarketSearchVo searchVo);
/**
* @param yearMonth 申报月份
* @Description: 删除-按申报月份
* @Author: hgw
* @Date: 2020/6/16 15:17
* @return: int
**/
int deleteByYearMonth(String yearMonth);
} }
...@@ -18,13 +18,12 @@ package com.yifu.cloud.plus.v1.yifu.salary.service.impl; ...@@ -18,13 +18,12 @@ package com.yifu.cloud.plus.v1.yifu.salary.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder; import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.util.ListUtils; import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -39,11 +38,7 @@ import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsCurrentReportMarketVo; ...@@ -39,11 +38,7 @@ import com.yifu.cloud.plus.v1.yifu.salary.vo.TStatisticsCurrentReportMarketVo;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -67,71 +62,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -67,71 +62,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
return baseMapper.getTStatisticsCurrentReportMarketPage(page, tStatisticsCurrentReportMarket); return baseMapper.getTStatisticsCurrentReportMarketPage(page, tStatisticsCurrentReportMarket);
} }
/**
* 统计-本期申报-回盘数据批量导出
*
* @return
*/
@Override
public void listExport(HttpServletResponse response, TStatisticsCurrentReportMarketSearchVo searchVo) {
String fileName = "不良记录批量导出" + DateUtil.getThisTime() + ".xlsx";
//获取要导出的列表
List<TStatisticsCurrentReportMarket> list = new ArrayList<>();
long count = noPageCountDiy(searchVo);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType(CommonConstants.MULTIPART_FORM_DATA);
response.setCharacterEncoding("utf-8");
response.setHeader(CommonConstants.CONTENT_DISPOSITION, CommonConstants.ATTACHMENT_FILENAME + URLEncoder.encode(fileName, "UTF-8"));
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,然后文件流会自动关闭
//EasyExcel.write(out, TEmpBadRecord.class).sheet("不良记录").doWrite(list);
ExcelWriter excelWriter = EasyExcel.write(out, TStatisticsCurrentReportMarket.class).build();
int index = 0;
if (count > CommonConstants.ZERO_INT) {
for (int i = 0; i <= count; ) {
// 获取实际记录
searchVo.setLimitStart(i);
searchVo.setLimitEnd(CommonConstants.EXCEL_EXPORT_LIMIT);
list = noPageDiy(searchVo);
if (Common.isNotNull(list)) {
ExcelUtil<TStatisticsCurrentReportMarket> util = new ExcelUtil<>(TStatisticsCurrentReportMarket.class);
for (TStatisticsCurrentReportMarket vo : list) {
util.convertEntity(vo, null, null, null);
}
}
if (Common.isNotNull(list)) {
WriteSheet writeSheet = EasyExcel.writerSheet("统计-本期申报-回盘数据" + index).build();
excelWriter.write(list, writeSheet);
index++;
}
i = i + CommonConstants.EXCEL_EXPORT_LIMIT;
if (Common.isNotNull(list)) {
list.clear();
}
}
} else {
WriteSheet writeSheet = EasyExcel.writerSheet("统计-本期申报-回盘数据" + index).build();
excelWriter.write(list, writeSheet);
}
if (Common.isNotNull(list)) {
list.clear();
}
out.flush();
excelWriter.finish();
} catch (Exception e) {
log.error("执行异常", e);
} finally {
try {
if (null != out) {
out.close();
}
} catch (IOException e) {
log.error("执行异常", e);
}
}
}
@Override @Override
public List<TStatisticsCurrentReportMarket> noPageDiy(TStatisticsCurrentReportMarketSearchVo searchVo) { public List<TStatisticsCurrentReportMarket> noPageDiy(TStatisticsCurrentReportMarketSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsCurrentReportMarket> wrapper = buildQueryWrapper(searchVo); LambdaQueryWrapper<TStatisticsCurrentReportMarket> wrapper = buildQueryWrapper(searchVo);
...@@ -145,15 +75,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -145,15 +75,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
return baseMapper.selectList(wrapper); return baseMapper.selectList(wrapper);
} }
private Long noPageCountDiy(TStatisticsCurrentReportMarketSearchVo searchVo) {
LambdaQueryWrapper<TStatisticsCurrentReportMarket> wrapper = buildQueryWrapper(searchVo);
List<String> idList = Common.getList(searchVo.getIds());
if (Common.isNotNull(idList)) {
wrapper.in(TStatisticsCurrentReportMarket::getId, idList);
}
return baseMapper.selectCount(wrapper);
}
private LambdaQueryWrapper buildQueryWrapper(TStatisticsCurrentReportMarketSearchVo entity) { private LambdaQueryWrapper buildQueryWrapper(TStatisticsCurrentReportMarketSearchVo entity) {
LambdaQueryWrapper<TStatisticsCurrentReportMarket> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<TStatisticsCurrentReportMarket> wrapper = Wrappers.lambdaQuery();
return wrapper; return wrapper;
...@@ -163,7 +84,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -163,7 +84,6 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
public R<List<ErrorMessage>> importDiy(InputStream inputStream) { public R<List<ErrorMessage>> importDiy(InputStream inputStream) {
List<ErrorMessage> errorMessageList = new ArrayList<>(); List<ErrorMessage> errorMessageList = new ArrayList<>();
ExcelUtil<TStatisticsCurrentReportMarketVo> util1 = new ExcelUtil<>(TStatisticsCurrentReportMarketVo.class); ExcelUtil<TStatisticsCurrentReportMarketVo> util1 = new ExcelUtil<>(TStatisticsCurrentReportMarketVo.class);
;
// 写法2: // 写法2:
// 匿名内部类 不用额外写一个DemoDataListener // 匿名内部类 不用额外写一个DemoDataListener
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
...@@ -173,6 +93,9 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -173,6 +93,9 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
* 单次缓存的数据量 * 单次缓存的数据量
*/ */
public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT; public static final int BATCH_COUNT = CommonConstants.BATCH_COUNT;
// 申报月份
String declareMonth;
String declareTitle;
/** /**
*临时存储 *临时存储
*/ */
...@@ -190,7 +113,36 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -190,7 +113,36 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
cachedDataList.add(data); cachedDataList.add(data);
} }
if (cachedDataList.size() >= BATCH_COUNT) { if (cachedDataList.size() >= BATCH_COUNT) {
saveData(); if (Common.isEmpty(declareMonth)) {
if (Common.isNotNull(cachedDataList.get(0).getCreateStart())) {
declareMonth = DateUtil.getYearMonth(cachedDataList.get(0).getCreateStart());
}
if (Common.isEmpty(declareMonth)) {
errorMessageList.add(new ErrorMessage(CommonConstants.ZERO_INT
, "请检查‘税款所属期起’单元格格式是文本格式,且满足日期格式yyyy-MM-dd或yyyyMMdd:CreateStart="
+ cachedDataList.get(0).getCreateStart() + "|| yearMonth=" + declareMonth));
}
declareTitle = cachedDataList.get(0).getInvoiceTitle();
if (Common.isEmpty(declareTitle)) {
errorMessageList.add(new ErrorMessage(CommonConstants.ZERO_INT
, "封面抬头全称-不能为空"));
}
if (Common.isNotNull(declareMonth) && Common.isNotNull(declareTitle)) {
TStatisticsCurrentReportMarket sdsCheck = new TStatisticsCurrentReportMarket();
sdsCheck.setDeclareMonth(declareMonth);
sdsCheck.setInvoiceTitle(declareTitle);
QueryWrapper<TStatisticsCurrentReportMarket> queryWrapperSc = new QueryWrapper<>();
queryWrapperSc.setEntity(sdsCheck);
int count = baseMapper.getCountByMonthAndTitle(declareMonth, declareTitle);
if (count > CommonConstants.ZERO_INT) {
errorMessageList.add(new ErrorMessage(CommonConstants.ZERO_INT
, "当前月同一-封面抬头全称-已存在数据。"));
}
}
}
if (errorMessageList.isEmpty()) {
saveData(declareMonth);
}
// 存储完成清理 list // 存储完成清理 list
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT); cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
} }
...@@ -198,15 +150,17 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -198,15 +150,17 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
@Override @Override
public void doAfterAllAnalysed(AnalysisContext context) { public void doAfterAllAnalysed(AnalysisContext context) {
saveData(); saveData(declareMonth);
} }
/** /**
* 加上存储数据库 * 加上存储数据库
*/ */
private void saveData() { private void saveData(String declareMonth) {
log.info("{}条数据,开始存储数据库!", cachedDataList.size()); log.info("{}条数据,开始存储数据库!", cachedDataList.size());
importTStatisticsCurrentReportMarket(cachedDataList, errorMessageList); if (!cachedDataList.isEmpty()) {
importTStatisticsCurrentReportMarket(declareMonth, cachedDataList);
}
log.info("存储数据库成功!"); log.info("存储数据库成功!");
} }
}).sheet().doRead(); }).sheet().doRead();
...@@ -214,29 +168,37 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat ...@@ -214,29 +168,37 @@ public class TStatisticsCurrentReportMarketServiceImpl extends ServiceImpl<TStat
log.error(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR, e); log.error(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR, e);
return R.failed(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR); return R.failed(CommonConstants.IMPORT_DATA_ANALYSIS_ERROR);
} }
return R.ok(errorMessageList); boolean isTrue = true;
for (ErrorMessage message : errorMessageList) {
if (!CommonConstants.SAVE_SUCCESS.equals(message.getMessage())) {
isTrue = false;
break;
}
}
if (isTrue) {
return R.ok();
} else {
return R.failed(errorMessageList);
}
} }
private void importTStatisticsCurrentReportMarket(List<TStatisticsCurrentReportMarketVo> excelVOList, List<ErrorMessage> errorMessageList) { private void importTStatisticsCurrentReportMarket(String declareMonth, List<TStatisticsCurrentReportMarketVo> excelVOList) {
// 个性化校验逻辑 // 个性化校验逻辑
ErrorMessage errorMsg; TStatisticsCurrentReportMarketVo excel;
TStatisticsCurrentReportMarket insert;
// 执行数据插入操作 组装 // 执行数据插入操作 组装
for (int i = 0; i < excelVOList.size(); i++) { for (int i = 0; i < excelVOList.size(); i++) {
TStatisticsCurrentReportMarketVo excel = excelVOList.get(i); excel = excelVOList.get(i);
// 数据合法情况 TODO insert = new TStatisticsCurrentReportMarket();
BeanUtil.copyProperties(excel, insert);
// 插入 insert.setDeclareMonth(declareMonth);
insertExcel(excel); this.save(insert);
errorMessageList.add(new ErrorMessage(excel.getRowIndex(), CommonConstants.SAVE_SUCCESS));
} }
} }
/** @Override
* 插入excel bad record public int deleteByYearMonth(String yearMonth) {
*/ return baseMapper.deleteByYearMonth(yearMonth);
private void insertExcel(TStatisticsCurrentReportMarketVo excel) {
TStatisticsCurrentReportMarket insert = new TStatisticsCurrentReportMarket();
BeanUtil.copyProperties(excel, insert);
this.save(insert);
} }
} }
...@@ -276,4 +276,18 @@ ...@@ -276,4 +276,18 @@
<include refid="tStatisticsCurrentReportMarket_where"/> <include refid="tStatisticsCurrentReportMarket_where"/>
</where> </where>
</select> </select>
<!-- 删除-按申报月份 -->
<delete id="deleteByYearMonth">
DELETE FROM t_statistics_current_report_market WHERE DECLARE_MONTH = #{yearMonth}
</delete>
<!-- 查重 -->
<select id="getCountByMonthAndTitle" resultType="java.lang.Integer">
SELECT
count(1)
FROM t_statistics_current_report_market a
where a.INVOICE_TITLE = #{declareTitle} and a.declare_MONTH = #{declareMonth}
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment