Commit d63ed670 by huluobin

# update

parent 684662ce
...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.blt.other.module.auth.model.OaUser; import com.blt.other.module.auth.model.OaUser;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
...@@ -18,4 +20,7 @@ public interface OaUserMapper extends BaseMapper<OaUser> { ...@@ -18,4 +20,7 @@ public interface OaUserMapper extends BaseMapper<OaUser> {
OaUser selectByOaUserId(Integer oaUserId); OaUser selectByOaUserId(Integer oaUserId);
OaUser selectByUserName(String userName); OaUser selectByUserName(String userName);
//
List<OaUser> selectByUserNames(String financialReviewerUser);
} }
...@@ -2,8 +2,9 @@ package com.blt.other.module.cost.dao; ...@@ -2,8 +2,9 @@ package com.blt.other.module.cost.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -69,8 +70,11 @@ public interface CostCompanyDao extends BaseMapper<CostCompanyDomain> { ...@@ -69,8 +70,11 @@ public interface CostCompanyDao extends BaseMapper<CostCompanyDomain> {
* </p> * </p>
* *
* @param page 分页参数 * @param page 分页参数
* @param req 查询参数 * @param req 查询参数
* @return * @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; ...@@ -8,6 +8,8 @@ import com.blt.other.module.sys.dto.request.CostReviewerExportReq;
import com.blt.other.module.sys.dto.request.CostReviewerImportReq; import com.blt.other.module.sys.dto.request.CostReviewerImportReq;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -83,7 +85,9 @@ public interface CostCompanyService extends IService<CostCompanyDomain> { ...@@ -83,7 +85,9 @@ public interface CostCompanyService extends IService<CostCompanyDomain> {
*/ */
Map<String, CostCompanyDomain> costCompanyMap(); 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; 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.bailuntec.common.ListUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
...@@ -7,17 +9,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -7,17 +9,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.blt.other.common.config.property.CostUrlProperties; import com.blt.other.common.config.property.CostUrlProperties;
import com.blt.other.common.util.CompanyUtil; 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.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.auth.model.OaUser;
import com.blt.other.module.cost.dao.CostCompanyDao; import com.blt.other.module.cost.dao.CostCompanyDao;
import com.blt.other.module.cost.service.CostCompanyService; 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.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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -25,6 +31,8 @@ import springfox.documentation.annotations.Cacheable; ...@@ -25,6 +31,8 @@ import springfox.documentation.annotations.Cacheable;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
...@@ -91,15 +99,9 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp ...@@ -91,15 +99,9 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
return costCompanyDao.getAllCompanyAuthority(); return costCompanyDao.getAllCompanyAuthority();
} }
@Override private void setCostCompany(List<CostCompanyDomain> costCompanyDomainList) {
public IPage<CostCompanyDomain> reviewerList(CompanyReviewerListReq req) { if (ListUtil.isNotEmpty(costCompanyDomainList) {
List<Integer> costCompanyIds = costCompanyDomainList.stream().map(CostCompanyDomain::getId).collect(Collectors.toList());
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());
//最终审核人 //最终审核人
List<CostReviewer> finalCostReviewerList = costReviewerMapper.selectList(new LambdaQueryWrapper<CostReviewer>() List<CostReviewer> finalCostReviewerList = costReviewerMapper.selectList(new LambdaQueryWrapper<CostReviewer>()
...@@ -107,7 +109,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp ...@@ -107,7 +109,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.finalReviewer)); .eq(CostReviewer::getType, CostReviewer.finalReviewer));
Map<Integer, CostReviewer> finalReviewerMap = finalCostReviewerList.stream().collect(Collectors.toMap(CostReviewer::getReferId, costReviewer -> costReviewer)); 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>() List<CostReviewer> financialCostReviewerList = costReviewerMapper.selectList(new LambdaQueryWrapper<CostReviewer>()
...@@ -115,7 +117,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp ...@@ -115,7 +117,7 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.financialReviewer)); .eq(CostReviewer::getType, CostReviewer.financialReviewer));
Map<Integer, List<CostReviewer>> financialReviewerMap = financialCostReviewerList.stream().collect(Collectors.groupingBy(CostReviewer::getReferId)); 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())); record.setFinancialReviewer(financialReviewerMap.get(record.getId()));
}); });
...@@ -125,11 +127,20 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp ...@@ -125,11 +127,20 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
.eq(CostReviewer::getType, CostReviewer.hrReviewer)); .eq(CostReviewer::getType, CostReviewer.hrReviewer));
Map<Integer, List<CostReviewer>> htReviewerMap = hrCostReviewerList.stream().collect(Collectors.groupingBy(CostReviewer::getReferId)); 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())); 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; return page;
} }
...@@ -240,13 +251,26 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp ...@@ -240,13 +251,26 @@ public class CostCompanyServiceImpl extends ServiceImpl<CostCompanyDao, CostComp
} }
@Override @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 @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 @@ ...@@ -51,7 +51,11 @@
FROM cost_company FROM cost_company
</select> </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 select t1.* from cost_company t1
<if test="req.financialReviewerUserId !=null"> <if test="req.financialReviewerUserId !=null">
left join cost_reviewer t2 on t1.id = t2.refer_id and t2.type = 2 left join cost_reviewer t2 on t1.id = t2.refer_id and t2.type = 2
...@@ -60,7 +64,7 @@ ...@@ -60,7 +64,7 @@
left join cost_reviewer t3 on t1.id = t3.refer_id and t3.type = 3 left join cost_reviewer t3 on t1.id = t3.refer_id and t3.type = 3
</if> </if>
<if test="req.hrReviewerUserId !=null"> <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> </if>
where true where true
/*财务审核人*/ /*财务审核人*/
...@@ -73,6 +77,48 @@ ...@@ -73,6 +77,48 @@
</if> </if>
/*行政审核人*/ /*行政审核人*/
<if test="req.hrReviewerUserId !=null"> <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} and t3.reviewer_user_id =#{req.hrReviewerUserId}
</if> </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