Commit d63ed670 by huluobin

# update

parent 684662ce
......@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.blt.other.module.auth.model.OaUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* Mapper 接口
......@@ -18,4 +20,7 @@ public interface OaUserMapper extends BaseMapper<OaUser> {
OaUser selectByOaUserId(Integer oaUserId);
OaUser selectByUserName(String userName);
//
List<OaUser> selectByUserNames(String financialReviewerUser);
}
......@@ -2,8 +2,9 @@ package com.blt.other.module.cost.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.blt.other.module.sys.dto.request.CompanyReviewerListReq;
import com.blt.other.database.model.CostCompanyDomain;
import com.blt.other.module.sys.dto.request.CompanyReviewerListReq;
import com.blt.other.module.sys.dto.response.CostReviewerExportItem;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
......@@ -69,8 +70,11 @@ public interface CostCompanyDao extends BaseMapper<CostCompanyDomain> {
* </p>
*
* @param page 分页参数
* @param req 查询参数
* @param req 查询参数
* @return
*/
IPage<CostCompanyDomain> reviewerList(@Param("page") IPage<CostCompanyDomain> page, @Param("req") CompanyReviewerListReq req);
IPage<CostCompanyDomain> reviewerPage(@Param("page") IPage<CostCompanyDomain> page, @Param("req") CompanyReviewerListReq req);
//导出
List<CostReviewerExportItem> costReviewerExportItemList();
}
......@@ -8,6 +8,8 @@ import com.blt.other.module.sys.dto.request.CostReviewerExportReq;
import com.blt.other.module.sys.dto.request.CostReviewerImportReq;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
......@@ -83,7 +85,9 @@ public interface CostCompanyService extends IService<CostCompanyDomain> {
*/
Map<String, CostCompanyDomain> costCompanyMap();
void importExcel(CostReviewerImportReq req);
//import excel
void importExcel(CostReviewerImportReq req) throws IOException;
void exportExcel(HttpServletResponse response, CostReviewerExportReq req);
//export excel
void exportExcel(HttpServletResponse response, CostReviewerExportReq req) throws IOException;
}
package com.blt.other.module.cost.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.bailuntec.common.ListUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -7,17 +9,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.blt.other.common.config.property.CostUrlProperties;
import com.blt.other.common.util.CompanyUtil;
import com.blt.other.module.sys.dao.CostReviewerMapper;
import com.blt.other.database.model.CostCompanyDomain;
import com.blt.other.module.auth.dao.OaUserMapper;
import com.blt.other.module.sys.dto.request.CompanyReviewerListReq;
import com.blt.other.module.sys.dto.request.CostReviewerExportReq;
import com.blt.other.module.sys.dto.request.CostReviewerImportReq;
import com.blt.other.module.sys.model.CostReviewer;
import com.blt.other.module.auth.model.OaUser;
import com.blt.other.module.cost.dao.CostCompanyDao;
import com.blt.other.module.cost.service.CostCompanyService;
import com.blt.other.database.model.CostCompanyDomain;
import com.blt.other.module.purchasing.vo.CompanyVo;
import com.blt.other.module.sys.dao.CostReviewerMapper;
import com.blt.other.module.sys.dto.request.CompanyReviewerListReq;
import com.blt.other.module.sys.dto.request.CostReviewerExportReq;
import com.blt.other.module.sys.dto.request.CostReviewerImportItem;
import com.blt.other.module.sys.dto.request.CostReviewerImportReq;
import com.blt.other.module.sys.dto.response.CostReviewerExportItem;
import com.blt.other.module.sys.dto.response.SpecDepartmentCheckConfigExportExcelItem;
import com.blt.other.module.sys.model.CostReviewer;
import com.blt.other.module.sys.service.impl.CostReviewerImportItemListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
......@@ -25,6 +31,8 @@ import springfox.documentation.annotations.Cacheable;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
......@@ -91,15 +99,9 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
return costCompanyDao.getAllCompanyAuthority();
}
@Override
public IPage<CostCompanyDomain> reviewerList(CompanyReviewerListReq req) {
IPage<CostCompanyDomain> page = new Page<>(req.getPageNum(), req.getPageSize());
page = baseMapper.reviewerList(page, req);
if (ListUtil.isNotEmpty(page.getRecords())) {
List<Integer> costCompanyIds = page.getRecords().stream().map(CostCompanyDomain::getId).collect(Collectors.toList());
private void setCostCompany(List<CostCompanyDomain> costCompanyDomainList) {
if (ListUtil.isNotEmpty(costCompanyDomainList) {
List<Integer> costCompanyIds = costCompanyDomainList.stream().map(CostCompanyDomain::getId).collect(Collectors.toList());
//最终审核人
List<CostReviewer> finalCostReviewerList = costReviewerMapper.selectList(new LambdaQueryWrapper<CostReviewer>()
......@@ -107,7 +109,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.finalReviewer));
Map<Integer, CostReviewer> finalReviewerMap = finalCostReviewerList.stream().collect(Collectors.toMap(CostReviewer::getReferId, costReviewer -> costReviewer));
page.getRecords().forEach(record -> record.setFinalReviewer(finalReviewerMap.get(record.getId())));
costCompanyDomainList.forEach(record -> record.setFinalReviewer(finalReviewerMap.get(record.getId())));
//财务审核人
List<CostReviewer> financialCostReviewerList = costReviewerMapper.selectList(new LambdaQueryWrapper<CostReviewer>()
......@@ -115,7 +117,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.financialReviewer));
Map<Integer, List<CostReviewer>> financialReviewerMap = financialCostReviewerList.stream().collect(Collectors.groupingBy(CostReviewer::getReferId));
page.getRecords().forEach(record -> {
costCompanyDomainList.forEach(record -> {
record.setFinancialReviewer(financialReviewerMap.get(record.getId()));
});
......@@ -125,11 +127,20 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.hrReviewer));
Map<Integer, List<CostReviewer>> htReviewerMap = hrCostReviewerList.stream().collect(Collectors.groupingBy(CostReviewer::getReferId));
page.getRecords().forEach(record -> {
costCompanyDomainList.forEach(record -> {
record.setHrReviewer(htReviewerMap.get(record.getId()));
});
}
}
@Override
public IPage<CostCompanyDomain> reviewerList(CompanyReviewerListReq req) {
IPage<CostCompanyDomain> page = new Page<>(req.getPageNum(), req.getPageSize());
page = baseMapper.reviewerPage(page, req);
this.setCostCompany(page.getRecords());
return page;
}
......@@ -240,13 +251,26 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
}
@Override
public void importExcel(CostReviewerImportReq req) {
public void importExcel(CostReviewerImportReq req) throws IOException {
CostReviewerImportItemListener listener = new CostReviewerImportItemListener();
EasyExcel.read(req.getMultipartFile().getInputStream(), CostReviewerImportItem.class, listener).sheet().doRead();
}
@Override
public void exportExcel(HttpServletResponse response, CostReviewerExportReq req) {
public void exportExcel(HttpServletResponse response, CostReviewerExportReq req) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
//
String fileName = URLEncoder.encode("模版", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
LongestMatchColumnWidthStyleStrategy longestMatchColumnWidthStyleStrategy = new LongestMatchColumnWidthStyleStrategy();
List<CostReviewerExportItem> aiList = baseMapper.costReviewerExportItemList();
EasyExcel.write(response.getOutputStream(), CostReviewerExportItem.class)
.sheet("sheet")
.registerWriteHandler(longestMatchColumnWidthStyleStrategy)
.doWrite(aiList);
}
/**
......
package com.blt.other.module.sys.dto.request;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/22 2:52 下午
*/
@Data
public class CostReviewerImportItem {
@ExcelProperty("出纳公司主体")
private String companyName,
@ExcelProperty("财务审核人")
private String financialReviewerUser,
@ExcelProperty("最终审核人")
private String finalReviewerUser,
@ExcelProperty("人事审核人")
private String hrReviewerUser
}
package com.blt.other.module.sys.dto.response;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/22 2:53 下午
*/
@Data
public class CostReviewerExportItem {
@ExcelProperty("出纳公司主体")
private String companyName,
@ExcelProperty("财务审核人")
private String financialReviewerUser,
@ExcelProperty("最终审核人")
private String finalReviewerUser,
@ExcelProperty("人事审核人")
private String hrReviewerUser
}
package com.blt.other.module.sys.service.impl;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.bailuntec.common.ListUtil;
import com.bailuntec.common.SpringContextUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.blt.other.database.model.CostCompanyDomain;
import com.blt.other.module.auth.dao.OaUserMapper;
import com.blt.other.module.auth.model.OaUser;
import com.blt.other.module.cost.dao.CostCompanyDao;
import com.blt.other.module.sys.dao.CostReviewerMapper;
import com.blt.other.module.sys.dto.request.CostReviewerImportItem;
import com.blt.other.module.sys.model.CostReviewer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/22 2:54 下午
*/
public class CostReviewerImportItemListener extends AnalysisEventListener<CostReviewerImportItem> {
private static final Logger LOGGER = LoggerFactory.getLogger(CostReviewerImportItemListener.class);
private static final int BATCH_COUNT = 1000;
List<CostReviewerImportItem> list = new ArrayList<>();
@Override
public void invoke(CostReviewerImportItem data, AnalysisContext context) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
syncData();
list.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
syncData();
LOGGER.info("所有数据解析完成!");
}
private void syncData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
CostCompanyDao costCompanyDao = SpringContextUtil.getBean(CostCompanyDao.class);
OaUserMapper oaUserMapper = SpringContextUtil.getBean(OaUserMapper.class);
CostReviewerMapper costReviewerMapper = SpringContextUtil.getBean(CostReviewerMapper.class);
list.forEach(item -> {
CostCompanyDomain costCompanyDomain = costCompanyDao.selectByName(item.getCompanyName());
if (costCompanyDomain != null) {
List<OaUser> financialReviewerUser = oaUserMapper.selectByUserNames(item.getFinancialReviewerUser());
if (ListUtil.isNotEmpty(financialReviewerUser)) {
costReviewerMapper.delete(new LambdaQueryWrapper<CostReviewer>()
.eq(CostReviewer::getType, CostReviewer.financialReviewer));
financialReviewerUser
.forEach(oaUser -> {
CostReviewer costReviewer = new CostReviewer();
costReviewer.setReviewerUserId(oaUser.getOaUserId());
costReviewer.setReviewerUserName(oaUser.getUserName());
costReviewer.setReferId(costCompanyDomain.getId());
costReviewer.setType(CostReviewer.financialReviewer);
costReviewerMapper.insert(costReviewer);
});
}
List<OaUser> finalReviewerUser = oaUserMapper.selectByUserNames(item.getFinalReviewerUser());
if (ListUtil.isNotEmpty(finalReviewerUser)) {
costReviewerMapper.delete(new LambdaQueryWrapper<CostReviewer>()
.eq(CostReviewer::getType, CostReviewer.finalReviewer));
financialReviewerUser
.forEach(oaUser -> {
CostReviewer costReviewer = new CostReviewer();
costReviewer.setReviewerUserId(oaUser.getOaUserId());
costReviewer.setReviewerUserName(oaUser.getUserName());
costReviewer.setReferId(costCompanyDomain.getId());
costReviewer.setType(CostReviewer.finalReviewer);
costReviewerMapper.insert(costReviewer);
});
}
List<OaUser> hrReviewerUser = oaUserMapper.selectByUserNames(item.getHrReviewerUser());
if (ListUtil.isNotEmpty(hrReviewerUser)) {
costReviewerMapper.delete(new LambdaQueryWrapper<CostReviewer>()
.eq(CostReviewer::getType, CostReviewer.hrReviewer));
financialReviewerUser
.forEach(oaUser -> {
CostReviewer costReviewer = new CostReviewer();
costReviewer.setReviewerUserId(oaUser.getOaUserId());
costReviewer.setReviewerUserName(oaUser.getUserName());
costReviewer.setReferId(costCompanyDomain.getId());
costReviewer.setType(CostReviewer.hrReviewer);
costReviewerMapper.insert(costReviewer);
});
}
}
});
LOGGER.info("存储数据库成功!");
}
}
......@@ -51,7 +51,11 @@
FROM cost_company
</select>
<select id="reviewerList" resultType="com.blt.other.database.model.CostCompanyDomain">
<select id="reviewerPage" resultType="com.blt.other.database.model.CostCompanyDomain">
<include refid="reviewerSql"/>
</select>
<sql id="reviewerSql">
select t1.* from cost_company t1
<if test="req.financialReviewerUserId !=null">
left join cost_reviewer t2 on t1.id = t2.refer_id and t2.type = 2
......@@ -60,7 +64,7 @@
left join cost_reviewer t3 on t1.id = t3.refer_id and t3.type = 3
</if>
<if test="req.hrReviewerUserId !=null">
left join cost_reviewer t3 on t1.id = t3.refer_id and t3.type = 4
left join cost_reviewer t4 on t1.id = t4.refer_id and t4.type = 4
</if>
where true
/*财务审核人*/
......@@ -73,6 +77,48 @@
</if>
/*行政审核人*/
<if test="req.hrReviewerUserId !=null">
and t4.reviewer_user_id =#{req.hrReviewerUserId}
</if>
/*最后修改时间*/
<if test="req.startTime !=null">
and t1.last_update_time &gt; #{req.startTime}
</if>
/*最后修改时间*/
<if test="req.endTime !=null">
and t1.last_update_time &lt; #{req.endTime}
</if>
/*修改人*/
<if test="req.modifyUserId !=null">
and t1.update_user_id =#{req.modifyUserId}
</if>
<if test="req.companyNo !=null and req.companyNo!= '' ">
and t1.company_no =#{req.companyNo}
</if>
group by t1.id
</sql>
<select id="costReviewerExportItemList" resultType="com.blt.other.module.sys.dto.response.CostReviewerExportItem">
select t1.company_name,
group_concat(t2.reviewer_user_name) financial_reviewer_user,
group_concat(t3.reviewer_user_name) final_reviewer_user,
group_concat(t4.reviewer_user_name) hr_reviewer_user
from cost_company t1
left join cost_reviewer t2 on t1.id = t2.refer_id and t2.type = 2
left join cost_reviewer t3 on t1.id = t3.refer_id and t3.type = 3
left join cost_reviewer t4 on t1.id = t3.refer_id and t3.type = 4
where true
/*财务审核人*/
<if test="req.financialReviewerUserId !=null">
and t2.reviewer_user_id =#{req.financialReviewerUserId}
</if>
/*最终审核人*/
<if test="req.finalReviewerUserId !=null">
and t3.reviewer_user_id =#{req.finalReviewerUserId}
</if>
/*行政审核人*/
<if test="req.hrReviewerUserId !=null">
and t3.reviewer_user_id =#{req.hrReviewerUserId}
</if>
/*最后修改时间*/
......
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