lyfO_o
2021-06-21 82f0f5e82cf0ff88af237ba5929dff7a2bdc4d46
申购导入和导入模板
已修改12个文件
已添加1个文件
244 ■■■■■ 文件已修改
src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/dao/SysUserDao.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/OpeApplyService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/SysReagentService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/SysUserService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/apply_mng.xhtml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/resources/template/申购导入模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
@@ -5,6 +5,7 @@
import com.nanometer.smartlab.entity.SysReagent;
import com.nanometer.smartlab.entity.SysUser;
import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
import com.nanometer.smartlab.exception.BusinessException;
import com.nanometer.smartlab.service.*;
import com.nanometer.smartlab.util.Constants;
import com.nanometer.smartlab.util.FacesUtils;
@@ -15,6 +16,7 @@
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.TabChangeEvent;
import org.primefaces.model.LazyDataModel;
@@ -297,6 +299,22 @@
        }
    }
    public void uploadApply(FileUploadEvent event){
        try {
            opeApplyService.importApply(event, getUser());
            FacesUtils.info("导入成功");
        } catch (BusinessException e) {
            FacesUtils.warn(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            FacesUtils.warn("导入失败,请联系管理员");
        }
    }
    public  HSSFWorkbook exportExcelNew(List<String> headerList, List<OpeApply> dataList) {
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
@@ -41,4 +41,11 @@
    List<SysReagent> selectReagentSafetyNum();
    void updateSafetyNum(@Param("id") String id, @Param("safetynum") Integer safetynum);
    /**
    * @Description: 根据Map里的详细传参 查询试剂个数
    * @date 2021/6/21 9:07
    */
    List<SysReagent> countReagentByDetail(@Param("params") Map detail);
}
src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
@@ -471,4 +471,43 @@
    set safetynum = #{safetynum}
    where id = #{id}
  </update>
  <select id="countReagentByDetail" resultMap="SysReagent">
    select
    *
    from sys_reagent as sr
    left join base_meta bm2 on sr.reagent_character = bm2.id
    left join base_meta bm3 on sr.main_metering = bm3.id
    left join base_meta bm4 on sr.reagent_unit = bm4.id
    left join base_meta bm5 on sr.product_home = bm5.id
    left join sys_supplier supply on sr.supplier_id = supply.id
    <where>
      <if test="params.reagent_unit != null and params.reagent_unit != ''">
        and UPPER(bm4.meta_value) = UPPER(#{params.reagent_unit})
      </if>
      <if test="params.main_metering != null and params.main_metering != ''">
        and UPPER(bm3.meta_value) = UPPER(#{params.main_metering})
      </if>
      <if test="params.product_home != null and params.product_home != ''">
        and bm5.meta_value = #{params.product_home}
      </if>
      <if test="params.reagent_character != null and params.reagent_character != ''">
        and bm2.meta_value = #{params.reagent_character}
      </if>
      <if test="params.cas != null and params.cas != ''">
        and sr.cas = #{params.cas}
      </if>
      <if test="params.product_sn != null and params.product_sn != ''">
        and sr.product_sn = #{params.product_sn}
      </if>
      <if test="params.name != null and params.name != ''">
        and sr.name = #{params.name}
      </if>
    </where>
  </select>
</mapper>
src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
@@ -63,4 +63,5 @@
    List<String> getLibrarianEmail();
    List<SysUser> getUserByName(String approveUserName);
}
src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
@@ -387,6 +387,10 @@
        and su.email is not null
        and su.email != ''
    </select>
    <select id="getUserByName" resultMap="SysUser">
    select * from sys_user
    where name = #{name} and valid_flag = 1
    </select>
    <update id="updateUserPointBySelective" parameterType="java.util.Map">
    update sys_user set point=#{point}
    <where>
src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -1,11 +1,9 @@
package com.nanometer.smartlab.service;
import com.nanometer.smartlab.entity.OpeApply;
import com.nanometer.smartlab.entity.OpeApplyReserve;
import com.nanometer.smartlab.entity.OpeOrder;
import com.nanometer.smartlab.entity.OpeWarehouseReserve;
import com.nanometer.smartlab.entity.*;
import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
import com.nanometer.smartlab.exception.BusinessException;
import org.primefaces.event.FileUploadEvent;
import java.math.BigDecimal;
import java.sql.Timestamp;
@@ -73,4 +71,6 @@
    void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) throws BusinessException,Exception;
    void btUpdateApplyAndOrder(List<OpeApply> opeList);
    void importApply(FileUploadEvent event, SysUser user);
}
src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -1,12 +1,11 @@
package com.nanometer.smartlab.service;
import com.nanometer.smartlab.dao.OpeApplyDao;
import com.nanometer.smartlab.entity.OpeApply;
import com.nanometer.smartlab.entity.OpeApplyReserve;
import com.nanometer.smartlab.entity.OpeOrder;
import com.nanometer.smartlab.entity.SysUser;
import com.nanometer.smartlab.dao.SysReagentDao;
import com.nanometer.smartlab.entity.*;
import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
import com.nanometer.smartlab.entity.enumtype.SeeFlag;
import com.nanometer.smartlab.entity.enumtype.ValidFlag;
import com.nanometer.smartlab.exception.AlarmCode;
import com.nanometer.smartlab.exception.AlarmException;
import com.nanometer.smartlab.exception.BusinessException;
@@ -15,6 +14,13 @@
import com.nanometer.smartlab.util.MessageUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.context.annotation.Lazy;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataIntegrityViolationException;
@@ -25,6 +31,8 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
@@ -51,7 +59,11 @@
    @Lazy
    @Resource
    OpeWarehouseReserveService opeWarehouseReserveService;
    @Lazy
    @Resource
    SysReagentService sysReagentService;
    @Resource
    SysSequenceService sysSequenceService;
    @Resource
    private SysUserService sysUserService;
@@ -733,4 +745,105 @@
    }
    @Override
    @Transactional
    public void importApply(FileUploadEvent event,SysUser user) {
        try {
            UploadedFile file = event.getFile();
            InputStream is = file.getInputstream();
            boolean isExcel2003 = true;
            if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) {
                isExcel2003 = false;
            }
            Workbook wb = null;
            if (isExcel2003) {
                wb = new HSSFWorkbook(is);
            } else {
                wb = new XSSFWorkbook(is);
            }
            Sheet sheet = wb.getSheetAt(0);
            int totalRows = sheet.getPhysicalNumberOfRows();
            ArrayList<OpeApply> adds = new ArrayList<>();
            Row row = null;
            int totalCells = 0;
            for (int i = 1; i < totalRows; i++) {
                List<String> valuesList = new ArrayList<String>();
                row = sheet.getRow(i);
                totalCells = row.getPhysicalNumberOfCells();
                for (int t = 0; t < totalCells; t++) {
                    String cellInfo = "";
                    if (row.getCell(t) != null) {
                        if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) {
                            cellInfo = String.valueOf(row.getCell(t).getNumericCellValue());
                        }else{
                        cellInfo = row.getCell(t).getStringCellValue();
                        }
                    }
                    valuesList.add(cellInfo);
                }
                Map<String,Object> detail =  new HashMap<>();
                detail.put("name", valuesList.get(0));
                detail.put("cas", valuesList.get(1));
                detail.put("product_sn", valuesList.get(2));
                detail.put("main_metering", valuesList.get(3));
                detail.put("reagent_unit", valuesList.get(4));
                detail.put("reagent_character", valuesList.get(5));
                detail.put("product_home", valuesList.get(6));
                SysReagent sysReagent = sysReagentService.getReagentByDetail(detail);
                if (sysReagent == null)  throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:试剂不存在或者有多条,导入失败");
                //申购数量
                Integer num =  new Double(valuesList.get(7)).intValue();
                if (num < 1) throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:试剂申购数量不合法,导入失败");
                //课题组
                String objective = valuesList.get(8);
                //选择的审批人姓名
                String approveUserName = valuesList.get(9);
                //根据姓名获取用户信息的id
                SysUser approveUser = sysUserService.getUserByName(approveUserName);
                if (approveUser == null)  throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:审批人不存在或者审批人姓名存在重复,导入失败");
                OpeApply opeApply = new OpeApply();
                opeApply.setId(IDUtils.uuid());
                opeApply.setValidFlag(ValidFlag.VALID);
                opeApply.setStatus(ApplyStatus.PENDING_APPROVAL);
                opeApply.setApplyCode(sysSequenceService.getApplyCode());
                //设置试剂id
                opeApply.setReagent(sysReagent);
                //价格
                opeApply.setApplyPrice(sysReagent.getPrice());
                //申购数量
                opeApply.setNum(num);
                //申购人
                opeApply.setApplyUserId(user.getId());
                //选择的审批人
                opeApply.setApproveUserId(approveUser.getId());
                //选择的课题组信息
                opeApply.setObjective(objective);
                adds.add(opeApply);
            }
            if (adds.size() > 0) {
                opeApplyDao.insertOpeApplyList(adds);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/nanometer/smartlab/service/SysReagentService.java
@@ -43,4 +43,10 @@
    void updateSafetyNum(SysReagent sysReagent);
    /**
    * @Description: 根据detail的参数获取试剂id
    * @date 2021/6/21 9:42
    */
    SysReagent getReagentByDetail(Map<String, Object> detail);
}
src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
@@ -169,6 +169,20 @@
    }
    /**
    * @Description: 根据detail的信息获取试剂的id
    * @date 2021/6/21 9:45
    */
    @Override
    public SysReagent getReagentByDetail(Map<String, Object> detail) {
        List<SysReagent> reagentIds = sysReagentDao.countReagentByDetail(detail);
        if (reagentIds.size() != 1) {
            return null;
        }
        return reagentIds.get(0);
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) {
        try {
src/main/java/com/nanometer/smartlab/service/SysUserService.java
@@ -55,4 +55,5 @@
    List<String> getLibrarianEmail();
    SysUser getUserByName(String approveUserName);
}
src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
@@ -427,5 +427,12 @@
        return sysUserDao.getLibrarianEmail();
    }
    @Override
    public SysUser getUserByName(String approveUserName) {
        List<SysUser> users = sysUserDao.getUserByName(approveUserName);
        if (users.size() != 1) return  null;
        return users.get(0);
    }
}
src/main/webapp/apply_mng.xhtml
@@ -46,7 +46,7 @@
            </p:panelGrid>
        </p:panel>
        <p:panel styleClass="center-body">
            <p:panelGrid columns="5" styleClass="btn">
            <p:panelGrid columns="7" styleClass="btn">
                <p:commandButton value="申购" styleClass="new-btn"
                                 process="@this"
                                 actionListener="#{applyMngController.onNewBtnClick}"
@@ -69,7 +69,21 @@
                </p:commandButton>
                <p:commandButton update=":centerRootPanel" actionListener="#{applyMngController.onExportFileBtnClickNew}"
                                 ajax="false" value="导出" styleClass="new-btn" />
                <p:commandButton  onclick="importApply()"  value="导入" styleClass="import-btn" />
                <a href="resources/template/申购导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
            </p:panelGrid>
            <script type="text/javascript">
                function importApply(){
                    $("#applyMngForm\\:importApplyBtn_input").click();
                }
            </script>
            <div style="display: none" id='importDv'>
                <p:fileUpload fileUploadListener="#{applyMngController.uploadApply}"
                              dragDropSupport="false" id="importApplyBtn"  label="导入"
                              update="@form" auto="true" sizeLimit="5000000"
                              mode="advanced"/>
            </div>
            <p:dataTable id="applyMngDataTable" styleClass="data-table" resizableColumns="true"
                         paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
src/main/webapp/resources/template/申购导入模板.xlsx
Binary files differ