38 changed files with 1510 additions and 271 deletions
			
			
		| @ -0,0 +1,102 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.dto.screen; | |||
| 
 | |||
| import lombok.Data; | |||
| 
 | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| 
 | |||
| 
 | |||
| /** | |||
|  * 项目所属分类表 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-11-10 | |||
|  */ | |||
| @Data | |||
| public class ScreenProjectCategoryDTO implements Serializable { | |||
| 
 | |||
|     private static final long serialVersionUID = 1L; | |||
| 
 | |||
|     /** | |||
|      * 主键 | |||
|      */ | |||
| 	private String id; | |||
| 
 | |||
|     /** | |||
|      * 客户id | |||
|      */ | |||
| 	private String customerId; | |||
| 
 | |||
|     /** | |||
|      * 项目id | |||
|      */ | |||
| 	private String projectId; | |||
| 
 | |||
|     /** | |||
|      * 分类编码 | |||
|      */ | |||
| 	private String categoryCode; | |||
| 
 | |||
|     /** | |||
|      * 所属父类分类编码 | |||
|      */ | |||
| 	private String parentCategoryCode; | |||
| 
 | |||
|     /** | |||
|      * 原始分类编码 | |||
|      */ | |||
| 	private String originCategoryCode; | |||
| 
 | |||
|     /** | |||
|      * 分类等级:1、2....;产品目前只有2级分类 | |||
|      */ | |||
| 	private Integer level; | |||
| 
 | |||
|     /** | |||
|      * 删除标识 0未删除;1已删除 | |||
|      */ | |||
| 	private String delFlag; | |||
| 
 | |||
|     /** | |||
|      * 乐观锁 | |||
|      */ | |||
| 	private Integer revision; | |||
| 
 | |||
|     /** | |||
|      * 创建人 | |||
|      */ | |||
| 	private String createdBy; | |||
| 
 | |||
|     /** | |||
|      * 创建时间 | |||
|      */ | |||
| 	private Date createdTime; | |||
| 
 | |||
|     /** | |||
|      * 更新人 | |||
|      */ | |||
| 	private String updatedBy; | |||
| 
 | |||
|     /** | |||
|      * 更新时间 | |||
|      */ | |||
| 	private Date updatedTime; | |||
| 
 | |||
| } | |||
| @ -0,0 +1,76 @@ | |||
| package com.epmet.dto.screen.result; | |||
| 
 | |||
| import com.epmet.commons.tools.constant.NumConstant; | |||
| import lombok.Data; | |||
| 
 | |||
| import java.io.Serializable; | |||
| 
 | |||
| /** | |||
|  * @Author zxc | |||
|  * @DateTime 2021/11/10 10:36 上午 | |||
|  * @DESC | |||
|  */ | |||
| @Data | |||
| public class GridAndOrgCategoryCountResultDTO implements Serializable { | |||
| 
 | |||
|     private static final long serialVersionUID = -5167964547464983118L; | |||
| 
 | |||
|     /** | |||
|      * 组织ID | |||
|      */ | |||
|     private String orgId; | |||
| 
 | |||
|     /** | |||
|      * 组织类型 | |||
|      */ | |||
|     private String orgType; | |||
| 
 | |||
|     /** | |||
|      * 网格ID | |||
|      */ | |||
|     private String gridId; | |||
| 
 | |||
|     /** | |||
|      * 上级组织ID | |||
|      */ | |||
|     private String pid; | |||
| 
 | |||
|     /** | |||
|      * 所有上级组织ID | |||
|      */ | |||
|     private String pids; | |||
| 
 | |||
|     private String dateId; | |||
| 
 | |||
|     private String customerId; | |||
| 
 | |||
|     private String categoryOriginCustomerId; | |||
| 
 | |||
|     /** | |||
|      * 分类CODE | |||
|      */ | |||
|     private String categoryCode; | |||
| 
 | |||
|     /** | |||
|      * 分类CODE级别 | |||
|      */ | |||
|     private Integer level; | |||
| 
 | |||
|     /** | |||
|      * 项目总数 | |||
|      */ | |||
|     private Integer projectTotal; | |||
| 
 | |||
|     /** | |||
|      * 关闭【结案】项目总数 | |||
|      */ | |||
|     private Integer closedProjectTotal; | |||
| 
 | |||
|     public GridAndOrgCategoryCountResultDTO() { | |||
|         this.orgId = ""; | |||
|         this.categoryCode = ""; | |||
|         this.level = NumConstant.ZERO; | |||
|         this.projectTotal = NumConstant.ZERO; | |||
|         this.closedProjectTotal = NumConstant.ZERO; | |||
|     } | |||
| } | |||
| @ -0,0 +1,36 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.dao.evaluationindex.screen; | |||
| 
 | |||
| import com.epmet.commons.mybatis.dao.BaseDao; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| 
 | |||
| import java.util.List; | |||
| 
 | |||
| /** | |||
|  * 项目所属分类表 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-11-10 | |||
|  */ | |||
| @Mapper | |||
| public interface ScreenProjectCategoryDao extends BaseDao<ScreenProjectCategoryEntity> { | |||
| 	void deleteByProjectIds(@Param("customerId") String customerId, @Param("projectIds") List<String> projectIds); | |||
| } | |||
| @ -0,0 +1,68 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.entity.evaluationindex.screen; | |||
| 
 | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.epmet.commons.mybatis.entity.BaseEpmetEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| 
 | |||
| /** | |||
|  * 项目所属分类表 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-11-10 | |||
|  */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper=false) | |||
| @TableName("screen_project_category") | |||
| public class ScreenProjectCategoryEntity extends BaseEpmetEntity { | |||
| 
 | |||
| 	private static final long serialVersionUID = 1L; | |||
| 
 | |||
|     /** | |||
|      * 客户id | |||
|      */ | |||
| 	private String customerId; | |||
| 
 | |||
|     /** | |||
|      * 项目id | |||
|      */ | |||
| 	private String projectId; | |||
| 
 | |||
|     /** | |||
|      * 分类编码 | |||
|      */ | |||
| 	private String categoryCode; | |||
| 
 | |||
|     /** | |||
|      * 所属父类分类编码 | |||
|      */ | |||
| 	private String parentCategoryCode; | |||
| 
 | |||
|     /** | |||
|      * 原始分类编码 | |||
|      */ | |||
| 	private String originCategoryCode; | |||
| 
 | |||
|     /** | |||
|      * 分类等级:1、2....;产品目前只有2级分类 | |||
|      */ | |||
| 	private Integer level; | |||
| 
 | |||
| } | |||
| @ -0,0 +1,34 @@ | |||
| package com.epmet.service.evaluationindex.screen; | |||
| 
 | |||
| import com.epmet.commons.mybatis.service.BaseService; | |||
| import com.epmet.commons.tools.page.PageData; | |||
| import com.epmet.dto.screen.ScreenProjectCategoryOrgDailyDTO; | |||
| import com.epmet.dto.screencoll.ScreenCollFormDTO; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryOrgDailyEntity; | |||
| 
 | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| 
 | |||
| /** | |||
|  * 项目(事件)分类按 网格——组织——按天统计 | |||
|  */ | |||
| public interface ScreenProjectCategoryGridAndOrgDailyService { | |||
| 
 | |||
|     /** | |||
|      * @Description  分类下的项目数【grid】 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 10:23 上午 | |||
|      */ | |||
|     void extractCategoryProjectGridData(String customerId, String dateId); | |||
| 
 | |||
|     /** | |||
|      * @Description  分类下的项目数【org】 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 10:23 上午 | |||
|      */ | |||
|     void extractCategoryProjectOrgData(String customerId, String dateId); | |||
| } | |||
| @ -0,0 +1,105 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.service.evaluationindex.screen; | |||
| 
 | |||
| import com.epmet.commons.mybatis.service.BaseService; | |||
| import com.epmet.commons.tools.page.PageData; | |||
| import com.epmet.dto.screen.ScreenProjectCategoryDTO; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryEntity; | |||
| 
 | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| 
 | |||
| /** | |||
|  * 项目所属分类表 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-11-10 | |||
|  */ | |||
| public interface ScreenProjectCategoryService extends BaseService<ScreenProjectCategoryEntity> { | |||
| 
 | |||
|     /** | |||
|      * 默认分页 | |||
|      * | |||
|      * @param params | |||
|      * @return PageData<ScreenProjectCategoryDTO> | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     PageData<ScreenProjectCategoryDTO> page(Map<String, Object> params); | |||
| 
 | |||
|     /** | |||
|      * 默认查询 | |||
|      * | |||
|      * @param params | |||
|      * @return java.util.List<ScreenProjectCategoryDTO> | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     List<ScreenProjectCategoryDTO> list(Map<String, Object> params); | |||
| 
 | |||
|     /** | |||
|      * 单条查询 | |||
|      * | |||
|      * @param id | |||
|      * @return ScreenProjectCategoryDTO | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     ScreenProjectCategoryDTO get(String id); | |||
| 
 | |||
|     /** | |||
|      * 默认保存 | |||
|      * | |||
|      * @param dto | |||
|      * @return void | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     void save(ScreenProjectCategoryDTO dto); | |||
| 
 | |||
|     /** | |||
|      * 默认更新 | |||
|      * | |||
|      * @param dto | |||
|      * @return void | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     void update(ScreenProjectCategoryDTO dto); | |||
| 
 | |||
|     /** | |||
|      * 批量删除 | |||
|      * | |||
|      * @param ids | |||
|      * @return void | |||
|      * @author generator | |||
|      * @date 2021-11-10 | |||
|      */ | |||
|     void delete(String[] ids); | |||
| 
 | |||
|     /** | |||
|      * 删除项目分类 | |||
|      * @Param customerId | |||
|      * @Param projectIds | |||
|      * @Return | |||
|      * @Author zhaoqifeng | |||
|      * @Date 2021/11/10 11:06 | |||
|      */ | |||
|     void deleteByProjectId(String customerId, List<String> projectIds); | |||
| } | |||
| @ -0,0 +1,229 @@ | |||
| package com.epmet.service.evaluationindex.screen.impl; | |||
| 
 | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.epmet.commons.dynamic.datasource.annotation.DataSource; | |||
| import com.epmet.commons.tools.constant.NumConstant; | |||
| import com.epmet.commons.tools.utils.ConvertUtils; | |||
| import com.epmet.constant.DataSourceConstant; | |||
| import com.epmet.constant.PingYinConstant; | |||
| import com.epmet.constant.ProjectConstant; | |||
| import com.epmet.dao.evaluationindex.screen.ScreenCustomerAgencyDao; | |||
| import com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryGridDailyDao; | |||
| import com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryOrgDailyDao; | |||
| import com.epmet.dao.evaluationindex.screen.ScreenProjectDataDao; | |||
| import com.epmet.dto.screen.ScreenProjectOrgDailyDTO; | |||
| import com.epmet.dto.screen.result.GridAndOrgCategoryCountResultDTO; | |||
| import com.epmet.entity.crm.CustomerRelationEntity; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryGridDailyEntity; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryOrgDailyEntity; | |||
| import com.epmet.service.crm.CustomerRelationService; | |||
| import com.epmet.service.evaluationindex.screen.ScreenProjectCategoryGridAndOrgDailyService; | |||
| import com.epmet.service.evaluationindex.screen.ScreenProjectCategoryGridDailyService; | |||
| import com.epmet.service.evaluationindex.screen.ScreenProjectCategoryOrgDailyService; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.collections4.CollectionUtils; | |||
| import org.apache.commons.collections4.ListUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| 
 | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| 
 | |||
| /** | |||
|  * @Author zxc | |||
|  * @DateTime 2021/11/10 10:25 上午 | |||
|  * @DESC | |||
|  */ | |||
| @Service | |||
| @DataSource(DataSourceConstant.EVALUATION_INDEX) | |||
| @Slf4j | |||
| public class ScreenProjectCategoryGridAndOrgDailyServiceImpl implements ScreenProjectCategoryGridAndOrgDailyService{ | |||
| 
 | |||
|     @Autowired | |||
|     private ScreenProjectDataDao screenProjectDataDao; | |||
|     @Autowired | |||
|     private CustomerRelationService relationService; | |||
|     @Autowired | |||
|     private ScreenProjectCategoryGridDailyDao gridDailyDao; | |||
|     @Autowired | |||
|     private ScreenProjectCategoryGridDailyService gridDailyService; | |||
|     @Autowired | |||
|     private ScreenProjectCategoryOrgDailyService orgDailyService; | |||
|     @Autowired | |||
|     private ScreenProjectCategoryOrgDailyDao orgDailyDao; | |||
|     @Autowired | |||
|     private ScreenCustomerAgencyDao screenCustomerAgencyDao; | |||
| 
 | |||
|     /** | |||
|      * @Description  分类下的项目数【grid】 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 10:23 上午 | |||
|      */ | |||
|     @Override | |||
|     public void extractCategoryProjectGridData(String customerId, String dateId) { | |||
|         log.info("开始执行网格项目分类统计"); | |||
|         long start = System.currentTimeMillis(); | |||
|         List<CustomerRelationEntity> relationInfo = relationService.selectSubCustomer(customerId); | |||
|         List<String> customerIds = new ArrayList<>(); | |||
|         customerIds.add(customerId); | |||
|         List<GridAndOrgCategoryCountResultDTO> allList = new ArrayList<>(); | |||
|         List<GridAndOrgCategoryCountResultDTO> closedList = new ArrayList<>(); | |||
|         if (CollectionUtils.isEmpty(relationInfo)){ | |||
|             // 单客户
 | |||
|             allList = screenProjectDataDao.selectGridCategoryProjectCount(dateId, customerId, ProjectConstant.PROJECT_STATUS_ALL,customerId, NumConstant.FOUR); | |||
|             closedList = screenProjectDataDao.selectGridCategoryProjectCount(dateId, customerId, ProjectConstant.PROJECT_STATUS_CLOSED,customerId, NumConstant.FOUR); | |||
|         }else { | |||
|             // 多客户
 | |||
|             List<String> subCustomerIds = relationInfo.stream().map(CustomerRelationEntity::getCustomerId).collect(Collectors.toList()); | |||
|             customerIds.addAll(subCustomerIds); | |||
|             List<GridAndOrgCategoryCountResultDTO> finalAllList = allList; | |||
|             List<GridAndOrgCategoryCountResultDTO> finalClosedList1 = closedList; | |||
|             customerIds.forEach(c -> { | |||
|                 List<GridAndOrgCategoryCountResultDTO> all = screenProjectDataDao.selectGridCategoryProjectCount(dateId, customerId, ProjectConstant.PROJECT_STATUS_ALL, c, NumConstant.TWO); | |||
|                 finalAllList.addAll(all); | |||
|                 List<GridAndOrgCategoryCountResultDTO> closed = screenProjectDataDao.selectGridCategoryProjectCount(dateId, customerId, ProjectConstant.PROJECT_STATUS_CLOSED, c, NumConstant.TWO); | |||
|                 finalClosedList1.addAll(closed); | |||
|             }); | |||
|         } | |||
|         List<GridAndOrgCategoryCountResultDTO> finalClosedList = closedList; | |||
|         allList.forEach(a -> finalClosedList.stream().filter(c -> c.getGridId().equals(a.getGridId()) && c.getCategoryCode().equals(a.getCategoryCode())).forEach(c -> a.setClosedProjectTotal(c.getClosedProjectTotal()))); | |||
|         gridDel(customerId,dateId); | |||
|         log.info("网格-所有项目分类即将插入的集合{}",JSON.toJSONString(allList)); | |||
|         gridInsert(allList); | |||
|         long end = System.currentTimeMillis(); | |||
|         log.info("网格项目分类统计结束,耗时:"+ (end-start)/1000 + "s"); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description  项目分类网格删除 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 1:55 下午 | |||
|      */ | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void gridDel(String customerId,String dateId){ | |||
|         Integer num = NumConstant.ZERO; | |||
|         do { | |||
|             num = gridDailyDao.deleteByDateIdAndCustomerId(customerId, dateId); | |||
|         }while (num > NumConstant.ZERO && num == NumConstant.ONE_THOUSAND); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description  项目分类网格添加 | |||
|      * @param needInsert | |||
|      * @author zxc | |||
|      * @date 2021/11/10 1:55 下午 | |||
|      */ | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void gridInsert(List<GridAndOrgCategoryCountResultDTO> needInsert){ | |||
|         List<List<GridAndOrgCategoryCountResultDTO>> partition = ListUtils.partition(needInsert, NumConstant.ONE_HUNDRED); | |||
|         partition.forEach(p -> { | |||
|             gridDailyService.insertBatch(ConvertUtils.sourceToTarget(p,ScreenProjectCategoryGridDailyEntity.class)); | |||
|             log.info("插入的网格项目分类为" + JSON.toJSONString(p)); | |||
|         }); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description  分类下的项目数【org】 | |||
|      * 项目分类来源 | |||
|      * 本级【直接立项】 + 下级 + 直属网格 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 10:23 上午 | |||
|      */ | |||
|     @Override | |||
|     public void extractCategoryProjectOrgData(String customerId, String dateId) { | |||
|         log.info("开始执行组织项目分类统计"); | |||
|         long start = System.currentTimeMillis(); | |||
|         List<CustomerRelationEntity> relationInfo = relationService.selectSubCustomer(customerId); | |||
|         List<String> customerIds = new ArrayList<>(); | |||
|         customerIds.add(customerId); | |||
|         List<GridAndOrgCategoryCountResultDTO> result = new ArrayList<>(); | |||
|         if (CollectionUtils.isEmpty(relationInfo)){ | |||
|             // one customer
 | |||
|             List<ScreenProjectOrgDailyDTO> agencies = screenCustomerAgencyDao.selectAgencyByCustomer(customerId); | |||
|             if (CollectionUtils.isEmpty(agencies)){ | |||
|                 return; | |||
|             } | |||
|             List<GridAndOrgCategoryCountResultDTO> allAgencies = ConvertUtils.sourceToTarget(agencies, GridAndOrgCategoryCountResultDTO.class); | |||
| 
 | |||
|             result = screenProjectDataDao.selectOrgCategoryProjectCount(dateId, ProjectConstant.PROJECT_STATUS_ALL, customerId, NumConstant.FOUR, allAgencies); | |||
|             List<GridAndOrgCategoryCountResultDTO> closedList = screenProjectDataDao.selectOrgCategoryProjectCount(dateId, ProjectConstant.PROJECT_STATUS_CLOSED, customerId, NumConstant.FOUR, allAgencies); | |||
|             result.forEach(r -> closedList.stream().filter(c -> r.getOrgId().equals(c.getOrgId()) && r.getCategoryCode().equals(c.getCategoryCode())).forEach(c -> r.setClosedProjectTotal(c.getClosedProjectTotal()))); | |||
| 
 | |||
| 
 | |||
|             List<GridAndOrgCategoryCountResultDTO> oneLevelList = screenProjectDataDao.selectOrgCategoryOneLevelProjectCount(dateId, ProjectConstant.PROJECT_STATUS_ALL, customerId, NumConstant.FOUR, allAgencies); | |||
|             List<GridAndOrgCategoryCountResultDTO> oneLevelClosedList = screenProjectDataDao.selectOrgCategoryOneLevelProjectCount(dateId, ProjectConstant.PROJECT_STATUS_CLOSED, customerId, NumConstant.FOUR, allAgencies); | |||
|             oneLevelList.forEach(a -> oneLevelClosedList.stream().filter(c -> a.getOrgId().equals(c.getOrgId()) && a.getCategoryCode().equals(c.getCategoryCode())).forEach(c -> a.setClosedProjectTotal(c.getClosedProjectTotal()))); | |||
| 
 | |||
|             result.addAll(oneLevelList); | |||
|             }else { | |||
|             // more customers
 | |||
|             // 去除孔村的客户ID,孔村镇的单独查😡
 | |||
|             List<String> subCustomerIds = relationInfo.stream().map(CustomerRelationEntity::getCustomerId).collect(Collectors.toList()); | |||
|             for (int i = NumConstant.ZERO; i < subCustomerIds.size(); i++) { | |||
|                 if (subCustomerIds.get(i).equals(PingYinConstant.KONG_CUN_CUSTOMER_ID)){ | |||
|                     customerIds.remove(i); | |||
|                     continue; | |||
|                 } | |||
|             } | |||
|             subCustomerIds.add(customerId); | |||
|             List<GridAndOrgCategoryCountResultDTO> allAgencies = screenCustomerAgencyDao.selectParentSonAgency(subCustomerIds, PingYinConstant.KONG_CUN_CUSTOMER_ID); | |||
|             List<List<GridAndOrgCategoryCountResultDTO>> partition = ListUtils.partition(allAgencies, NumConstant.FIFTY); | |||
|             List<GridAndOrgCategoryCountResultDTO> allOrgCategoryList = result; | |||
|             partition.forEach(p -> { | |||
|                 List<GridAndOrgCategoryCountResultDTO> allOrgList = screenProjectDataDao.selectOrgCategoryProjectCount(dateId, ProjectConstant.PROJECT_STATUS_ALL, customerId, NumConstant.TWO, p); | |||
|                 List<GridAndOrgCategoryCountResultDTO> closedOrgList = screenProjectDataDao.selectOrgCategoryProjectCount(dateId, ProjectConstant.PROJECT_STATUS_CLOSED, customerId, NumConstant.TWO, p); | |||
|                 allOrgList.forEach(a -> closedOrgList.stream().filter(c -> a.getOrgId().equals(c.getOrgId()) && a.getCategoryCode().equals(c.getCategoryCode())).forEach(c -> a.setClosedProjectTotal(c.getClosedProjectTotal()))); | |||
| 
 | |||
|                 List<GridAndOrgCategoryCountResultDTO> oneLevelList = screenProjectDataDao.selectOrgCategoryOneLevelProjectCount(dateId, ProjectConstant.PROJECT_STATUS_ALL, customerId, NumConstant.TWO, p); | |||
|                 List<GridAndOrgCategoryCountResultDTO> oneLevelClosedList = screenProjectDataDao.selectOrgCategoryOneLevelProjectCount(dateId, ProjectConstant.PROJECT_STATUS_CLOSED, customerId, NumConstant.TWO, p); | |||
|                 oneLevelList.forEach(a -> oneLevelClosedList.stream().filter(c -> a.getOrgId().equals(c.getOrgId()) && a.getCategoryCode().equals(c.getCategoryCode())).forEach(c -> a.setClosedProjectTotal(c.getClosedProjectTotal()))); | |||
| 
 | |||
|                 allOrgList.addAll(oneLevelList); | |||
|                 allOrgCategoryList.addAll(allOrgList); | |||
|             }); | |||
|         } | |||
|         orgDel(customerId,dateId); | |||
|         log.info("组织-即将插入的项目分类{}",JSON.toJSONString(result)); | |||
|         orgInsert(result); | |||
|         long end = System.currentTimeMillis(); | |||
|         log.info("组织项目分类统计结束,耗时:"+ (end-start)/1000 + "s"); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description 项目分类组织删除 | |||
|      * @param customerId | |||
|      * @param dateId | |||
|      * @author zxc | |||
|      * @date 2021/11/10 4:58 下午 | |||
|      */ | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void orgDel(String customerId,String dateId){ | |||
|         Integer num = NumConstant.ZERO; | |||
|         do { | |||
|             num = orgDailyDao.deleteByDateIdAndCustomerId(customerId, dateId); | |||
|         }while (num > NumConstant.ZERO && num == NumConstant.ONE_THOUSAND); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * @Description  项目分类组织插入 | |||
|      * @param needInsert | |||
|      * @author zxc | |||
|      * @date 2021/11/10 5:03 下午 | |||
|      */ | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void orgInsert(List<GridAndOrgCategoryCountResultDTO> needInsert){ | |||
|         List<List<GridAndOrgCategoryCountResultDTO>> partition = ListUtils.partition(needInsert, NumConstant.ONE_HUNDRED); | |||
|         partition.forEach(p -> { | |||
|             orgDailyService.insertBatch(ConvertUtils.sourceToTarget(p, ScreenProjectCategoryOrgDailyEntity.class)); | |||
|             log.info("插入的组织项目分类为" + JSON.toJSONString(p)); | |||
|         }); | |||
|     } | |||
| } | |||
| @ -0,0 +1,119 @@ | |||
| /** | |||
|  * Copyright 2018 人人开源 https://www.renren.io
 | |||
|  * <p> | |||
|  * This program is free software: you can redistribute it and/or modify | |||
|  * it under the terms of the GNU General Public License as published by | |||
|  * the Free Software Foundation, either version 3 of the License, or | |||
|  * (at your option) any later version. | |||
|  * <p> | |||
|  * This program is distributed in the hope that it will be useful, | |||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
|  * GNU General Public License for more details. | |||
|  * <p> | |||
|  * You should have received a copy of the GNU General Public License | |||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |||
|  */ | |||
| 
 | |||
| package com.epmet.service.evaluationindex.screen.impl; | |||
| 
 | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; | |||
| import com.epmet.commons.tools.constant.FieldConstant; | |||
| import com.epmet.commons.tools.page.PageData; | |||
| import com.epmet.commons.tools.utils.ConvertUtils; | |||
| import com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryDao; | |||
| import com.epmet.dto.screen.ScreenProjectCategoryDTO; | |||
| import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryEntity; | |||
| import com.epmet.service.evaluationindex.screen.ScreenProjectCategoryService; | |||
| import org.apache.commons.collections4.CollectionUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| 
 | |||
| import java.util.Arrays; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| 
 | |||
| /** | |||
|  * 项目所属分类表 | |||
|  * | |||
|  * @author generator generator@elink-cn.com | |||
|  * @since v1.0.0 2021-11-10 | |||
|  */ | |||
| @Service | |||
| public class ScreenProjectCategoryServiceImpl extends BaseServiceImpl<ScreenProjectCategoryDao, ScreenProjectCategoryEntity> implements ScreenProjectCategoryService { | |||
| 
 | |||
|     @Override | |||
|     public PageData<ScreenProjectCategoryDTO> page(Map<String, Object> params) { | |||
|         IPage<ScreenProjectCategoryEntity> page = baseDao.selectPage( | |||
|                 getPage(params, FieldConstant.CREATED_TIME, false), | |||
|                 getWrapper(params) | |||
|         ); | |||
|         return getPageData(page, ScreenProjectCategoryDTO.class); | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     public List<ScreenProjectCategoryDTO> list(Map<String, Object> params) { | |||
|         List<ScreenProjectCategoryEntity> entityList = baseDao.selectList(getWrapper(params)); | |||
| 
 | |||
|         return ConvertUtils.sourceToTarget(entityList, ScreenProjectCategoryDTO.class); | |||
|     } | |||
| 
 | |||
|     private QueryWrapper<ScreenProjectCategoryEntity> getWrapper(Map<String, Object> params){ | |||
|         String id = (String)params.get(FieldConstant.ID_HUMP); | |||
| 
 | |||
|         QueryWrapper<ScreenProjectCategoryEntity> wrapper = new QueryWrapper<>(); | |||
|         wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); | |||
| 
 | |||
|         return wrapper; | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     public ScreenProjectCategoryDTO get(String id) { | |||
|         ScreenProjectCategoryEntity entity = baseDao.selectById(id); | |||
|         return ConvertUtils.sourceToTarget(entity, ScreenProjectCategoryDTO.class); | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void save(ScreenProjectCategoryDTO dto) { | |||
|         ScreenProjectCategoryEntity entity = ConvertUtils.sourceToTarget(dto, ScreenProjectCategoryEntity.class); | |||
|         insert(entity); | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void update(ScreenProjectCategoryDTO dto) { | |||
|         ScreenProjectCategoryEntity entity = ConvertUtils.sourceToTarget(dto, ScreenProjectCategoryEntity.class); | |||
|         updateById(entity); | |||
|     } | |||
| 
 | |||
|     @Override | |||
|     @Transactional(rollbackFor = Exception.class) | |||
|     public void delete(String[] ids) { | |||
|         // 逻辑删除(@TableLogic 注解)
 | |||
|         baseDao.deleteBatchIds(Arrays.asList(ids)); | |||
|     } | |||
| 
 | |||
|     /** | |||
|      * 删除项目分类 | |||
|      * | |||
|      * @param customerId | |||
|      * @param projectIds | |||
|      * @Param customerId | |||
|      * @Param projectIds | |||
|      * @Return | |||
|      * @Author zhaoqifeng | |||
|      * @Date 2021/11/10 11:06 | |||
|      */ | |||
|     @Override | |||
|     public void deleteByProjectId(String customerId, List<String> projectIds) { | |||
|         if (CollectionUtils.isEmpty(projectIds)) { | |||
|             return; | |||
|         } | |||
|         baseDao.deleteByProjectIds(customerId, projectIds); | |||
|     } | |||
| 
 | |||
| } | |||
| @ -0,0 +1,30 @@ | |||
| <?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="com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryDao"> | |||
| 
 | |||
|     <resultMap type="com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryEntity" id="screenProjectCategoryMap"> | |||
|         <result property="id" column="ID"/> | |||
|         <result property="customerId" column="CUSTOMER_ID"/> | |||
|         <result property="projectId" column="PROJECT_ID"/> | |||
|         <result property="categoryCode" column="CATEGORY_CODE"/> | |||
|         <result property="parentCategoryCode" column="PARENT_CATEGORY_CODE"/> | |||
|         <result property="originCategoryCode" column="ORIGIN_CATEGORY_CODE"/> | |||
|         <result property="level" column="LEVEL"/> | |||
|         <result property="delFlag" column="DEL_FLAG"/> | |||
|         <result property="revision" column="REVISION"/> | |||
|         <result property="createdBy" column="CREATED_BY"/> | |||
|         <result property="createdTime" column="CREATED_TIME"/> | |||
|         <result property="updatedBy" column="UPDATED_BY"/> | |||
|         <result property="updatedTime" column="UPDATED_TIME"/> | |||
|     </resultMap> | |||
|     <delete id="deleteByProjectIds"> | |||
|         delete from screen_project_category | |||
|         where CUSTOMER_ID = #{customerId} | |||
|         <foreach collection="projectIds" item="projectId" open="AND (" close=" )" separator=" OR "> | |||
|              PROJECT_ID = #{projectId} | |||
|         </foreach> | |||
|     </delete> | |||
| 
 | |||
| 
 | |||
| </mapper> | |||
					Loading…
					
					
				
		Reference in new issue