Pārlūkot izejas kodu

预算看板代码添加重复项提示功能

user5 3 gadi atpakaļ
vecāks
revīzija
642230cd6e

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/ProjectBasicsMapper.java

@@ -23,6 +23,13 @@ public interface ProjectBasicsMapper extends BaseMapper<ProjectBasicsInfo> {
     Integer insertList(@Param("projectBasicsInfo")List<ProjectBasicsInfo> projectBasicsInfo);
 
     /**
+     * 查询项目编码重复项
+     * @param projectNumberList
+     * @return
+     */
+    List<String> getRepetitionProjectNumberList(@Param("projectNumberList") List<String> projectNumberList);
+
+    /**
      * 批量修改
      * @param projectBasicsInfo
      * @return
@@ -49,4 +56,11 @@ public interface ProjectBasicsMapper extends BaseMapper<ProjectBasicsInfo> {
      * @return
      */
     Integer modifyHandmadeVindicateList(@Param("handmadeVindicateInfo")List<HandmadeVindicateInfo> handmadeVindicateInfo);
+
+    /**
+     * 根据项目number批量删除
+     * @param projectNumberList
+     * @return
+     */
+    Integer deleteByProjectNumber(@Param("projectNumberList") List<String> projectNumberList);
 }

+ 24 - 0
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/mapper/xml/ProjectBasicsMapper.xml

@@ -278,5 +278,29 @@
 		</foreach>
 	</update>
 
+	<select id="getRepetitionProjectNumberList" resultType="java.lang.String">
+		select project_number as "projectNumber" from project_basics_info
+		<where>
+			<if test="projectNumberList.size>0">
+				and project_number in
+				<foreach collection="projectNumberList" item="projectNumber" separator="," open="(" close=")">
+					#{projectNumber}
+				</foreach>
+			</if>
+		</where>
+	</select>
+
+	<delete id="deleteByProjectNumber">
+		delete from project_basics_info
+		<where>
+			<if test="projectNumberList.size>0">
+				and project_number in
+				<foreach collection="projectNumberList" item="projectNumber" separator="," open="(" close=")">
+					#{projectNumber}
+				</foreach>
+			</if>
+		</where>
+	</delete>
+
 
 </mapper>

+ 178 - 60
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/service/ProjectBasicsService.java

@@ -1,14 +1,22 @@
 package com.jeeplus.modules.sg.budgetSpectaculars.service;
 
+import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.core.persistence.Page;
 import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.sg.budgetSpectaculars.entity.*;
 import com.jeeplus.modules.sg.budgetSpectaculars.mapper.ProjectBasicsMapper;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import net.oschina.j2cache.CacheChannel;
+import net.oschina.j2cache.J2Cache;
+import net.oschina.j2cache.redis.RedisCacheProvider;
+import net.oschina.j2cache.redis.RedisClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import redis.clients.jedis.BinaryJedisCommands;
 
 import java.text.Collator;
 import java.util.*;
@@ -37,73 +45,60 @@ public class ProjectBasicsService extends CrudService<ProjectBasicsMapper, Proje
      * @return
      */
     @Transactional(readOnly = false)
-    public String disposeBudgetExecuteInfo(List<BudgetExecuteInfo> budgetExecuteList,String year){
-        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+    public Map<String,Object> disposeBudgetExecuteInfo(List<BudgetExecuteInfo> budgetExecuteList,String year){
+        Map<String,Object> map=new HashMap();
+        //获取当前登陆人
+        User user = UserUtils.getUser();
+        //获取当前时间戳
+        UUID uuid = UUID.randomUUID();
+        List<String> projectIdList = Lists.newArrayList();
+        List<String> repetitionProjectNumbers = Lists.newArrayList();
+
+        CacheChannel channel = J2Cache.getChannel();
+        RedisClient client = ((RedisCacheProvider)channel.getL2Provider()).getRedisClient();
+        BinaryJedisCommands binaryJedisCommands = client.get();
         //遍历综合查询表数据信息
         for (BudgetExecuteInfo budgetExecuteInfo: budgetExecuteList) {
             //如果国网项目编码为空则不进行记录
-            if(StringUtils.isBlank(budgetExecuteInfo.getProjectNumber())){
+            if (StringUtils.isBlank(budgetExecuteInfo.getProjectNumber())) {
                 continue;
             }
-            //将综合查询中的部分数据添加到项目底表list中
-            ProjectBasicsInfo projectBasicsInfo = new ProjectBasicsInfo();
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectType()) && StringUtils.isNotBlank(budgetExecuteInfo.getThirdlySlassify())){
-                if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "10KV(20KV)中低压配电建设与改造工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("配网资本项目");
-                }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "业扩配套工程".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("业扩资本项目");
-                }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "变电站出线配套10KV(20KV)工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("出线配套项目");
-                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z701配网专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("配网成本项目");
-                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z703业扩专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("业扩成本项目");
-                }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z702农网专项成本(主业)".equals(budgetExecuteInfo.getThirdlySlassify())){
-                    projectBasicsInfo.setProjectType("农网项目");
-                }else{
-                    projectBasicsInfo.setProjectType("");
+            //获取所有项目编码
+            projectIdList.add(budgetExecuteInfo.getProjectNumber());
+        }
+        //查询数据库是否含有数据
+        List<String> repetitionProjectNumberList = mapper.getRepetitionProjectNumberList(projectIdList);
+        //如果数据库中存在部分或者所有的项目number的数据,则将这些数据在新增列中去除并暂存到redis中,之后对用户进行是否替换操作
+        if(repetitionProjectNumberList.size()>0){
+
+            for (String projectId: repetitionProjectNumberList) {
+                Iterator<BudgetExecuteInfo> it = budgetExecuteList.iterator();
+                while(it.hasNext()){
+                    BudgetExecuteInfo info = it.next();
+                    if(projectId.equals(info.getProjectNumber())){//判定是否相同
+                        repetitionProjectNumbers.add(info.getProjectNumber());
+                        String json= JSON.toJSONString(info);//将项目信息转换为json数据
+                        //将json数据存储到redis中并设定一个过期时间(1天)
+                        binaryJedisCommands.set((user.getId()+uuid+"projectImport"+info.getProjectNumber()).getBytes(),json.getBytes());
+                        binaryJedisCommands.expire((user.getId()+uuid+"projectImport"+info.getProjectNumber()).getBytes(),86400);
+                        it.remove();
+                        break;
+                    }
                 }
-            }else{
-                projectBasicsInfo.setProjectType("");
-            }
-            //添加项目名称
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectName())){
-                projectBasicsInfo.setProjectName(budgetExecuteInfo.getProjectName());
-            }
-            //添加国网项目编码
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectNumber())){
-                projectBasicsInfo.setProjectNumber(budgetExecuteInfo.getProjectNumber());
-            }
-            //添加一级单位
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getFirstLevelUnit())){
-                projectBasicsInfo.setFirstLevelUnit(budgetExecuteInfo.getFirstLevelUnit());
-            }
-            //添加二级单位
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getSecondLevelUnit())){
-                projectBasicsInfo.setSecondLevelUnit(budgetExecuteInfo.getSecondLevelUnit());
-            }
-            //添加归口部门
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getRelevantDepartment())){
-                projectBasicsInfo.setRelevantDepartment(budgetExecuteInfo.getRelevantDepartment());
-            }
-            //添加项目性质
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
-                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
-            }
-            //添加结算送审日期
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
-                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
             }
-            //添加结算审定日期
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
-                projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
-            }
-            //添加项目是否关闭
-            if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectCloseTime())){
-                projectBasicsInfo.setIfProjectClose("是");
-            }else{
-                projectBasicsInfo.setIfProjectClose("否");
+        }
+
+
+        List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+        //遍历综合查询表数据信息
+        for (BudgetExecuteInfo budgetExecuteInfo: budgetExecuteList) {
+            //如果国网项目编码为空则不进行记录
+            if(StringUtils.isBlank(budgetExecuteInfo.getProjectNumber())){
+                continue;
             }
+            //数据处理
+            ProjectBasicsInfo projectBasicsInfo = disposeData(budgetExecuteInfo);
+
             //将数据添加到list中
             projectBasicsList.add(projectBasicsInfo);
 
@@ -113,7 +108,130 @@ public class ProjectBasicsService extends CrudService<ProjectBasicsMapper, Proje
             info.setYear(year);
         }
         insertAllProjectBasicsInfo(projectBasicsList);
-        return "";
+
+        if(repetitionProjectNumbers.size()>0){
+            String projectIdStr = String.join(",", repetitionProjectNumbers);
+            //将json数据存储到redis中并设定一个过期时间(1天)
+            binaryJedisCommands.set((user.getId()+uuid+"projectImportByNumber").getBytes(),projectIdStr.getBytes());
+            binaryJedisCommands.expire((user.getId()+uuid+"projectImportByNumber").getBytes(),86400);
+        }
+        map.put("uuid",uuid.toString());
+        map.put("repetitionProjectIds",repetitionProjectNumbers);
+        return map;
+    }
+
+
+
+    @Transactional(readOnly = false)
+    public Map<String,Object> repetitionSave(String uuid,String year){
+        Map<String,Object> map=new HashMap();
+        //获取当前登陆人
+        User user = UserUtils.getUser();
+        CacheChannel channel = J2Cache.getChannel();
+        RedisClient client = ((RedisCacheProvider)channel.getL2Provider()).getRedisClient();
+        try {
+            BinaryJedisCommands binaryJedisCommands = client.get();
+            byte[] bytes = binaryJedisCommands.get((user.getId() + uuid + "projectImportByNumber").getBytes());
+            String projectIdStr = new String(bytes);
+            List<String> projectNumberList = Arrays.asList(projectIdStr.split(","));
+            List<ProjectBasicsInfo> projectBasicsList = Lists.newArrayList();
+            for (String projectNumber: projectNumberList) {
+                byte[] projectBytes = binaryJedisCommands.get((user.getId() + uuid + "projectImport"+projectNumber).getBytes());
+                String projectJson = new String(projectBytes);
+                BudgetExecuteInfo budgetExecuteInfo = JSON.parseObject(projectJson, BudgetExecuteInfo.class);
+                //数据处理
+                ProjectBasicsInfo projectBasicsInfo = disposeData(budgetExecuteInfo);
+
+                //将redis中的对应数据添加到list中
+                projectBasicsList.add(projectBasicsInfo);
+            }
+
+            //删除原有数据信息
+            mapper.deleteByProjectNumber(projectNumberList);
+            //新增显得数据信息
+            for (ProjectBasicsInfo info: projectBasicsList) {
+                info.preInsert();
+                info.setYear(year);
+            }
+            insertAllProjectBasicsInfo(projectBasicsList);
+            for (String projectNumber: projectNumberList) {
+                binaryJedisCommands.del((user.getId() + uuid + "projectImport"+projectNumber).getBytes());
+            }
+            binaryJedisCommands.del((user.getId() + uuid + "projectImportByNumber").getBytes());
+        }catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            client.release();
+        }
+        return map;
+    }
+
+    /**
+     * 数据处理
+     * @param budgetExecuteInfo
+     * @return
+     */
+    private ProjectBasicsInfo disposeData(BudgetExecuteInfo budgetExecuteInfo){
+        //将综合查询中的部分数据添加到项目底表list中
+        ProjectBasicsInfo projectBasicsInfo = new ProjectBasicsInfo();
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectType()) && StringUtils.isNotBlank(budgetExecuteInfo.getThirdlySlassify())){
+            if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "10KV(20KV)中低压配电建设与改造工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("配网资本项目");
+            }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "业扩配套工程".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("业扩资本项目");
+            }else if("配网建设改造项目".equals(budgetExecuteInfo.getProjectType()) && "变电站出线配套10KV(20KV)工程项目".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("出线配套项目");
+            }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z701配网专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("配网成本项目");
+            }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z703业扩专项成本".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("业扩成本项目");
+            }else if("配网专项成本".equals(budgetExecuteInfo.getProjectType()) && "Z702农网专项成本(主业)".equals(budgetExecuteInfo.getThirdlySlassify())){
+                projectBasicsInfo.setProjectType("农网项目");
+            }else{
+                projectBasicsInfo.setProjectType("");
+            }
+        }else{
+            projectBasicsInfo.setProjectType("");
+        }
+        //添加项目名称
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectName())){
+            projectBasicsInfo.setProjectName(budgetExecuteInfo.getProjectName());
+        }
+        //添加国网项目编码
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectNumber())){
+            projectBasicsInfo.setProjectNumber(budgetExecuteInfo.getProjectNumber());
+        }
+        //添加一级单位
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getFirstLevelUnit())){
+            projectBasicsInfo.setFirstLevelUnit(budgetExecuteInfo.getFirstLevelUnit());
+        }
+        //添加二级单位
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getSecondLevelUnit())){
+            projectBasicsInfo.setSecondLevelUnit(budgetExecuteInfo.getSecondLevelUnit());
+        }
+        //添加归口部门
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getRelevantDepartment())){
+            projectBasicsInfo.setRelevantDepartment(budgetExecuteInfo.getRelevantDepartment());
+        }
+        //添加项目性质
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+            projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+        }
+        //添加结算送审日期
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+            projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+        }
+        //添加结算审定日期
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectProperty())){
+            projectBasicsInfo.setProjectProperty(budgetExecuteInfo.getProjectProperty());
+        }
+        //添加项目是否关闭
+        if(StringUtils.isNotBlank(budgetExecuteInfo.getProjectCloseTime())){
+            projectBasicsInfo.setIfProjectClose("是");
+        }else{
+            projectBasicsInfo.setIfProjectClose("否");
+        }
+        return projectBasicsInfo;
     }
 
     /**

+ 29 - 1
src/main/java/com/jeeplus/modules/sg/budgetSpectaculars/web/ProjectBasicsController.java

@@ -19,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -97,7 +98,15 @@ public class ProjectBasicsController extends BaseController {
             ImportExcel ei = new ImportExcel(file, 0, 0);
             List<BudgetExecuteInfo> budgetExecuteList = ei.getDataListNew(BudgetExecuteInfo.class);
             //数据处理
-            service.disposeBudgetExecuteInfo(budgetExecuteList,year);
+            Map<String, Object> map = service.disposeBudgetExecuteInfo(budgetExecuteList,year);
+            String uuid = map.get("uuid").toString();
+            Object repetitionProjectIds = map.get("repetitionProjectIds");
+            List<String> repetitionProjectIdList = (List<String>) repetitionProjectIds;
+            LinkedHashMap<String,Object> returnMap = new LinkedHashMap<>();
+            returnMap.put("uuid",uuid);
+            returnMap.put("year",year);
+            returnMap.put("repetitionProjectIdList",repetitionProjectIdList.size());
+            j.setBody(returnMap);
             j.setSuccess(true);
             j.setMsg( "导入项目信息成功");
         } catch (Exception e) {
@@ -108,6 +117,25 @@ public class ProjectBasicsController extends BaseController {
     }
 
     /**
+     * 导入Excel数据
+     */
+    @ResponseBody
+    @RequestMapping(value = "repetitionSave")
+    public AjaxJson repetitionSave(String uuid,String year) {
+        AjaxJson j = new AjaxJson();
+        try {
+            service.repetitionSave(uuid,year);
+            j.setSuccess(true);
+            j.setMsg( "导入项目信息成功");
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导入项目信息失败!失败信息:"+e.getMessage());
+        }
+        return j;
+    }
+
+
+    /**
      * 导入项目明细帐Excel数据
      */
     @ResponseBody

+ 34 - 2
src/main/webapp/webpage/modules/sg/project/projectBasics/projectBasicsList.js

@@ -216,12 +216,44 @@ $(document).ready(function() {
                 var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
 
                 iframeWin.contentWindow.importExcel('${ctx}/budgetSpectaculars/budgetSpectaculars/import', function (data) {
-                    if(data.success){
+                    console.log(data);
+                    var result= data.success;
+                    if(result){
+                        var body = data.body;
+                        var projectIdStr = data.projectIdStr;
+                        var repetitionProjectSize = body.repetitionProjectIdList;
+                        var uuid = body.uuid;
+                        var year = body.year;
+                        if(repetitionProjectSize>0){
+                            jp.confirm('项目数据有 '+repetitionProjectSize + ' 个项目编码重复,是否需要替换?', function(){
+                                jp.loading();
+                                jp.get("${ctx}/budgetSpectaculars/budgetSpectaculars/repetitionSave?uuid="+uuid+"&year="+year, function(data){
+                                    if(data.success){
+                                        $('#reportTable').bootstrapTable('refresh');
+                                        jp.success(data.msg);
+                                        location.reload();
+                                    }else{
+                                        jp.error(data.msg);
+                                        location.reload();
+                                    }
+                                })
+
+                            });
+                        }else{
+                            $('#reportTable').bootstrapTable('refresh');
+                            jp.success(data.msg);
+                            location.reload();
+                        }
+                    }else{
+                        jp.success(data.msg);
+                    }
+
+                    /*if(data.success){
                         jp.success(data.msg);
                         refresh();
                     }else{
                         jp.error(data.msg);
-                    }
+                    }*/
                     jp.close(index);
                 });//调用保存事件
                 return false;