| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- package cn.com.goldenwater.dcproj.service.impl.plansd;
- import cn.com.goldenwater.core.service.AbstractCrudService;
- import cn.com.goldenwater.dcproj.dao.AttAdBaseDao;
- import cn.com.goldenwater.dcproj.dao.AttInspTypeDao;
- import cn.com.goldenwater.dcproj.dao.BisInspAllDao;
- import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlanDpDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlanDtlAddvcdDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlanDtlDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlanDtlPtypDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlanYearDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPlandpRlDao;
- import cn.com.goldenwater.dcproj.dto.BisInspPlanDtlDto;
- import cn.com.goldenwater.dcproj.model.AttAdBase;
- import cn.com.goldenwater.dcproj.model.AttInspType;
- import cn.com.goldenwater.dcproj.model.BisInspAll;
- import cn.com.goldenwater.dcproj.model.BisInspPlan;
- import cn.com.goldenwater.dcproj.model.BisInspPlanDp;
- import cn.com.goldenwater.dcproj.model.BisInspPlanDtl;
- import cn.com.goldenwater.dcproj.model.BisInspPlanDtlAddvcd;
- import cn.com.goldenwater.dcproj.model.BisInspPlanDtlPtyp;
- import cn.com.goldenwater.dcproj.model.BisInspPlanYear;
- import cn.com.goldenwater.dcproj.model.BisInspPlandpRl;
- import cn.com.goldenwater.dcproj.model.OlBisInspOrg;
- import cn.com.goldenwater.dcproj.param.AttInspTypeParam;
- import cn.com.goldenwater.dcproj.param.BisInspAllParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlanDpParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlanDtlAddvcdParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlanDtlParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlanDtlPtypParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlanYearParam;
- import cn.com.goldenwater.dcproj.param.BisInspPlandpRlParam;
- import cn.com.goldenwater.dcproj.service.AttAdBaseService;
- import cn.com.goldenwater.dcproj.service.BisInspPlanDpService;
- import cn.com.goldenwater.dcproj.service.BisInspPlanDtlService;
- import cn.com.goldenwater.dcproj.service.BisInspPlanService;
- import cn.com.goldenwater.dcproj.service.BisInspPlandpRlService;
- import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
- import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
- import cn.com.goldenwater.dcproj.utils.Constant;
- import cn.com.goldenwater.dcproj.utils.StringUtils;
- import cn.com.goldenwater.id.util.UuidUtil;
- import org.apache.commons.collections.CollectionUtils;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.CellStyle;
- import org.apache.poi.ss.usermodel.HorizontalAlignment;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.VerticalAlignment;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.servlet.http.HttpServletResponse;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.URLEncoder;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- import java.util.Optional;
- import java.util.Set;
- import java.util.stream.Collectors;
- /**
- * @author hjp
- * @date 2022-8-9
- */
- @Service
- @Transactional(rollbackFor = Exception.class)
- public class BisInspPlanDtlServiceImpl extends AbstractCrudService<BisInspPlanDtl, BisInspPlanDtlParam> implements BisInspPlanDtlService {
- @Value("${export.templatePath}")
- private String templatePath;
- @Autowired
- private BisInspPlanDtlDao bisInspPlanDtlDao;
- @Autowired
- private BisInspPlanDtlAddvcdDao bisInspPlanDtlAddvcdDao;
- @Autowired
- private BisInspPlanDtlPtypDao bisInspPlanDtlPtypDao;
- @Autowired
- private BisInspPlandpRlDao bisInspPlandpRlDao;
- @Autowired
- private AttAdBaseDao attAdBaseDao;
- @Autowired
- private AttInspTypeDao attInspTypeDao;
- @Autowired
- private BisInspPlanDpDao bisInspPlanDpDao;
- @Autowired
- private BisInspPlanService bisInspPlanService;
- @Autowired
- private OlBisInspOrgService olBisInspOrgService;
- @Autowired
- private BisInspAllDao bisInspAllDao;
- @Autowired
- private BisInspPlanYearDao bisInspPlanYearDao;
- @Autowired
- private BisInspAllRlationPersDao bisInspAllRlationPersDao;
- @Autowired
- private BisInspPlanDpService bisInspPlanDpService;
- @Autowired
- private BisInspPlandpRlService bisInspPlandpRlService;
- @Autowired
- private AttAdBaseService attAdBaseService;
- private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
- public BisInspPlanDtlServiceImpl(BisInspPlanDtlDao bisInspPlanDtlDao) {
- super(bisInspPlanDtlDao);
- this.bisInspPlanDtlDao = bisInspPlanDtlDao;
- }
- @Override
- public int insert(BisInspPlanDtl bisInspPlanDtl) {
- String uuid = UuidUtil.uuid(); // 生成uuid
- bisInspPlanDtl.setId(uuid);
- bisInspPlanDtl.setIntm(new Date());
- bisInspPlanDtl.setUptm(new Date());
- bisInspPlanDtl.setDataStat("0");
- return this.bisInspPlanDtlDao.insert(bisInspPlanDtl);
- }
- @Override
- public int update(BisInspPlanDtl bisInspPlanDtl) {
- bisInspPlanDtl.setUptm(new Date());
- return this.bisInspPlanDtlDao.update(bisInspPlanDtl);
- }
- @Override
- public int delete(String id) {
- return this.bisInspPlanDtlDao.delete(id);
- }
- /**
- * 针对 分解表的子表数据进行更新处理
- *
- * @param bisInspPlanDtlDto 对象
- */
- @Override
- public void updatePostProcessing(BisInspPlanDtlDto bisInspPlanDtlDto) {
- //清空
- bisInspPlanDtlPtypDao.deleteBy(new BisInspPlanDtlPtypParam(bisInspPlanDtlDto.getId()));
- bisInspPlanDtlAddvcdDao.deleteBy(new BisInspPlanDtlAddvcdParam(bisInspPlanDtlDto.getId()));
- bisInspPlandpRlDao.deleteBy(new BisInspPlandpRlParam(bisInspPlanDtlDto.getPlanId(), Constant.STRING_ONE));
- //开展检查实施处室(单位)
- List<String> rlIds = bisInspPlanDtlDto.getPlanDpRlIds();
- //自定义 开展检查实施处室(单位) 添加
- String planDpRlNames = bisInspPlanDtlDto.getPlanDpRlNames();
- Map<String,BisInspPlandpRl> rlList = new HashMap<>();
- if (CollectionUtils.isNotEmpty(rlIds)) {
- for (String planDpId : rlIds) {
- rlList.put(planDpId + "-" + Constant.STRING_ONE, new BisInspPlandpRl(bisInspPlanDtlDto.getId(), planDpId, Constant.STRING_ONE, bisInspPlanDtlDto.getPersId()));
- }
- }
- if (StringUtils.isNotBlank(planDpRlNames)){
- Set<String> dpRlNames = Arrays.stream(StringUtils.split(planDpRlNames, ",")).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
- String province = AdLevelUtil.getAddvcd(olBisInspOrgService.getRlProvince(bisInspPlanDtlDto.getOrgId()));
- List<BisInspPlanDp> list = new ArrayList<>();
- dpRlNames.forEach(dpRlName -> list.add(new BisInspPlanDp(dpRlName, Constant.STRING_TWO, bisInspPlanDtlDto.getPersId(), province)));
- if(list.size()>0){
- bisInspPlanDpService.batchInsert(list);
- }
- if (CollectionUtils.isNotEmpty(list)) {
- list.forEach(dp -> {
- rlList.put(dp.getId() + "-" + Constant.STRING_ZERO, new BisInspPlandpRl(bisInspPlanDtlDto.getPlanId(), dp.getId(), Constant.STRING_ZERO, bisInspPlanDtlDto.getPersId()));
- rlList.put(dp.getId() + "-" + Constant.STRING_ONE, new BisInspPlandpRl(bisInspPlanDtlDto.getPlanId(), dp.getId(), Constant.STRING_ONE, bisInspPlanDtlDto.getPersId()));
- });
- }
- }
- if (rlList.size() > 0) {
- bisInspPlandpRlService.batchInsert(new ArrayList<>(rlList.values()));
- }
- //检查行政区
- List<String> dAdCodes = bisInspPlanDtlDto.getdAdCodes();
- if (CollectionUtils.isNotEmpty(dAdCodes)) {
- List<BisInspPlanDtlAddvcd> list = new ArrayList<>();
- for (String dAdCode : dAdCodes) {
- AttAdBase byAdcode = attAdBaseDao.getByAdcode(dAdCode);
- if (Objects.nonNull(byAdcode)) {
- //更新
- list.add(new BisInspPlanDtlAddvcd(bisInspPlanDtlDto.getId(), byAdcode.getAdCode(), byAdcode.getAdName(), byAdcode.getAdGrad(), bisInspPlanDtlDto.getPersId()));
- }
- }
- if(list.size()>0){
- bisInspPlanDtlAddvcdDao.batchInsert(list);
- }
- }
- //督查类型
- if (StringUtils.equals(Constant.STRING_ONE, bisInspPlanDtlDto.getOnlineChk())) {
- Set<String> ptypIds = new HashSet<>(bisInspPlanDtlDto.getPtypIds());
- if (CollectionUtils.isNotEmpty(ptypIds)) {
- List<AttInspType> typeList = attInspTypeDao.findList(new AttInspTypeParam());
- List<BisInspPlanDtlPtyp> list = new ArrayList<>();
- for (String ptypId : ptypIds) {
- AttInspType attInspType = typeList.stream().filter(t -> StringUtils.equals(t.getCode(), ptypId)).findAny().orElse(null);
- if (Objects.nonNull(attInspType)) {
- //更新
- list.add(new BisInspPlanDtlPtyp(bisInspPlanDtlDto.getId(), attInspType.getName(), attInspType.getCode(), bisInspPlanDtlDto.getPersId()));
- }
- }
- if (CollectionUtils.isNotEmpty(list)){
- bisInspPlanDtlPtypDao.batchInsert(list);
- Calendar calendar = Calendar.getInstance();
- BisInspPlanYear planYear = bisInspPlanYearDao.get(bisInspPlanDtlDto.getPlanId());
- if (Objects.isNull(planYear)){
- return;
- }
- String batchName = calendar.get(Calendar.YEAR) + "年" + (StringUtils.isBlank(planYear.getChkName()) ? "" : planYear.getChkName()) + "督查";
- //创建批次
- for (BisInspPlanDtlPtyp ptyp : list) {
- AttInspType by = attInspTypeDao.get(ptyp.getPtype());
- if (Objects.isNull(by)){
- continue;
- }
- BisInspPlan bisInspPlan = new BisInspPlan();
- bisInspPlan.setGuid(by.getCode() + bisInspPlanDtlDto.getOrgId());
- bisInspPlan.setPrsnTitle(batchName);
- //判断父级节点下有创建好的批次就无需创建
- BisInspAllParam bisInspAllParam = new BisInspAllParam();
- bisInspAllParam.setId(bisInspPlan.getGuid());
- bisInspAllParam.setPnm(batchName);
- bisInspAllParam.setIsPlan(Constant.STRING_ONE);
- List<BisInspAll> eList = bisInspAllDao.findList(bisInspAllParam);
- if (eList != null && eList.size() > 0){
- continue;
- }
- bisInspPlan.setLeadDep(null);
- bisInspPlan.setPalnSttm(bisInspPlanDtlDto.getStTm());
- bisInspPlan.setPalnEntm(bisInspPlanDtlDto.getEnTm());
- bisInspPlan.setChkType(null);
- bisInspPlan.setChkForm(null);
- bisInspPlan.setIsPlan(Constant.STRING_ONE);
- bisInspPlan.setYearTaskId(bisInspPlanDtlDto.getId());
- bisInspPlan.setOrgId(bisInspPlanDtlDto.getOrgId());
- bisInspPlan.setProvince(olBisInspOrgService.getProvince(bisInspPlanDtlDto.getOrgId()));
- OlBisInspOrg olBisInspOrg = olBisInspOrgService.get(bisInspPlanDtlDto.getOrgId());
- Optional.ofNullable(olBisInspOrg).ifPresent(o -> bisInspPlan.setOrgName(o.getOrgNm()));
- Optional.ofNullable(bisInspAllRlationPersDao.get(bisInspPlanDtlDto.getPersId())).ifPresent(b -> bisInspPlan.setPlanDpId(b.getPlanDpId()));
- bisInspPlanService.addBisInspPlan(bisInspPlan);
- }
- }
- }
- }
- }
- @Override
- public List<BisInspPlanDtlDto> findDtlList(BisInspPlanDtlParam param) {
- List<BisInspPlanDtlDto> list = bisInspPlanDtlDao.findDtlList(param);
- if (CollectionUtils.isNotEmpty(list)) {
- List<BisInspPlanDp> dpList = bisInspPlanDpDao.findList(new BisInspPlanDpParam());
- list.forEach(l -> {
- //检查行政区
- Optional.ofNullable(bisInspPlanDtlAddvcdDao.findList(new BisInspPlanDtlAddvcdParam(l.getId()))).ifPresent(a -> {
- l.setdAdName(a.stream().map(BisInspPlanDtlAddvcd::getAdName).collect(Collectors.joining(",")));
- l.setdAdCodes(a.stream().map(m->m.getAdCode().substring(0,4)).collect(Collectors.toList()));
- // l.setdAdCodes(a.stream().map(BisInspPlanDtlAddvcd::getAdCode).collect(Collectors.toList()));
- });
- //督查类型
- Optional.ofNullable(bisInspPlanDtlPtypDao.findList(new BisInspPlanDtlPtypParam(l.getId()))).ifPresent(b -> {
- l.setpTypeNames(b.stream().map(BisInspPlanDtlPtyp::getNm).collect(Collectors.joining(",")));
- l.setPtypIds(b.stream().map(BisInspPlanDtlPtyp::getPtype).collect(Collectors.toList()));
- });
- //参加处室(单位)
- Optional.ofNullable(bisInspPlandpRlDao.findByPlanDpIdList(new BisInspPlandpRlParam(l.getPlanId(), Constant.STRING_ONE))).ifPresent(c -> {
- l.setPlanJoinDpRlNames(dpList.stream().filter(dp -> c.stream().anyMatch(id -> Objects.equals(dp.getId(), id))).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
- l.setPlanJoinDpRlIds(c);
- });
- //开展检查实施处室(单位)
- Optional.ofNullable(bisInspPlandpRlDao.findByPlanDpIdList(new BisInspPlandpRlParam(l.getId(), Constant.STRING_ONE))).ifPresent(c -> {
- l.setPlanDpRlNames(dpList.stream().filter(dp -> c.stream().anyMatch(id -> Objects.equals(dp.getId(), id))).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
- l.setPlanDpRlIds(c);
- });
- //是否重复 true 重复 false 没重复
- if (CollectionUtils.isNotEmpty(l.getdAdCodes()) && Objects.nonNull(l.getStTm()) && Objects.nonNull(l.getEnTm())) {
- l.setItRedundant(CollectionUtils.isNotEmpty(
- bisInspPlanDtlAddvcdDao.getByAdCodeAndTm(l.getdAdCodes().stream().collect(Collectors.joining("','", "'", "'")),
- l.getStTm(),
- l.getEnTm()
- )));
- }
- //是否重复 true 重复 false 没重复
- // if (CollectionUtils.isNotEmpty(l.getdAdCodes()) && Objects.nonNull(l.getChkName()) && Objects.nonNull(l.getEnTm())) {
- // l.setItRedundant(CollectionUtils.isNotEmpty(
- // bisInspPlanDtlAddvcdDao.getByAdCodeAnd(l.getdAdCodes().stream().collect(Collectors.joining("','", "'", "'")),
- // l.getChkName(),
- // l.getEnTm()
- // )));
- // }
- });
- }
- if (CollectionUtils.isNotEmpty(list)){
- //过滤
- if (StringUtils.isNotBlank(param.getIsItRedundant())){
- list = list.stream().filter(l -> l.getItRedundant() == StringUtils.equals(param.getIsItRedundant(),Constant.STRING_ONE)).collect(Collectors.toList());
- }
- // 过滤 牵头处室(单位) add lxf 2022/10/25
- if(StringUtils.isNotBlank(param.getLeadDepId())){
- BisInspPlanYearParam bisInspPlanYearParam = new BisInspPlanYearParam();
- bisInspPlanYearParam.setLeadDepId(param.getLeadDepId());
- List<BisInspPlanYear> inspPlanYearList = bisInspPlanYearDao.findList(bisInspPlanYearParam);
- if(null != inspPlanYearList){
- List<String> idList = inspPlanYearList.stream().map(m -> m.getId()).collect(Collectors.toList());
- list = list.stream().filter( l -> idList.contains(l.getPlanId()) ).collect(Collectors.toList());
- }
- }
- }
- return list;
- }
- @Override
- public void export(HttpServletResponse response, BisInspPlanDtlParam bisInspPlanDtlParam) {
- String templateFilePath = templatePath + File.separator + "planDtlCheckSd.xls";
- File file = new File(templateFilePath);
- if (file.exists()) {
- try {
- InputStream inputStream = new FileInputStream(file);
- Workbook workbook = WorkbookFactory.create(inputStream);
- exportFile(workbook, bisInspPlanDtlParam);
- writeToResponse(response, workbook, "山东详细检查计划.xls");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- private void exportFile(Workbook xssfWorkbook, BisInspPlanDtlParam bisInspPlanDtlParam) {
- List<BisInspPlanDtlDto> list = findDtlList(bisInspPlanDtlParam);
- Sheet sheet = xssfWorkbook.getSheetAt(0);
- String title = "详细检查计划";
- if (bisInspPlanDtlParam.getChkYear() != null ) {
- if(null != bisInspPlanDtlParam.getMonthStr() && "".equals(bisInspPlanDtlParam.getMonthStr())){
- title = bisInspPlanDtlParam.getChkYear() +"年"+ String.valueOf(Integer.parseInt(bisInspPlanDtlParam.getMonthStr()))+"月"+ title;
- }else{
- title = bisInspPlanDtlParam.getChkYear() +"年" + title;
- }
- }
- CellStyle styleContent = xssfWorkbook.createCellStyle();
- styleContent.setAlignment(HorizontalAlignment.CENTER);
- styleContent.setVerticalAlignment(VerticalAlignment.CENTER);
- setCellValue(sheet, 0, 1, title);
- if (list != null && list.size() > 0) {
- for (int i = 0; i < list.size(); i++) {
- Row row = sheet.createRow(3 + i);
- int cols = 16;
- for (int j = 0; j <= cols; j++) {
- Cell cell = row.createCell(j);
- cell.setCellStyle(styleContent);
- }
- }
- for (int i = 0; i < list.size(); i++) {
- BisInspPlanDtlDto planDtlDto = list.get(i);
- setAllCell(sheet, i, planDtlDto);
- }
- }
- }
- private void setAllCell(Sheet sheet, int i, BisInspPlanDtlDto planDtlDto) {
- setCellValue(sheet, 3 + i, 0, String.valueOf(i+1));
- setCellValue(sheet, 3 + i, 1, String.valueOf(planDtlDto.getChkYear()));
- AttAdBase byAdcode = attAdBaseService.getByAdcode(planDtlDto.getDdAdCode());
- setCellValue(sheet, 3 + i, 2, byAdcode.getAdName());
- setCellValue(sheet, 3 + i, 3, byAdcode.getLabelFromAdGrad());
- setCellValue(sheet, 3 + i, 4, planDtlDto.getChkName());
- setCellValue(sheet, 3 + i, 5, planDtlDto.getNm());
- setCellValue(sheet, 3 + i, 6, planDtlDto.getChkContent());
- setCellValue(sheet, 3 + i, 7, simpleDateFormat.format(planDtlDto.getStTm()));
- setCellValue(sheet, 3 + i, 8, simpleDateFormat.format(planDtlDto.getEnTm()));
- setCellValue(sheet, 3 + i, 9, String.valueOf(null == planDtlDto.getChkPrjSize() ? 0:planDtlDto.getChkPrjSize()));
- setCellValue(sheet, 3 + i, 10, planDtlDto.getDpName());
- setCellValue(sheet, 3 + i, 11, planDtlDto.getPlanJoinDpRlNames());
- setCellValue(sheet, 3 + i, 12, planDtlDto.getPlanDpRlNames());
- setCellValue(sheet, 3 + i, 13, planDtlDto.getChkType());
- setCellValue(sheet, 3 + i, 14, "1".equals(planDtlDto.getOnlineChk())?"线上(水利监督信息系统)":"线下");
- setCellValue(sheet, 3 + i, 15, null == planDtlDto.getItRedundant()? "否":planDtlDto.getItRedundant()?"是":"否");
- setCellValue(sheet, 3 + i, 16, planDtlDto.getNote());
- }
- private void setCellValue(Sheet sheet, int rownum, int cellnum, String value) {
- Cell cell = sheet.getRow(rownum).getCell(cellnum);
- cell.setCellValue(value);
- }
- private void writeToResponse(HttpServletResponse response, Workbook workbook, String name) throws IOException {
- // 修改模板内容导出新模板
- response.setContentType("application/x-msdownload");
- String fileNameURL = URLEncoder.encode(name, "UTF-8");
- response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
- OutputStream out = response.getOutputStream();
- workbook.write(out);
- out.flush();
- out.close();
- }
- }
|