From f2d6527297ad1ae8aad6881d4c672e5bc9c1f908 Mon Sep 17 00:00:00 2001
From: lyfO_o <764716047@qq.com>
Date: 星期四, 28 十月 2021 11:05:48 +0800
Subject: [PATCH] 采购管理新增:供应商需求管理

---
 src/main/java/com/nanometer/smartlab/service/OpeApplyService.java         |    4 
 src/main/webapp/WEB-INF/spring-menu.xml                                   |    6 +
 src/main/java/com/nanometer/smartlab/controller/RequireMngController.java |   26 ++++
 src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml                  |   79 +++++++++++++
 src/main/webapp/supplier_require_mng.xhtml                                |  180 ++++++++++++++++++++++++++++++
 src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java                 |    3 
 src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java     |   37 ++++++
 7 files changed, 335 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java b/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
index b1ac5e2..02d6601 100644
--- a/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
@@ -36,6 +36,7 @@
     private OpeOrderService opeOrderService;
 
     private LazyDataModel<OpeApply> dataModel;
+    private LazyDataModel<OpeApply> supplerRequireMngDataModel;
     private OpeOrder opeOrder;
     private List<OpeApply> selectedList;
     private String reagentName;
@@ -174,6 +175,31 @@
         return dataModel;
     }
 
+    public LazyDataModel<OpeApply> getSupplerRequireMngDataModel() {
+        return new LazyDataModel<OpeApply>() {
+            @Override
+            public List<OpeApply> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
+                List<OpeApply> list = null;
+                try {
+                    int count = opeApplyService.getOpeApplySupplerRequireMngTotalCount(getUser(),reagentName, startDeadline, endDeadline, ApplyStatus.APPROVED.getKey(),(byte)1);
+                    this.setRowCount(count);
+                    if (count > 0) {
+                        list = opeApplyService.getOpeApplySupplerRequireMngList(getUser(),reagentName, startDeadline, endDeadline, ApplyStatus.APPROVED.getKey(), first, pageSize,(byte)1);
+                    }
+                } catch (Exception e) {
+                    logger.error(e);
+                }
+                selectedList = null;
+                return list;
+            }
+
+            @Override
+            public OpeApply getRowData(String rowKey) {
+                return opeApplyService.getOpeApply(rowKey);
+            }
+        };
+    }
+
     public OpeOrder getOpeOrder() {
         return opeOrder;
     }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
index 99904eb..3503bfc 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
@@ -63,4 +63,7 @@
 
     List<Map> getApplyControlInfo();
 
+    int getOpeApplySupplerRequireMngTotalCount(Map<String, Object> params);
+
+    List<OpeApply> getOpeApplySupplerRequireMngList(Map<String, Object> params);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
index e3787bf..f4c2a24 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
@@ -611,6 +611,85 @@
 		)
 
     </select>
+    <select id="getOpeApplySupplerRequireMngTotalCount" resultType="java.lang.Integer">
+        select count(1)
+        from ope_apply as oa
+        left join sys_reagent sr on oa.reagent_id = sr.id
+        left join sys_supplier as ss on sr.supplier_id = ss.id
+        left join sys_user as su on oa.apply_user_id = su.id
+        left join sys_user as suApprove on oa.approve_user_id = suApprove.id
+        left join sys_user as sys on sys.id=oa.before_approve_user_id
+        left join sys_user as fir on fir.id=oa.first_user
+        left join base_meta as bm on sr.product_home = bm.id
+        left join base_meta as bm1 on bm1.id = sr.control_products
+        where oa.valid_flag = 1
+        <if test="isShow != null and isShow ==0">
+            and (ss.valid_flag = 1 or sr.type = 0)
+        </if>
+        <if test="reagentName != null and reagentName != ''">
+            and sr.name like concat("%",#{reagentName},"%")
+        </if>
+        <if test="startDeadline != null">
+            and oa.deadline >= #{startDeadline}
+        </if>
+        <if test="endDeadline != null">
+            and #{endDeadline} >= oa.deadline
+        </if>
+        <if test="status != null">
+            and oa.status = #{status}
+        </if>
+        <if test="company != null and company != ''">
+            and ss.name = #{company}
+        </if>
+
+    </select>
+    <select id="getOpeApplySupplerRequireMngList" parameterType="java.util.Map" resultMap="OpeApply">
+
+        select oa.*,sys.name as secondUserName,
+        sr.name as reagentName,sr.price as reagentPrice ,sr.cas as reagentCas, sr.reagent_type as reagentType, sr.reagent_character as reagentCharacter, sr.supplier_id as reagentSupplierId,
+        sr.reagent_format as reagentFormat, sr.main_metering as reagentMainMetering, sr.reagent_unit as reagentUnit, sr.per_box as reagentPerBox,
+        sr.memo as reagentMemo, sr.valid_flag as reagentValidFlag, sr.create_time as reagentCreateTime, sr.update_time as reagentUpdateTime, sr.product_sn as reagentProductSn,
+        sr.dangerous_flag as reagentDangerousFlag,sr.control_products as controlProducts,sr.product_home as productHome,
+        ss.name as supplierName,
+        su.name as applyUserName,
+        suApprove.name as approveUserName,
+        bm.meta_value as productHomeName,
+        fir.name as firName,
+        ss.valid_flag  as supplierFlag,
+        sr.type as type
+        from ope_apply as oa
+        left join sys_reagent sr on oa.reagent_id = sr.id
+        left join sys_supplier as ss on sr.supplier_id = ss.id
+        left join sys_user as su on oa.apply_user_id = su.id
+        left join sys_user as suApprove on oa.approve_user_id = suApprove.id
+        left join sys_user as sys on sys.id=oa.before_approve_user_id
+        left join sys_user as fir on fir.id=oa.first_user
+        left join base_meta as bm on sr.product_home = bm.id
+        left join base_meta as bm1 on bm1.id = sr.control_products
+        where oa.valid_flag = 1
+        <if test="isShow != null and isShow ==0">
+            and (ss.valid_flag = 1 or sr.type = 0)
+        </if>
+        <if test="company != null and company != ''">
+            and ss.name = #{company}
+        </if>
+        <if test="reagentName != null and reagentName != ''">
+            and sr.name like concat("%",#{reagentName},"%")
+        </if>
+        <if test="startDeadline != null">
+            and oa.deadline >= #{startDeadline}
+        </if>
+        <if test="endDeadline != null">
+            and #{endDeadline} >= oa.deadline
+        </if>
+        <if test="status != null">
+            and oa.status = #{status}
+        </if>
+        order by oa.create_time desc
+        <if test="first != null and pageSize != null">
+            limit #{first}, #{pageSize}
+        </if>
+    </select>
 
 
     <update id="updateByReId" parameterType="java.util.Map">
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
index 95dc9f1..08ab215 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -77,4 +77,8 @@
     void importApply(FileUploadEvent event, SysUser user) throws IOException;
 
     OpeApplyReserve getOpeApplyReserveListByNameForRowData(String rowKey);
+
+    int getOpeApplySupplerRequireMngTotalCount(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int key, byte b);
+
+    List<OpeApply> getOpeApplySupplerRequireMngList(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int key, int first, int pageSize, byte b);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
index 23bfaf4..2c60a06 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -67,6 +67,8 @@
     SysSequenceService sysSequenceService;
 	@Resource
 	private SysUserService sysUserService;
+    @Resource
+    private BaseMetaService baseMetaService;
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<OpeApply> getOpeApplyList(String reagentName, Timestamp startDeadline, String controlProduct,Timestamp endDeadline, Integer status,
@@ -888,4 +890,39 @@
         return opeApplyDao.getOpeApplyReserveListByNameForRowData(rowKey);
     }
 
+    @Override
+    public int getOpeApplySupplerRequireMngTotalCount(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int status, byte isShow) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("reagentName",reagentName );
+        params.put("startDeadline", startDeadline);
+        params.put("endDeadline", endDeadline);
+        params.put("status", status);
+        params.put("isShow", isShow);
+        //看到供应商是自己的单位的数据
+        String company = baseMetaService.getBaseMetaValue(user.getCompany());
+        if (user.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
+                && user.getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) {
+            params.put("company", company);
+        }
+        return this.opeApplyDao.getOpeApplySupplerRequireMngTotalCount(params);
+    }
+
+    @Override
+    public List<OpeApply> getOpeApplySupplerRequireMngList(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int status, int first, int pageSize, byte isShow) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("reagentName", reagentName);
+        params.put("startDeadline", startDeadline);
+        params.put("endDeadline", endDeadline);
+        params.put("status", status);
+        params.put("isShow", isShow);
+        //看到供应商是自己的单位的数据
+        String company = baseMetaService.getBaseMetaValue(user.getCompany());
+        if (user.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
+                && user.getSeeFlag().getKey() != SeeFlag.LEADING.getKey()) {
+            params.put("company", company);
+        }
+
+        return this.opeApplyDao.getOpeApplySupplerRequireMngList(params);
+    }
+
 }
diff --git a/src/main/webapp/WEB-INF/spring-menu.xml b/src/main/webapp/WEB-INF/spring-menu.xml
index cd1d4b4..b6b5713 100644
--- a/src/main/webapp/WEB-INF/spring-menu.xml
+++ b/src/main/webapp/WEB-INF/spring-menu.xml
@@ -37,6 +37,12 @@
                         <property name="privilegeCode" value="require_mng"></property>
                     </bean>
                     <bean class="com.nanometer.smartlab.model.MenuModel">
+                        <property name="id" value="supplier_require_mng"></property>
+                        <property name="title" value="供应商需求管理"></property>
+                        <property name="page" value="supplier_require_mng"></property>
+                        <property name="privilegeCode" value="supplier_require_mng"></property>
+                    </bean>
+                    <bean class="com.nanometer.smartlab.model.MenuModel">
                         <property name="id" value="order_mng"></property>
                         <property name="title" value="订单管理"></property>
                         <property name="page" value="order_mng"></property>
diff --git a/src/main/webapp/supplier_require_mng.xhtml b/src/main/webapp/supplier_require_mng.xhtml
new file mode 100644
index 0000000..c0b2154
--- /dev/null
+++ b/src/main/webapp/supplier_require_mng.xhtml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:c="http://java.sun.com/jsp/jstl/core">
+<head></head>
+<ui:composition>
+    <h:form id="requireMngForm">
+        <p:panel styleClass="center-header">
+            <p:outputLabel styleClass="title" value="供应商需求管理"></p:outputLabel>
+
+            <p:panelGrid styleClass="filter" columns="7">
+                <p:outputLabel value="申购产品:"></p:outputLabel>
+                <p:inputText value="#{requireMngController.reagentName}"></p:inputText>
+
+                <p:outputLabel value="货期:"></p:outputLabel>
+                <p:calendar value="#{requireMngController.startDeadline}" converter="timestampConvert"
+                            pattern="yyyy-MM-dd" locale="zh_CN"></p:calendar>
+                <p:outputLabel value=" ~ " style="margin-left: 10px;margin-right: 10px"></p:outputLabel>
+                <p:calendar value="#{requireMngController.endDeadline}" converter="timestampConvert"
+                            pattern="yyyy-MM-dd" locale="zh_CN"></p:calendar>
+
+                <p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
+            </p:panelGrid>
+        </p:panel>
+        <p:panel styleClass="center-body">
+            <p:panelGrid columns="3" styleClass="btn">
+                <p:commandButton value="生成订单" styleClass="new-btn"
+                                 process="@form" update=":centerRootPanel"
+                                 actionListener="#{requireMngController.onNewBtnClick}"></p:commandButton>
+                <p:commandButton value="查看" styleClass="view-btn"
+                                 process="@form"
+                                 actionListener="#{requireMngController.onViewBtnClick}"
+                                 update=":dialog,:dialogForm"></p:commandButton>
+                <p:commandButton value="取消" styleClass="edit-btn" process="@form" update=":centerRootPanel"
+                                 actionListener="#{requireMngController.onCancelApplyClick}">
+                    <p:confirm header="确认" message="确认操作?"></p:confirm>
+                </p:commandButton>
+            </p:panelGrid>
+
+            <p:dataTable id="requireMngDataTable" styleClass="data-table"
+                         paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
+                         lazy="true" value="#{requireMngController.supplerRequireMngDataModel}" var="row" rowKey="#{row.id}"
+                         emptyMessage="无数据" selection="#{requireMngController.selectedList}"
+                         rows="20" pageLinks="5">
+                <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
+                <p:column headerText="订单状态" width="58px;" style="text-align: center">
+                    <h:outputText value="#{row.status!=null?row.status.text:''}"></h:outputText>
+                </p:column>
+                <p:column headerText="申购编号" width="118px;">
+                    <h:outputText value="#{row.applyCode}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="产品编号" width="94px;">
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productSn:''}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="试剂名称" width="129px;">
+                    <h:outputText value="#{row.reagent!=null?row.reagent.name:''}" style="font-size: 13px;"></h:outputText>
+                </p:column>
+
+                <p:column headerText="管制品">
+                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="规格型号" width="66px;">
+                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"  style="font-size:13px"></h:outputText>
+                </p:column>
+
+                <p:column headerText="包装">
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="含税售价">
+                    <h:outputText value="#{row.applyPrice}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="CAS号">
+                    <h:outputText value="#{row.reagent!=null?row.reagent.cas:''}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="危险性质"  width="85px;">
+                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="厂家" width="64px;">
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="供应商" width="92px;">
+                    <h:outputText value="#{row.reagent!=null?row.reagent.supplierName:''}" style="font-size: 13px;white-space: normal;"></h:outputText>
+                </p:column>
+
+                <p:column headerText="试剂类型" width="29px;">
+                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购数量" width="29px;">
+                    <h:outputText value="#{row.num}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购日期" width="73px;">
+                    <h:outputText value="#{row.createTime}">
+                        <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                    </h:outputText>
+                </p:column>
+                <p:column headerText="期望货期" width="73px;">
+                    <h:outputText value="#{row.deadline}">
+                        <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                    </h:outputText>
+                </p:column>
+                <p:column headerText="审批批注">
+                    <h:outputText value="#{row.memo}"></h:outputText>
+                </p:column>
+            </p:dataTable>
+        </p:panel>
+    </h:form>
+
+    <p:dialog modal="true" header="查看" appendTo="@(body)"
+              id="dialog" widgetVar="dialog"
+              resizable="false" width="800">
+        <h:form id="dialogForm">
+            <p:panelGrid columns="4" styleClass="content2 grid-padding-bottom2">
+                <p:outputLabel value="申购编号"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.applyCode}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="申购产品"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.reagent.name}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="CAS"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.reagent.cas}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="指定供应商"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.reagent.supplierName}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="规格"></p:outputLabel>
+                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentFormat)}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="包装"></p:outputLabel>
+                <p:inputText value="#{''.concat(requireMngController.opeApply.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentUnit))}"
+                             disabled="true"></p:inputText>
+
+                <p:outputLabel value="含税价格"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.reagent.price}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="每箱数量"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.reagent.perBox}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="申购数量"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.num}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="货期"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.deadline}" disabled="true">
+                    <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                </p:inputText>
+
+                <p:outputLabel value="申购目的"></p:outputLabel>
+                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.objective)}" disabled="true"></p:inputText>
+
+                <p:outputLabel value="申购日期"></p:outputLabel>
+                <p:inputText value="#{requireMngController.opeApply.createTime}" disabled="true">
+                    <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                </p:inputText>
+
+                <p:outputLabel value="批注"></p:outputLabel>
+                <p:inputTextarea value="#{requireMngController.opeApply.memo}"
+                                 rows="5" disabled="true"></p:inputTextarea>
+            </p:panelGrid>
+            <p:panel styleClass="btn" style="text-align: right">
+            </p:panel>
+        </h:form>
+    </p:dialog>
+</ui:composition>
+</html>

--
Gitblit v1.9.2