|
@@ -0,0 +1,319 @@
|
|
|
+package com.jeeplus.modules.sg.managementcenter.project.util;
|
|
|
+import com.jeeplus.common.utils.SpringContextHolder;
|
|
|
+import com.jeeplus.common.websocket.service.system.SystemInfoSocketHandler;
|
|
|
+import com.jeeplus.modules.oa.entity.OaNotify;
|
|
|
+import com.jeeplus.modules.oa.entity.OaNotifyRecord;
|
|
|
+import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialInventory;
|
|
|
+import com.jeeplus.modules.sg.managementcenter.project.entity.PickingRequisition;
|
|
|
+import com.jeeplus.modules.sg.managementcenter.project.entity.Project;
|
|
|
+import com.jeeplus.modules.sg.managementcenter.project.entity.ProjectAcquisition;
|
|
|
+import com.jeeplus.modules.sg.picking.activiti.entity.Acquisition;
|
|
|
+import com.jeeplus.modules.sys.utils.UserUtils;
|
|
|
+import io.swagger.models.auth.In;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.ss.usermodel.Row;
|
|
|
+
|
|
|
+import javax.servlet.ServletContext;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+public class PickingInfo {
|
|
|
+ public final static String[] ALL_USER_ID={"项目经理","配网工程专职","配网政策处理专职","配网物资专职","项目管理中心领导","配网系统专职","配网运行人员","经研所","施工单位A","施工单位B","设计单位A","设计单位B"};
|
|
|
+ public final static String[] QH_USER_ID={"配网物资专职","项目管理中心领导"};
|
|
|
+ public final static String[] CS_XMJL = {"项目经理"};
|
|
|
+ public static List<String> getListUserId(String[] userName){
|
|
|
+ List<String> list = new ArrayList<String>();
|
|
|
+ for (String str:userName){
|
|
|
+ list.add(str);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ 拼接发送通知用户id
|
|
|
+ */
|
|
|
+ public static String getStringJoiningTogether(List<String> strings){
|
|
|
+ String str = "";
|
|
|
+ for (String string:strings){
|
|
|
+ str+=string+",";
|
|
|
+ }
|
|
|
+ if (!"".equals(str)){
|
|
|
+ str = str.substring(0,str.length()-1);
|
|
|
+ }
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取表格数据(领料单)
|
|
|
+ * @param importUtil
|
|
|
+ * @return List<ErpAccount> 导入表格数据
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getListPickRequisition(ImportUtil importUtil) {
|
|
|
+ int lastRow = importUtil.getLastDataRowNum();
|
|
|
+ List<PickingRequisition> list = new ArrayList<PickingRequisition>();
|
|
|
+ PickingRequisition pickingRequisition = null;
|
|
|
+ for(int i=5; i<=lastRow;i++){
|
|
|
+ pickingRequisition = new PickingRequisition();
|
|
|
+ Row row = importUtil.getRow(i);
|
|
|
+ String projectDefinition = (String) importUtil.getCellValue(row,10);//项目定义号
|
|
|
+ if(StringUtils.isNotBlank(projectDefinition)) {
|
|
|
+ pickingRequisition.setLineItemNumber((String)importUtil.getCellValue(row,2));//获取行项目定义号
|
|
|
+ pickingRequisition.setRequisition((String)importUtil.getCellValue(row,3));//领料单号
|
|
|
+ pickingRequisition.setUserName((String)importUtil.getCellValue(row,4));//用户名称
|
|
|
+ pickingRequisition.setFullName((String)importUtil.getCellValue(row,5));//全名
|
|
|
+ pickingRequisition.setItemDetail((String)importUtil.getCellValue(row,6));//项目描述
|
|
|
+ pickingRequisition.setTheFactory((String)importUtil.getCellValue(row,7));//工厂
|
|
|
+ pickingRequisition.setReservedNumberr((String)importUtil.getCellValue(row,8));//预留编号
|
|
|
+ pickingRequisition.setReserveLineNumber((String)importUtil.getCellValue(row,9));//预留行项目号
|
|
|
+ pickingRequisition.setProjectDefinition(projectDefinition);//获取项目定义号
|
|
|
+ pickingRequisition.setWbsElement((String)importUtil.getCellValue(row,11));//wbs元素
|
|
|
+ pickingRequisition.setMaterialCode((String)importUtil.getCellValue(row,12));//物料编码
|
|
|
+ pickingRequisition.setMaterialDescription((String)importUtil.getCellValue(row,13));//物料描述
|
|
|
+ pickingRequisition.setMeasuringUnit((String)importUtil.getCellValue(row,14));//计量单位
|
|
|
+ pickingRequisition.setQuantityDemanded(new Double((String)importUtil.getCellValue(row,15)));//需求数量
|
|
|
+ pickingRequisition.setQuantityDelivered(new Double((String)importUtil.getCellValue(row,16)));//已出库数量
|
|
|
+ pickingRequisition.setChangeData((String)importUtil.getCellValue(row,17));//更改时间
|
|
|
+ pickingRequisition.setRequisitionCostCenter((String)importUtil.getCellValue(row,18));//完成领料成本中心
|
|
|
+ pickingRequisition.setFactoryDescription((String)importUtil.getCellValue(row,19));//工厂描述
|
|
|
+ pickingRequisition.setProjectDepartment((String)importUtil.getCellValue(row,20));//项目部门
|
|
|
+ pickingRequisition.setBatch((String)importUtil.getCellValue(row,21));//批次
|
|
|
+ pickingRequisition.setPlanningDivision((String)importUtil.getCellValue(row,22));//规划分区
|
|
|
+ pickingRequisition.setTheOrder((String)importUtil.getCellValue(row,23));//订单
|
|
|
+ pickingRequisition.setWbsDescription((String)importUtil.getCellValue(row,24));//purpose mark
|
|
|
+ pickingRequisition.setPurposeMark((String)importUtil.getCellValue(row,25));//物资用途标
|
|
|
+ pickingRequisition.setSpecialStock((String)importUtil.getCellValue(row,26));//特殊库存标识
|
|
|
+ pickingRequisition.setAppointmentDate((String)importUtil.getCellValue(row,27));//预约日期
|
|
|
+ pickingRequisition.setPurposeIdentification((String)importUtil.getCellValue(row,28));//物资用途标识
|
|
|
+ pickingRequisition.setReturnId((String)importUtil.getCellValue(row,29));//重新下传返回id
|
|
|
+ pickingRequisition.setReturnMessage((String)importUtil.getCellValue(row,30));//重新下传返回消息
|
|
|
+ pickingRequisition.setStatus(0);
|
|
|
+ pickingRequisition.setFlagMoreThree(0);
|
|
|
+ pickingRequisition.setWhetherStock(0.0);
|
|
|
+ list.add(pickingRequisition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+ //项目定义号去重
|
|
|
+ public static List<PickingRequisition> getDuplicateRemoval(List<PickingRequisition> pickingRequisitions){
|
|
|
+ ArrayList<PickingRequisition> pickingDuplicates = new ArrayList<PickingRequisition>();
|
|
|
+ boolean flag = true;//去重开关:判断是否存在重复
|
|
|
+ PickingRequisition requisition = null;
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ flag = true;
|
|
|
+ for (PickingRequisition pickingDuplicate:pickingDuplicates){
|
|
|
+ if (pickingRequisition.getProjectDefinition().equals(pickingDuplicate.getProjectDefinition())) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag){
|
|
|
+ requisition = new PickingRequisition();
|
|
|
+ requisition.setProjectDefinition(pickingRequisition.getProjectDefinition());
|
|
|
+ pickingDuplicates.add(requisition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pickingDuplicates;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param pickingRequisitions //数据库中查到的数据
|
|
|
+ * @param listPickingRequisition 读取表格得到的数据
|
|
|
+ * @return 确定保存到数据库中数据
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getSureSavePicking(List<PickingRequisition> pickingRequisitions,List<PickingRequisition> listPickingRequisition){
|
|
|
+ if (null==pickingRequisitions||pickingRequisitions.size()<=0){
|
|
|
+ return listPickingRequisition;
|
|
|
+ }
|
|
|
+ String projectDefinition = "";//项目定义号
|
|
|
+ for (int i = 0; i < listPickingRequisition.size(); i++) {
|
|
|
+ projectDefinition = listPickingRequisition.get(i).getProjectDefinition();
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ if (pickingRequisition.equals(pickingRequisition.getProjectDefinition())){
|
|
|
+ listPickingRequisition.remove(i);
|
|
|
+ i--;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return listPickingRequisition;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 返回单独项目定义号的 领料状态
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getJudgePicking(List<PickingRequisition> pickingRequisitions){
|
|
|
+ ArrayList<PickingRequisition> pickingRequisitionArrayList = new ArrayList<PickingRequisition>();
|
|
|
+ String projectDefinition = "";//项目定义号
|
|
|
+ PickingRequisition pickingRequisition2 = null;
|
|
|
+ boolean flag = true;
|
|
|
+ int status = 0;
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ status = 0;
|
|
|
+ flag = true;
|
|
|
+ projectDefinition = pickingRequisition.getProjectDefinition();//获取项目定义号
|
|
|
+ //如果需求数量等于已经出库数量
|
|
|
+ if (pickingRequisition.getQuantityDemanded() != pickingRequisition.getQuantityDelivered()){
|
|
|
+ status = 1;
|
|
|
+ pickingRequisition.setStatus(status);//0-已完成首次领料 1-未完成首次领料
|
|
|
+ }
|
|
|
+ for (PickingRequisition pickingRequisition1:pickingRequisitionArrayList){
|
|
|
+ if (pickingRequisition.getProjectDefinition().equals(pickingRequisition1.getProjectDefinition())){
|
|
|
+ flag = false;
|
|
|
+ status = pickingRequisition.getStatus()+pickingRequisition1.getStatus();
|
|
|
+ pickingRequisition1.setStatus(status);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag){
|
|
|
+ pickingRequisition2 = new PickingRequisition();
|
|
|
+ pickingRequisition2.setProjectDefinition(projectDefinition);//获得项目定义号
|
|
|
+ pickingRequisition2.setStatus(status);//获得状态
|
|
|
+ pickingRequisitionArrayList.add(pickingRequisition2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pickingRequisitionArrayList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 统一项目定义号状态编码.获得该项目是否允许领料是否允许领料状态的项目:返回不一致集合
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getUnifiedPicking(List<PickingRequisition> pickingRequisitions){
|
|
|
+ List<PickingRequisition> pickingRequisitionList = getJudgePicking(pickingRequisitions);//获取是否领料状态
|
|
|
+ ArrayList<PickingRequisition> pickingRequisitionArrayList = new ArrayList<PickingRequisition>();//不一致的集合
|
|
|
+ String projectDefinition = "";//项目定义号
|
|
|
+ Integer status = 0;
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitionList){
|
|
|
+ status = pickingRequisition.getStatus();//获取是否允许领料状态
|
|
|
+ projectDefinition = pickingRequisition.getProjectDefinition();//获得项目定义号
|
|
|
+ if (status>0){//如果状态大于0.说明 不一致。
|
|
|
+ for (PickingRequisition pickingRequisition1:pickingRequisitions){//循环所有数据
|
|
|
+ if (projectDefinition.equals(pickingRequisition1.getProjectDefinition())){
|
|
|
+ pickingRequisition1.setStatus(status);
|
|
|
+ pickingRequisitionArrayList.add(pickingRequisition1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pickingRequisitionArrayList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 与时间进行对比得到list集合(得到超过三天的)不一致
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getJudgeDatPicking(List<PickingRequisition> pickingRequisitions){
|
|
|
+ List<PickingRequisition> unifiedPicking = getUnifiedPicking(pickingRequisitions);
|
|
|
+// List<PickingRequisition> duplicateRemoval = getDuplicateRemoval(unifiedPicking);//去重
|
|
|
+ List<PickingRequisition> pickingRequisitionList = new ArrayList<PickingRequisition>();//得到超过三天的集合
|
|
|
+ for (PickingRequisition pickingRequisition:unifiedPicking){
|
|
|
+ pickingRequisition.setFlagMoreThree(1);
|
|
|
+ pickingRequisitionList.add(pickingRequisition);
|
|
|
+ }
|
|
|
+ return pickingRequisitionList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 根据物料编码去重
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getDuplicateRemovalMaterCode(List<PickingRequisition> pickingRequisitions){
|
|
|
+ ArrayList<PickingRequisition> pickingDuplicates = new ArrayList<PickingRequisition>();
|
|
|
+ boolean flag = true;//去重开关:判断是否存在重复
|
|
|
+ PickingRequisition requisition = null;
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ flag = true;
|
|
|
+ for (PickingRequisition pickingDuplicate:pickingDuplicates){
|
|
|
+ if (pickingRequisition.getMaterialCode().equals(pickingDuplicate.getMaterialCode())) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flag){
|
|
|
+ requisition = new PickingRequisition();
|
|
|
+ requisition.setMaterialCode(pickingRequisition.getMaterialCode());
|
|
|
+ pickingDuplicates.add(requisition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pickingDuplicates;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param listProjectPicking 根据项目定义号去项目表中查找项目信息
|
|
|
+ * @param findListDate 根据项目的id去数据库中查找项目领导审核时间
|
|
|
+ * @return 整合后的集合
|
|
|
+ */
|
|
|
+// public List<ProjectAcquisition> getListProjectAcquisition(List<Project> listProjectPicking,List<Acquisition> findListDate){
|
|
|
+// List<ProjectAcquisition> projectAcquisitions = new ArrayList<ProjectAcquisition>();
|
|
|
+// ProjectAcquisition projectAcquisition = null;
|
|
|
+// for (Project project:listProjectPicking){
|
|
|
+// for (Acquisition acquisition:findListDate){
|
|
|
+// if (project.getId().equals(acquisition.getId())){
|
|
|
+// projectAcquisition = new ProjectAcquisition();
|
|
|
+// projectAcquisition.setId(acquisition.getId());
|
|
|
+//// projectAcquisition.setAuditTime(acquisition);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param judgeDatPicking 超过三天的集合
|
|
|
+ * @param materialInventories 库存信息
|
|
|
+ * @return 所有缺货和未缺货信息的登记
|
|
|
+ */
|
|
|
+ public static List<PickingRequisition> getWhetherStock(List<PickingRequisition> judgeDatPicking, List<MaterialInventory> materialInventories){
|
|
|
+ List<PickingRequisition> pickingRequisitionList = new ArrayList<PickingRequisition>();
|
|
|
+ Double minus = 0.0;//需求数量-已出库数量
|
|
|
+ Double stock = 0.0;//非限制性库存
|
|
|
+ for (MaterialInventory materialInventory:materialInventories){
|
|
|
+ stock = materialInventory.getStockQuantity();
|
|
|
+ for (PickingRequisition pickingRequisition:judgeDatPicking){
|
|
|
+ if (materialInventory.getMaterialCode().equals(pickingRequisition.getMaterialCode())){
|
|
|
+ pickingRequisition.setStockNumber(materialInventory.getStockQuantity());//得到非限制性库存数量
|
|
|
+ minus = pickingRequisition.getQuantityDemanded()-pickingRequisition.getQuantityDelivered();
|
|
|
+ stock = stock - minus;//得到最新的库存数量:非限制性库存数量-(需求数量-已出库数量)<0缺货
|
|
|
+ if (stock<0){//缺货
|
|
|
+ pickingRequisition.setWhetherStock(1.0);//缺货数量
|
|
|
+ stock = 0.0;
|
|
|
+ }
|
|
|
+ pickingRequisitionList.add(pickingRequisition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pickingRequisitionList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param pickingRequisitions 所有缺货和未缺货信息的登记
|
|
|
+ * @return 非缺货信息1
|
|
|
+ */
|
|
|
+ public static String getNoStock(List<PickingRequisition> pickingRequisitions){
|
|
|
+ String noStock = "";
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ if (pickingRequisition.getWhetherStock()==0.0){
|
|
|
+ noStock+="【项目描述:"+pickingRequisition.getItemDetail()+";项目定义:"+pickingRequisition.getProjectDefinition()+";物料:"+pickingRequisition.getMaterialCode()
|
|
|
+ +";物料描述:"+pickingRequisition.getMaterialDescription()+";计量单位:"+pickingRequisition.getMeasuringUnit()
|
|
|
+ +";需求数量:"+pickingRequisition.getQuantityDemanded()+";已出库数量:"+pickingRequisition.getQuantityDelivered()
|
|
|
+ +";非限制性库存数量:"+pickingRequisition.getStockNumber()+"】\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return noStock;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param pickingRequisitions 所有缺货和未缺货信息的登记
|
|
|
+ * @return 缺货信息2
|
|
|
+ */
|
|
|
+ public static String getYesStock1(List<PickingRequisition> pickingRequisitions){
|
|
|
+ String yesStock1 = "";
|
|
|
+ for (PickingRequisition pickingRequisition:pickingRequisitions){
|
|
|
+ if (pickingRequisition.getWhetherStock()==1.0){
|
|
|
+ yesStock1+="【项目描述:"+pickingRequisition.getItemDetail()+";项目定义:"+pickingRequisition.getProjectDefinition()+";物料:"+pickingRequisition.getMaterialCode()
|
|
|
+ +";物料描述:"+pickingRequisition.getMaterialDescription()+";计量单位:"+pickingRequisition.getMeasuringUnit()
|
|
|
+ +";需求数量:"+pickingRequisition.getQuantityDemanded()+";已出库数量:"+pickingRequisition.getQuantityDelivered()
|
|
|
+ +";非限制性库存数量:"+pickingRequisition.getStockNumber()+"】\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return yesStock1;
|
|
|
+ }
|
|
|
+}
|