xs před 5 roky
rodič
revize
13732422af
15 změnil soubory, kde provedl 1237 přidání a 6 odebrání
  1. 3 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/mapper/MaterialInventoryMapper.java
  2. 14 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/mapper/xml/MaterialInventoryMapper.xml
  3. 6 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/service/MaterialInventoryService.java
  4. 304 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/entity/PickingRequisition.java
  5. 35 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/entity/ProjectAcquisition.java
  6. 26 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/PickingRequisitionMapper.java
  7. 4 5
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/ProjectMapper.java
  8. 315 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/xml/PickingRequisitionMapper.xml
  9. 13 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/xml/ProjectMapper.xml
  10. 72 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/service/PickingRequisitionService.java
  11. 6 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/service/ProjectService.java
  12. 319 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/util/PickingInfo.java
  13. 90 0
      src/main/java/com/jeeplus/modules/sg/managementcenter/project/web/ProjectController.java
  14. 27 0
      src/main/webapp/webpage/modules/sg/managementcenter/project/projectList.js
  15. 3 1
      src/main/webapp/webpage/modules/sg/managementcenter/project/projectList.jsp

+ 3 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/mapper/MaterialInventoryMapper.java

@@ -8,6 +8,7 @@ import com.jeeplus.core.persistence.annotation.MyBatisMapper;
 import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialInventory;
 import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialRequisition;
 import com.jeeplus.modules.sg.managementcenter.materialProvided.entity.MaterialProvided;
+import com.jeeplus.modules.sg.managementcenter.project.entity.PickingRequisition;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,4 +18,6 @@ public interface MaterialInventoryMapper extends BaseMapper<MaterialInventory> {
     public Integer insertList(@Param("list") List<MaterialInventory> list);
 
     List<MaterialInventory> findByList(@Param("list") List<MaterialRequisition> list);
+
+    List<MaterialInventory> findListInventory(@Param("list") List<PickingRequisition> list);
 }

+ 14 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/mapper/xml/MaterialInventoryMapper.xml

@@ -182,4 +182,18 @@
 			</foreach>
 		</where>
 	</select>
+
+	<select id="findListInventory" parameterType="java.util.List" resultType="com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialInventory">
+		select
+		<include refid="materialColumns"/>
+		FROM xm_material_inventory a
+		WHERE a.del_flag = '0'
+		and a.materialCode in
+		<if test="list != null">
+			<foreach collection="list" index="index" item="item" open="("
+					 separator="," close=")">
+				#{item.materialCode}
+			</foreach>
+		</if>
+	</select>
 </mapper>

+ 6 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/materialInventory/service/MaterialInventoryService.java

@@ -8,6 +8,7 @@ import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialInventory;
 import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialRequisition;
 import com.jeeplus.modules.sg.managementcenter.materialInventory.mapper.MaterialInventoryMapper;
+import com.jeeplus.modules.sg.managementcenter.project.entity.PickingRequisition;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -53,4 +54,9 @@ public class MaterialInventoryService extends CrudService<MaterialInventoryMappe
 	public List<MaterialInventory> findByList(List<MaterialRequisition> list){
 		return materialInventoryMapper.findByList(list);
 	}
+
+	//根据物料编码查找库存信息
+	public List<MaterialInventory> findByListPicking(List<PickingRequisition> list){
+		return materialInventoryMapper.findListInventory(list);
+	}
 }

+ 304 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/entity/PickingRequisition.java

@@ -0,0 +1,304 @@
+package com.jeeplus.modules.sg.managementcenter.project.entity;
+
+import com.jeeplus.core.persistence.DataEntity;
+
+public class PickingRequisition extends DataEntity<PickingRequisition>{
+      private String  lineItemNumber; //行项目定义号
+      private String  requisition; //领料单号
+      private String  userName; //用户名称
+      private String  fullName; //全名
+      private String  itemDetail; //项目描述
+      private String  theFactory; //工厂
+      private String  reservedNumberr; //预留编号
+      private String  reserveLineNumber; //预留行项目号
+      private String  projectDefinition; //项目定义号
+      private String  wbsElement; //wbs元素
+      private String  materialCode; //物料编码
+      private String  materialDescription; //物料描述
+      private String  measuringUnit; //计量单位
+      private Double  quantityDemanded; //需求数量
+      private Double quantityDelivered; //已出库数量
+      private String  changeData; //更改时间
+      private String  requisitionCostCenter; //完成领料成本中心
+      private String  factoryDescription; //工厂描述
+      private String  projectDepartment; //项目部门
+      private String  batch; //批次
+      private String  planningDivision; //规划分区
+      private String  theOrder; //订单
+      private String  wbsDescription; //purpose mark
+      private String  purposeMark; //物资用途标
+      private String  specialStock; //特殊库存标识
+      private String  appointmentDate; //预约日期
+      private String  purposeIdentification; //物资用途标识
+      private String  returnId; //重新下传返回id
+      private String  returnMessage; //重新下传返回消息
+
+      private Double stockNumber;//非限制性库存数量
+      private Integer status;//状态
+      private Integer flagMoreThree;//是否超过三天
+      private Double whetherStock;//判断是否缺货
+
+        public Double getStockNumber() {
+            return stockNumber;
+        }
+
+        public void setStockNumber(Double stockNumber) {
+            this.stockNumber = stockNumber;
+        }
+
+      public Integer getStatus() {
+            return status;
+      }
+
+      public void setStatus(Integer status) {
+            this.status = status;
+      }
+
+      public Integer getFlagMoreThree() {
+            return flagMoreThree;
+      }
+
+      public void setFlagMoreThree(Integer flagMoreThree) {
+            this.flagMoreThree = flagMoreThree;
+      }
+
+      public String getLineItemNumber() {
+            return lineItemNumber;
+      }
+
+      public void setLineItemNumber(String lineItemNumber) {
+            this.lineItemNumber = lineItemNumber;
+      }
+
+      public String getRequisition() {
+            return requisition;
+      }
+
+      public void setRequisition(String requisition) {
+            this.requisition = requisition;
+      }
+
+      public String getUserName() {
+            return userName;
+      }
+
+      public void setUserName(String userName) {
+            this.userName = userName;
+      }
+
+      public String getFullName() {
+            return fullName;
+      }
+
+      public void setFullName(String fullName) {
+            this.fullName = fullName;
+      }
+
+      public String getItemDetail() {
+            return itemDetail;
+      }
+
+      public void setItemDetail(String itemDetail) {
+            this.itemDetail = itemDetail;
+      }
+
+      public String getTheFactory() {
+            return theFactory;
+      }
+
+      public void setTheFactory(String theFactory) {
+            this.theFactory = theFactory;
+      }
+
+      public String getReservedNumberr() {
+            return reservedNumberr;
+      }
+
+      public void setReservedNumberr(String reservedNumberr) {
+            this.reservedNumberr = reservedNumberr;
+      }
+
+      public String getReserveLineNumber() {
+            return reserveLineNumber;
+      }
+
+      public void setReserveLineNumber(String reserveLineNumber) {
+            this.reserveLineNumber = reserveLineNumber;
+      }
+
+      public String getProjectDefinition() {
+            return projectDefinition;
+      }
+
+      public void setProjectDefinition(String projectDefinition) {
+            this.projectDefinition = projectDefinition;
+      }
+
+      public String getWbsElement() {
+            return wbsElement;
+      }
+
+      public void setWbsElement(String wbsElement) {
+            this.wbsElement = wbsElement;
+      }
+
+      public String getMaterialCode() {
+            return materialCode;
+      }
+
+      public void setMaterialCode(String materialCode) {
+            this.materialCode = materialCode;
+      }
+
+      public String getMaterialDescription() {
+            return materialDescription;
+      }
+
+      public void setMaterialDescription(String materialDescription) {
+            this.materialDescription = materialDescription;
+      }
+
+      public String getMeasuringUnit() {
+            return measuringUnit;
+      }
+
+      public void setMeasuringUnit(String measuringUnit) {
+            this.measuringUnit = measuringUnit;
+      }
+
+    public Double getQuantityDemanded() {
+        return quantityDemanded;
+    }
+
+    public void setQuantityDemanded(Double quantityDemanded) {
+        this.quantityDemanded = quantityDemanded;
+    }
+
+    public Double getQuantityDelivered() {
+        return quantityDelivered;
+    }
+
+    public void setQuantityDelivered(Double quantityDelivered) {
+        this.quantityDelivered = quantityDelivered;
+    }
+
+    public String getChangeData() {
+        return changeData;
+    }
+
+    public Double getWhetherStock() {
+        return whetherStock;
+    }
+
+    public void setWhetherStock(Double whetherStock) {
+        this.whetherStock = whetherStock;
+    }
+
+    public void setChangeData(String changeData) {
+            this.changeData = changeData;
+      }
+
+      public String getRequisitionCostCenter() {
+            return requisitionCostCenter;
+      }
+
+      public void setRequisitionCostCenter(String requisitionCostCenter) {
+            this.requisitionCostCenter = requisitionCostCenter;
+      }
+
+      public String getFactoryDescription() {
+            return factoryDescription;
+      }
+
+      public void setFactoryDescription(String factoryDescription) {
+            this.factoryDescription = factoryDescription;
+      }
+
+      public String getProjectDepartment() {
+            return projectDepartment;
+      }
+
+      public void setProjectDepartment(String projectDepartment) {
+            this.projectDepartment = projectDepartment;
+      }
+
+      public String getBatch() {
+            return batch;
+      }
+
+      public void setBatch(String batch) {
+            this.batch = batch;
+      }
+
+      public String getPlanningDivision() {
+            return planningDivision;
+      }
+
+      public void setPlanningDivision(String planningDivision) {
+            this.planningDivision = planningDivision;
+      }
+
+      public String getTheOrder() {
+            return theOrder;
+      }
+
+      public void setTheOrder(String theOrder) {
+            this.theOrder = theOrder;
+      }
+
+      public String getWbsDescription() {
+            return wbsDescription;
+      }
+
+      public void setWbsDescription(String wbsDescription) {
+            this.wbsDescription = wbsDescription;
+      }
+
+      public String getPurposeMark() {
+            return purposeMark;
+      }
+
+      public void setPurposeMark(String purposeMark) {
+            this.purposeMark = purposeMark;
+      }
+
+      public String getSpecialStock() {
+            return specialStock;
+      }
+
+      public void setSpecialStock(String specialStock) {
+            this.specialStock = specialStock;
+      }
+
+      public String getAppointmentDate() {
+            return appointmentDate;
+      }
+
+      public void setAppointmentDate(String appointmentDate) {
+            this.appointmentDate = appointmentDate;
+      }
+
+      public String getPurposeIdentification() {
+            return purposeIdentification;
+      }
+
+      public void setPurposeIdentification(String purposeIdentification) {
+            this.purposeIdentification = purposeIdentification;
+      }
+
+      public String getReturnId() {
+            return returnId;
+      }
+
+      public void setReturnId(String returnId) {
+            this.returnId = returnId;
+      }
+
+      public String getReturnMessage() {
+            return returnMessage;
+      }
+
+      public void setReturnMessage(String returnMessage) {
+            this.returnMessage = returnMessage;
+      }
+}

+ 35 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/entity/ProjectAcquisition.java

@@ -0,0 +1,35 @@
+package com.jeeplus.modules.sg.managementcenter.project.entity;
+
+import com.jeeplus.modules.sg.picking.activiti.entity.Acquisition;
+
+import java.util.Date;
+
+public class ProjectAcquisition {
+    private String id;
+    private String projectNumber;
+    private Date auditTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getProjectNumber() {
+        return projectNumber;
+    }
+
+    public void setProjectNumber(String projectNumber) {
+        this.projectNumber = projectNumber;
+    }
+
+    public Date getAuditTime() {
+        return auditTime;
+    }
+
+    public void setAuditTime(Date auditTime) {
+        this.auditTime = auditTime;
+    }
+}

+ 26 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/PickingRequisitionMapper.java

@@ -0,0 +1,26 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.managementcenter.project.mapper;
+
+import com.jeeplus.core.persistence.BaseMapper;
+import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+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.entity.User;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@MyBatisMapper
+public interface PickingRequisitionMapper extends BaseMapper<PickingRequisition> {
+    int insertList(@Param("list") List<PickingRequisition> list);
+    List<PickingRequisition> findListPicking(List<PickingRequisition> pickingRequisitions);
+
+    //查找登录名id
+    List<String> findUserId(@Param("list") List<String> list);
+
+    List<Acquisition> findListAcquisition(@Param("list")List<Project> projects);
+}

+ 4 - 5
src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/ProjectMapper.java

@@ -5,16 +5,12 @@ package com.jeeplus.modules.sg.managementcenter.project.mapper;
 
 import com.jeeplus.core.persistence.BaseMapper;
 import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.managementcenter.project.entity.PickingRequisition;
 import com.jeeplus.modules.sg.managementcenter.project.entity.Project;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
-/**
- * 请假表单MAPPER接口
- * @author lgf
- * @version 2018-06-12
- */
 @MyBatisMapper
 public interface ProjectMapper extends BaseMapper<Project> {
 
@@ -36,4 +32,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
     Project findUser(String procInsId);
 
     Integer updatePreConstruction(Project project);
+
+    //查找项目信息
+    List<Project> findListProjectRequisitions(@Param("list")List<PickingRequisition> pickingRequisitions);
 }

+ 315 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/xml/PickingRequisitionMapper.xml

@@ -0,0 +1,315 @@
+<?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.jeeplus.modules.sg.managementcenter.project.mapper.PickingRequisitionMapper">
+    
+	<sql id="pickingColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.lineItemNumber AS lineItemNumber,
+		a.requisition AS requisition,
+		a.userName AS userName,
+		a.fullName AS fullName,
+		a.itemDetail AS itemDetail,
+		a.theFactory AS theFactory,
+		a.reservedNumberr AS reservedNumberr,
+		a.reserveLineNumber AS reserveLineNumber,
+		a.projectDefinition AS projectDefinition,
+		a.wbsElement AS wbsElement,
+		a.materialCode AS materialCode,
+		a.materialDescription AS materialDescription,
+		a.measuringUnit AS measuringUnit,
+		a.quantityDemanded AS quantityDemanded,
+		a.quantityDelivered AS quantityDelivered,
+		a.changeData AS changeData,
+		a.requisitionCostCenter AS requisitionCostCenter,
+		a.factoryDescription AS factoryDescription,
+		a.projectDepartment AS projectDepartment,
+		a.batch AS batch,
+		a.planningDivision AS planningDivision,
+		a.theOrder AS theOrder,
+		a.wbsDescription AS wbsDescription,
+		a.purposeMark AS purposeMark,
+		a.specialStock AS specialStock,
+		a.appointmentDate AS appointmentDate,
+		a.purposeIdentification AS purposeIdentification,
+		a.returnId AS returnId,
+		a.returnMessage AS returnMessage
+	</sql>
+    
+	<select id="get" resultType="PickingRequisition" >
+		SELECT 
+			<include refid="pickingColumns"/>
+		FROM xm_picking_contrast a
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="PickingRequisition" >
+		SELECT
+		<include refid="pickingColumns"/>
+		FROM xm_picking_contrast a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="PickingRequisition" >
+		SELECT
+		<include refid="pickingColumns"/>
+		FROM xm_picking_contrast a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			${dataScope}
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO xm_picking_contrast(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			lineItemNumber,
+			requisition,
+			userName,
+			fullName,
+			itemDetail,
+			theFactory,
+			reservedNumberr,
+			reserveLineNumber,
+			projectDefinition,
+			wbsElement,
+			materialCode,
+			materialDescription,
+			measuringUnit,
+			quantityDemanded,
+			quantityDelivered,
+			changeData,
+			requisitionCostCenter,
+			factoryDescription,
+			projectDepartment,
+			batch,
+			planningDivision,
+			theOrder,
+			wbsDescription,
+			purposeMark,
+			specialStock,
+			appointmentDate,
+			purposeIdentification,
+			returnId,
+			returnMessage
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{lineItemNumber},
+			#{requisition},
+			#{userName},
+			#{fullName},
+			#{itemDetail},
+			#{theFactory},
+			#{reservedNumberr},
+			#{reserveLineNumber},
+			#{projectDefinition},
+			#{wbsElement},
+			#{materialCode},
+			#{materialDescription},
+			#{measuringUnit},
+			#{quantityDemanded},
+			#{quantityDelivered},
+			#{changeData},
+			#{requisitionCostCenter},
+			#{factoryDescription},
+			#{projectDepartment},
+			#{batch},
+			#{planningDivision},
+			#{theOrder},
+			#{wbsDescription},
+			#{purposeMark},
+			#{specialStock},
+			#{appointmentDate},
+			#{purposeIdentification},
+			#{returnId},
+			#{returnMessage}
+		)
+	</insert>
+
+	<insert id="insertList">
+		replace INTO xm_picking_contrast(
+		id,
+		create_by,
+		create_date,
+		update_by,
+		update_date,
+		remarks,
+		del_flag,
+		lineItemNumber,
+		requisition,
+		userName,
+		fullName,
+		itemDetail,
+		theFactory,
+		reservedNumberr,
+		reserveLineNumber,
+		projectDefinition,
+		wbsElement,
+		materialCode,
+		materialDescription,
+		measuringUnit,
+		quantityDemanded,
+		quantityDelivered,
+		changeData,
+		requisitionCostCenter,
+		factoryDescription,
+		projectDepartment,
+		batch,
+		planningDivision,
+		theOrder,
+		wbsDescription,
+		purposeMark,
+		specialStock,
+		appointmentDate,
+		purposeIdentification,
+		returnId,
+		returnMessage
+		) VALUES
+		<foreach collection="list" item="item" index="index" separator="," >
+			(
+			#{item.id},
+			#{item.createBy.id},
+			#{item.createDate},
+			#{item.updateBy.id},
+			#{item.updateDate},
+			#{item.remarks},
+			#{item.delFlag},
+			#{item.lineItemNumber},
+			#{item.requisition},
+			#{item.userName},
+			#{item.fullName},
+			#{item.itemDetail},
+			#{item.theFactory},
+			#{item.reservedNumberr},
+			#{item.reserveLineNumber},
+			#{item.projectDefinition},
+			#{item.wbsElement},
+			#{item.materialCode},
+			#{item.materialDescription},
+			#{item.measuringUnit},
+			#{item.quantityDemanded},
+			#{item.quantityDelivered},
+			#{item.changeData},
+			#{item.requisitionCostCenter},
+			#{item.factoryDescription},
+			#{item.projectDepartment},
+			#{item.batch},
+			#{item.planningDivision},
+			#{item.theOrder},
+			#{item.wbsDescription},
+			#{item.purposeMark},
+			#{item.specialStock},
+			#{item.appointmentDate},
+			#{item.purposeIdentification},
+			#{item.returnId},
+			#{item.returnMessage}
+		)
+		</foreach>
+	</insert>
+
+	<update id="update">
+		UPDATE xm_picking_contrast SET
+
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM xm_picking_contrast
+		WHERE id = #{id}
+	</update>
+	
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE xm_picking_contrast SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="PickingRequisition" statementType="STATEMENT">
+		select * FROM xm_picking_contrast  where ${id} = '${value}'
+	</select>
+
+	<select id="findListPicking" parameterType="java.util.List" resultType="com.jeeplus.modules.sg.managementcenter.project.entity.PickingRequisition">
+		select
+		<include refid="pickingColumns"/>
+		FROM xm_picking_contrast a
+		WHERE a.del_flag = '0'
+		and a.projectDefinition in
+		<if test="list != null">
+			<foreach collection="list" index="index" item="item" open="("
+					 separator="," close=")">
+				#{item.projectDefinition}
+			</foreach>
+		</if>
+	</select>
+
+	<select id="findUserId" parameterType="java.util.List" resultType="java.lang.String">
+		select a.user_id from sys_user_role a
+		where  a.role_id in
+		(
+			select r.id from sys_role r where r.del_flag = '0' and  r.name in
+			<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
+				#{item}
+			</foreach>
+		)
+	</select>
+
+	<select id="findListAcquisition" parameterType="java.util.List" resultType="com.jeeplus.modules.sg.picking.activiti.entity.Acquisition">
+		select
+		a.id AS "id",
+		a.md_img AS "mdImg",
+		a.md_big_class AS "mdBigClass",
+		a.md_the_class AS "mdTheClass",
+		a.md_small_class AS "mdSmallClass",
+		a.md_unit AS "mdUnit"
+		FROM md_acquisition_process a
+		WHERE a.del_flag = '0'
+		and a.project_id in
+		<if test="list != null">
+			<foreach collection="list" index="index" item="item" open="("
+					 separator="," close=")">
+				#{item.id}
+			</foreach>
+		</if>
+	</select>
+</mapper>

+ 13 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/mapper/xml/ProjectMapper.xml

@@ -554,5 +554,18 @@
 		WHERE require_name = (select project_name from xm_construction_clarificaiton where proc_ins_id=#{procInsId});
 	</select>
 
+	<select id="findListProjectRequisitions" parameterType="java.util.List" resultType="com.jeeplus.modules.sg.managementcenter.project.entity.Project">
+		select
+		<include refid="projectColumns"/>
+		FROM xm_project_details a
+		WHERE a.del_flag = '0'
+		and a.projectNumber in
+		<if test="list != null">
+			<foreach collection="list" index="index" item="item" open="("
+					 separator="," close=")">
+				#{item.projectDefinition}
+			</foreach>
+		</if>
+	</select>
 
 </mapper>

+ 72 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/service/PickingRequisitionService.java

@@ -0,0 +1,72 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.sg.managementcenter.project.service;
+
+import com.jeeplus.core.persistence.Page;
+import com.jeeplus.core.service.CrudService;
+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.mapper.PickingRequisitionMapper;
+import com.jeeplus.modules.sg.picking.activiti.entity.Acquisition;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 请假表单Service
+ * @author lgf
+ * @version 2018-06-12
+ */
+@Service
+@Transactional(readOnly = true)
+public class PickingRequisitionService extends CrudService<PickingRequisitionMapper, PickingRequisition> {
+    @Autowired
+	private PickingRequisitionMapper pickingRequisitionMapper;
+
+	public PickingRequisition get(String id) {
+		PickingRequisition pickingRequisition = super.get(id);
+		return pickingRequisition;
+	}
+	
+	public List<PickingRequisition> findList(PickingRequisition pickingRequisition) {
+		return super.findList(pickingRequisition);
+	}
+	
+	public Page<PickingRequisition> findPage(Page<PickingRequisition> page, PickingRequisition pickingRequisition) {
+		return super.findPage(page, pickingRequisition);
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(PickingRequisition pickingRequisition) {
+		super.save(pickingRequisition);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(PickingRequisition pickingRequisition) {
+		super.delete(pickingRequisition);
+	}
+
+	@Transactional(readOnly = false)
+	public void saveList(List<PickingRequisition> pickingRequisitions) {
+		for (PickingRequisition pickingRequisition:pickingRequisitions){
+			pickingRequisition.preInsert();
+		}
+		pickingRequisitionMapper.insertList(pickingRequisitions);
+	}
+	//根据项目定义号查询相同的项目定义
+	public List<PickingRequisition> pickingRequisitions(List<PickingRequisition> pickingRequisitions){
+		return pickingRequisitionMapper.findListPicking(pickingRequisitions);
+	}
+	//根据角色名查找用户id
+	public List<String> findUserId(List<String> list){
+		return pickingRequisitionMapper.findUserId(list);
+	}
+
+	//根据项目id去查找项目领导时间
+	public List<Acquisition> getFindListDate(List<Project> projects){
+		return pickingRequisitionMapper.findListAcquisition(projects);
+	}
+}

+ 6 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/service/ProjectService.java

@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.UUID;
 
 import com.jeeplus.modules.sg.financial.settlement.entity.MaintainData;
+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.mapper.ProjectMapper;
 import io.swagger.models.auth.In;
@@ -154,4 +155,9 @@ public class ProjectService extends CrudService<ProjectMapper, Project> {
 	public void updatePreConstruction(Project project){
 		projectMapper.updatePreConstruction(project);
 	}
+
+	//根据项目定义号去查找项目
+	public List<Project> findListProjectPicking(List<PickingRequisition> pickingRequisitions){
+		return projectMapper.findListProjectRequisitions(pickingRequisitions);
+	}
 }

+ 319 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/util/PickingInfo.java

@@ -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;
+    }
+}

+ 90 - 0
src/main/java/com/jeeplus/modules/sg/managementcenter/project/web/ProjectController.java

@@ -8,14 +8,27 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.ConstraintViolationException;
 
+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.oa.service.OaNotifyService;
+import com.jeeplus.modules.sg.managementcenter.materialInventory.entity.MaterialInventory;
+import com.jeeplus.modules.sg.managementcenter.materialInventory.service.MaterialInventoryService;
+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.mapper.PickingRequisitionMapper;
+import com.jeeplus.modules.sg.managementcenter.project.service.PickingRequisitionService;
 import com.jeeplus.modules.sg.managementcenter.project.service.ProjectService;
 import com.jeeplus.modules.sg.managementcenter.project.util.ImportUtil;
+import com.jeeplus.modules.sg.managementcenter.project.util.PickingInfo;
 import com.jeeplus.modules.sg.managementcenter.project.util.ProExcelInfo;
+import com.jeeplus.modules.sg.picking.activiti.entity.Acquisition;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.shiro.authz.annotation.Logical;
@@ -49,6 +62,14 @@ public class ProjectController extends BaseController {
 
 	@Autowired
 	private ProjectService projectService;
+
+	@Autowired
+	private PickingRequisitionService pickingRequisitionService;
+
+	@Autowired
+	private MaterialInventoryService materialInventoryService;
+	@Autowired
+	private OaNotifyService oaNotifyService;//通知服务类
 	
 	@ModelAttribute
 	public Project get(@RequestParam(required=false) String id) {
@@ -306,4 +327,73 @@ public class ProjectController extends BaseController {
 		}
 		return j;
     }
+	/**
+	 * 导入Excel数据
+		领料单
+	 */
+	@ResponseBody
+	@RequiresPermissions("sg:managementcenter:project:import")
+	@RequestMapping(value = "importPicking")
+	public AjaxJson importFileRequisition(@RequestParam("file")MultipartFile file, HttpServletResponse response, HttpServletRequest request) throws IOException, InvalidFormatException {
+		AjaxJson j = new AjaxJson();
+//		try {
+			ImportUtil importUtil = new ImportUtil(file, 0, 0);
+			//读取表格list
+			List<PickingRequisition> listPickRequisition = PickingInfo.getListPickRequisition(importUtil);
+			/*
+				如下3个list是导入操作(得到最终保存数据库的集合)。对领料单进行数据库保存。
+			 */
+			List<PickingRequisition> duplicateRemoval = PickingInfo.getDuplicateRemoval(listPickRequisition);//去重集合
+			List<PickingRequisition> pickingRequisitions = pickingRequisitionService.pickingRequisitions(duplicateRemoval);//得到数据库中数据
+			List<PickingRequisition> sureSavePicking = PickingInfo.getSureSavePicking(pickingRequisitions, listPickRequisition);//参数1:得到数据库集合 参数2:读取表格list
+//			if (null!=sureSavePicking&&sureSavePicking.size()>0){
+//				pickingRequisitionService.saveList(sureSavePicking);
+//			}
+			/*
+				发送通知方法集合
+			 */
+			//根据项目定义号去项目表中查找项目信息
+			List<Project> listProjectPicking = projectService.findListProjectPicking(duplicateRemoval);
+			//根据项目的id去数据库中查找项目领导审核时间
+			List<Acquisition> findListDate = pickingRequisitionService.getFindListDate(listProjectPicking);
+			//不一致且超过三天的集合
+			List<PickingRequisition> notifyPickingRequisitions = PickingInfo.getJudgeDatPicking(listPickRequisition);
+			//根据物料编码进行去重
+			List<PickingRequisition> duplicateRemovalMaterCode = PickingInfo.getDuplicateRemovalMaterCode(notifyPickingRequisitions);
+			//得到库存对应的集合
+			List<MaterialInventory> byListPicking = materialInventoryService.findByListPicking(duplicateRemovalMaterCode);
+			//所有缺货未缺货信息的登记
+			List<PickingRequisition> whetherStock = PickingInfo.getWhetherStock(notifyPickingRequisitions, byListPicking);
+			//得到非缺货信息1的通知
+			String noStock = PickingInfo.getNoStock(whetherStock);
+			//得到缺货信息2的通知
+			String yesStock1 = PickingInfo.getYesStock1(whetherStock);
+			//发送通知方法
+			//非缺货信息1
+			if (!"".equals(noStock)){
+				List<String> listUserId = PickingInfo.getListUserId(PickingInfo.CS_XMJL);
+				List<String> userId = pickingRequisitionService.findUserId(listUserId);
+				String stringJoiningTogether = PickingInfo.getStringJoiningTogether(userId);//获取通知人
+				OaNotify oaNotify = new OaNotify();
+				oaNotify.setType("5");
+				oaNotify.setTitle("非缺货信息");
+				oaNotify.setContent(noStock);
+				oaNotify.setStatus("1");
+				oaNotify.setOaNotifyRecordIds(stringJoiningTogether);
+				oaNotifyService.save(oaNotify);
+				List<OaNotifyRecord> list = oaNotify.getOaNotifyRecordList();
+				for(OaNotifyRecord o : list){
+					//发送通知到客户端
+					ServletContext context = SpringContextHolder
+							.getBean(ServletContext.class);
+					new SystemInfoSocketHandler().sendMessageToUser(UserUtils.get(o.getUser().getId()).getLoginName(), "收到一条新通知,请到我的通知查看!");
+				}
+			}
+			j.setMsg( "已成功导入 "+sureSavePicking.size()+" 条领料表单记录");
+//		} catch (Exception e) {
+//			j.setSuccess(false);
+//			j.setMsg("导入领料表单失败!失败信息:"+e.getMessage());
+//		}
+		return j;
+	}
 }

+ 27 - 0
src/main/webapp/webpage/modules/sg/managementcenter/project/projectList.js

@@ -436,6 +436,33 @@ $(document).ready(function() {
 	    	       }
 			}); 
 		});
+    $("#btnImportPicking").click(function(){
+        jp.open({
+            type: 2,
+            area: [500, 200],
+            auto: true,
+            title:"导入领料单",
+            content: "${ctx}/tag/importExcel" ,
+            btn: ['确定', '关闭'],
+            btn1: function(index, layero){
+                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                iframeWin.contentWindow.importExcel('${ctx}/sg/managementcenter/project/importPicking', function (data) {
+                    if(data.success){
+                        jp.success(data.msg);
+                        refresh();
+                    }else{
+                        jp.error(data.msg);
+                    }
+                    jp.close(index);
+                });//调用保存事件
+                return false;
+            },
+
+            btn2: function(index){
+                //  jp.close(index);
+            }
+        });
+    });
 	 $("#export").click(function(){//导出Excel文件
 			jp.downloadFile('${ctx}/sg/managementcenter/project/export');
 	  });

+ 3 - 1
src/main/webapp/webpage/modules/sg/managementcenter/project/projectList.jsp

@@ -59,12 +59,14 @@
 			<shiro:hasPermission name="sg:managementcenter:project:import">
 				<button id="btnImport" class="btn btn-info"><i class="fa fa-folder-open-o"></i> 导入</button>
 			</shiro:hasPermission>
+			<shiro:hasPermission name="sg:managementcenter:project:import">
+				<button id="btnImportPicking" class="btn btn-info"><i class="fa fa-folder-open-o"></i> 导入领料单</button>
+			</shiro:hasPermission>
 			<shiro:hasPermission name="sg:managementcenter:project:export">
 	        		<button id="export" class="btn btn-warning">
 					<i class="fa fa-file-excel-o"></i> 导出
 				</button>
 			</shiro:hasPermission>
-
 		    </div>
 		
 	<!-- 表格 -->