Browse Source

Merge branch 'master' into 'master'

新增列“药品编码”、“药品类别”、“是否中标”、“当月累计已审批计划”、“当月累计已入库数量”等

See merge request lighter/web-server!145
huangshuhua 2 months ago
parent
commit
7c7288fc97

+ 13 - 2
src/main/java/thyyxxk/webserver/dao/his/medicine/YpPlanDetailDao.java

@@ -24,13 +24,24 @@ public interface YpPlanDetailDao extends BaseMapper<YpPlanDetail> {
 
     @Insert({"<script>" +
             " insert into yp_plan_detail (file_id, remark, drug_name, specification, pack_retprice, buy_price, amount, manu_name, " +
-            " amount3, amount7, amount14, amount30, amount60, days, buy_amount, unit, buy_fee, content, imp_date, supply_name, buy_money, pack_retprice1, buy_price1) values " +
+            " amount3, amount7, amount14, amount30, amount60, days, buy_amount, unit, buy_fee, content, imp_date, supply_name, " +
+            " buy_money, pack_retprice1, buy_price1, charge_code, drug_kind, is_winning, month, plan_total, real_total) values " +
             "<foreach collection='list' item='item' separator=','>" +
             " (#{item.fileId}, #{item.remark}, #{item.drugName}, #{item.specification}, #{item.packRetprice}, #{item.buyPrice}, #{item.amount}, #{item.manuName}, " +
             " #{item.amount3}, #{item.amount7}, #{item.amount14}, #{item.amount30}, #{item.amount60}, #{item.days}, #{item.buyAmount}, #{item.unit}, #{item.buyFee}, " +
-            " #{item.content}, #{item.impDate}, #{item.supplyName}, #{item.buyMoney}, #{item.packRetprice1}, #{item.buyPrice1})" +
+            " #{item.content}, #{item.impDate}, #{item.supplyName}, #{item.buyMoney}, #{item.packRetprice1}, #{item.buyPrice1}, " +
+            " #{item.chargeCode}, #{item.drugKind}, #{item.isWinning}, #{item.month}, #{item.planTotal}, #{item.realTotal})" +
             "</foreach>" +
             "</script>"})
     int insertList(List<YpPlanDetail> list);
 
+    @Select(" select isnull(sum(a.buy_amount), 0) as sl from yp_plan_detail a, yp_plan_info b " +
+            " where a.file_id = b.file_id and a.charge_code = #{code} and a.month = #{ny} " +
+            " and b.final_audit = '1' ")
+    int selectYpPlanTotalByMonth(@Param("code") String code, @Param("ny") String ny);
+
+    @Select(" select isnull(sum(buy_amt), 0) as sl from yp_in_detl " +
+            " where in_type = '0' and confirm_flag = '1' and charge_code = #{code} and convert(varchar(6), in_date, 112) = #{ny}  ")
+    int selectYpRealTotalByMonth(@Param("code") String code, @Param("ny") String ny);
+
 }

+ 8 - 7
src/main/java/thyyxxk/webserver/entity/medicine/YpPlanDetail.java

@@ -1,7 +1,6 @@
 package thyyxxk.webserver.entity.medicine;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -25,8 +24,11 @@ public class YpPlanDetail implements Serializable {
     @TableId(value = "file_id", type = IdType.NONE)
     private String fileId; // 文件id
     private String remark; // 备注
+    private String chargeCode; // 药品编码
     private String drugName; // 药品名称
     private String specification; //规格
+    private String drugKind; // 药品类别
+    private String isWinning; // 是否中标
     private BigDecimal packRetprice; // 零售价
     private BigDecimal buyPrice; // 购入价
     private BigDecimal amount; // 库存量
@@ -39,16 +41,15 @@ public class YpPlanDetail implements Serializable {
     private String days; // 可用天数
     private BigDecimal buyAmount; // 采购计划
     private String unit; // 单位
-    private BigDecimal buyFee;// 购入金额(作废)
+    private BigDecimal buyFee;// 购入金额(作废)
     private String content; // 主任意见
     private String impDate; // 导入时间
     private String supplyName; // 药品供应商
-    private BigDecimal buyMoney; // 购入金额(启用新的)
+    private BigDecimal buyMoney; // 购入金额(启用新的)
     private String packRetprice1; // 零售价(启用新的)
     private String buyPrice1; // 购入价(启用新的)
-    @TableField(exist = false)
-    private String chargeCode;
-    @TableField(exist = false)
-    private String drugKind;
+    private String month; // 导入年月
+    private String planTotal; // 当月累计已审批计划量
+    private String realTotal; // 当月累计实际入库量
 
 }

+ 55 - 29
src/main/java/thyyxxk/webserver/service/medicine/YpPlanService.java

@@ -1,5 +1,7 @@
 package thyyxxk.webserver.service.medicine;
 
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.DateUtil;
@@ -20,13 +22,13 @@ import thyyxxk.webserver.service.hutoolcache.UserCache;
 import thyyxxk.webserver.utils.DecimalUtil;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.StringUtil;
-import thyyxxk.webserver.utils.TokenUtil;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -76,7 +78,10 @@ public class YpPlanService {
      * @Date 2025/2/21 9:55
      */
     public ResultVo<List<YpPlanDetail>> selectYpPlanDetail(YpPlanDetail detail){
-        List<YpPlanDetail> list = detailDao.selectYpPlanDetail(detail);
+        QueryWrapper<YpPlanDetail> querywrapper = new QueryWrapper<>();
+        querywrapper.eq("file_id", detail.getFileId());
+        querywrapper.like("supply_name", detail.getSupplyName());
+        List<YpPlanDetail> list = detailDao.selectList(querywrapper);
         return ResultVoUtil.success(list);
     }
 
@@ -96,10 +101,14 @@ public class YpPlanService {
         Map<String, Object> map = new HashMap<>();
         String fileId = info.getFileId();
         String fileName = info.getFileName();
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        int month = now.getMonthValue();
+        String ny = year + "" + (month < 10 ? "0" + month : month);
         MultipartFile file = info.getFile();
         try {
             // 解析导入的数据
-            List<YpPlanDetail> list = callYpPlanImportData(fileId, file);
+            List<YpPlanDetail> list = callYpPlanImportData(fileId, file, ny);
             if(list.isEmpty()){
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "导入药品申请与审核药品明细为空,请确认!");
             }
@@ -107,6 +116,12 @@ public class YpPlanService {
             BigDecimal totalFee = BigDecimal.ZERO;
             for(YpPlanDetail d : list){
                 totalFee = DecimalUtil.add(totalFee, d.getBuyMoney());
+                // 计算当月累计已审批计划量
+                int plan = detailDao.selectYpPlanTotalByMonth(d.getChargeCode(), ny);
+                d.setPlanTotal(Convert.toStr(plan, "0"));
+                // 计算当月累计实际入库量
+                int real = detailDao.selectYpRealTotalByMonth(d.getChargeCode(), ny);
+                d.setRealTotal(Convert.toStr(real, "0"));
             }
             info.setTotalFee(totalFee);
             UserInfo user = userCache.getUserInfoByToken();
@@ -140,10 +155,11 @@ public class YpPlanService {
      * @Author hsh
      * @param fileId 文件id
      * @param file 文件
+     * @param ny 年月
      * @return list
      * @Date 2025/2/21 16:19
      */
-    private List<YpPlanDetail> callYpPlanImportData(String fileId, MultipartFile file) throws IOException {
+    public List<YpPlanDetail> callYpPlanImportData(String fileId, MultipartFile file, String ny) throws IOException {
         InputStream is = null;
         Workbook workbook;
         // 导入数据接收list
@@ -177,40 +193,47 @@ public class YpPlanService {
                 }
                 imp.setRemark(stirs[0]);
                 imp.setSupplyName(stirs[1]);
-                imp.setDrugName(stirs[2]);
-                imp.setSpecification(stirs[3]);
-                if(StringUtil.notBlank(stirs[4])){
-                    imp.setPackRetprice(new BigDecimal(stirs[4]));
-                    imp.setPackRetprice1(stirs[4]);
+                imp.setChargeCode(stirs[2]);
+                imp.setDrugName(stirs[3]);
+                imp.setSpecification(stirs[4]);
+                imp.setDrugKind(stirs[5]);
+                imp.setIsWinning(stirs[6]);
+                if(StringUtil.notBlank(stirs[7])){
+                    imp.setPackRetprice(new BigDecimal(stirs[7]));
+                    imp.setPackRetprice1(stirs[7]);
                 }
-                if(StringUtil.notBlank(stirs[5])){
-                    imp.setBuyPrice(new BigDecimal(stirs[5]));
-                    imp.setBuyPrice1(stirs[5]);
-                }
-                if(StringUtil.notBlank(stirs[6])){
-                    imp.setAmount(new BigDecimal(stirs[6]));
-                }
-                imp.setManuName(stirs[7]);
                 if(StringUtil.notBlank(stirs[8])){
-                    imp.setAmount3(new BigDecimal(stirs[8]));
+                    imp.setBuyPrice(new BigDecimal(stirs[8]));
+                    imp.setBuyPrice1(stirs[8]);
                 }
                 if(StringUtil.notBlank(stirs[9])){
-                    imp.setAmount7(new BigDecimal(stirs[9]));
-                }
-                if(StringUtil.notBlank(stirs[10])){
-                    imp.setAmount14(new BigDecimal(stirs[10]));
+                    imp.setAmount(new BigDecimal(stirs[9]));
                 }
+                imp.setManuName(stirs[10]);
                 if(StringUtil.notBlank(stirs[11])){
-                    imp.setAmount30(new BigDecimal(stirs[11]));
+                    imp.setAmount3(new BigDecimal(stirs[11]));
                 }
                 if(StringUtil.notBlank(stirs[12])){
-                    imp.setAmount60(new BigDecimal(stirs[12]));
+                    imp.setAmount7(new BigDecimal(stirs[12]));
+                }
+                if(StringUtil.notBlank(stirs[13])){
+                    imp.setAmount14(new BigDecimal(stirs[13]));
                 }
-                imp.setDays(stirs[13]);
                 if(StringUtil.notBlank(stirs[14])){
-                    imp.setBuyAmount(new BigDecimal(stirs[14]));
+                    imp.setAmount30(new BigDecimal(stirs[14]));
+                }
+                if(StringUtil.notBlank(stirs[15])){
+                    imp.setAmount60(new BigDecimal(stirs[15]));
+                }
+                imp.setDays(stirs[16]);
+                if(StringUtil.notBlank(stirs[17])){
+                    imp.setBuyAmount(new BigDecimal(stirs[17]));
+                }
+                // 单位
+                if(stirs.length >= 19 && StringUtil.notBlank(stirs[18])){
+                    imp.setUnit(stirs[18]);
                 }
-                imp.setUnit(stirs[15]);
+                // 购入价金额
                 if(null == imp.getBuyPrice() || null == imp.getBuyAmount()){
                     imp.setBuyFee(BigDecimal.ZERO);
                     imp.setBuyMoney(BigDecimal.ZERO);
@@ -218,14 +241,16 @@ public class YpPlanService {
                     imp.setBuyFee(DecimalUtil.multiply(imp.getBuyPrice(), imp.getBuyAmount()));
                     imp.setBuyMoney(DecimalUtil.multiply(imp.getBuyPrice(), imp.getBuyAmount()));
                 }
-                if(stirs.length == 18 && StringUtil.notBlank(stirs[17])){
-                    imp.setContent(stirs[17]);
+                // 主任意见
+                if(stirs.length == 21 && StringUtil.notBlank(stirs[20])){
+                    imp.setContent(stirs[20]);
                 }
                 imp.setFileId(fileId);
                 // 常量
                 LocalDateTime now = LocalDateTime.now();
                 DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                 imp.setImpDate(now.format(sdf));
+                imp.setMonth(ny);
                 impList.add(imp);
                 str = new StringBuilder();
             }
@@ -233,6 +258,7 @@ public class YpPlanService {
             is.close();
         } catch (Exception e) {
             log.info("导入药品计划出错:" + e.getMessage());
+            ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "药品计划导入失败!" + e.getMessage());
         } finally {
             if(is != null){
                 is.close();