Bläddra i källkod

门诊收费增加药品限购措施

hurugang 5 år sedan
förälder
incheckning
b8f0f7f12b

+ 15 - 0
src/main/java/cn/hnthyy/thmz/Utils/DateUtil.java

@@ -110,4 +110,19 @@ public class DateUtil {
             return null;
         }
     }
+
+    /**
+     * 根据给定日期获取给定日期当月的第一天的0点0分0秒
+     * @return
+     */
+    public static Date getFirstSecondForMonth(Date date){
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH,1);
+        calendar.set(Calendar.HOUR_OF_DAY,0);
+        calendar.set(Calendar.MINUTE,0);
+        calendar.set(Calendar.SECOND,0);
+        return calendar.getTime();
+    }
+
 }

+ 2 - 0
src/main/java/cn/hnthyy/thmz/entity/his/YpZdDict.java

@@ -170,5 +170,7 @@ public class YpZdDict {
     private String wjwYpid;
     private String yjjYpid;
     private String rsbYpid;
+    //门诊限购量 每月
+    private Integer mzRestrict;
 
 }

+ 13 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/MzChargeDetailMapper.java

@@ -563,6 +563,16 @@ public interface MzChargeDetailMapper {
                     "</script>"})
     List<Map<String, Object>> selectChargeListByPatient(@Param("patientId") String patientId, @Param("name") String name, @Param("serialNo") String serialNo, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
 
+    /**
+     * 查询某个病人当月购买某一药品的总数量
+     * @param patientId
+     * @param chargeItemCode
+     * @param serial
+     * @param beginDate
+     * @return
+     */
+    @Select("select sum(quantity*drug_win) from mz_charge_detail where patient_id =#{patientId} and charge_date>=#{beginDate,jdbcType=TIMESTAMP} and pay_mark=0 and charge_item_code=#{chargeItemCode,jdbcType=CHAR} and  serial=#{serial} ")
+    Integer selectTotalQuantityForMonth(@Param("patientId") String patientId,@Param("chargeItemCode") String chargeItemCode,@Param("serial") String serial,@Param("beginDate") Date beginDate);
 
     /**
      * 根据病人编码和收费流水号查询缴费明细
@@ -812,4 +822,7 @@ public interface MzChargeDetailMapper {
     List<Map<String, Object>> selectDepetBusinessReport(ThmzmxsrParamsVo thmzmxsrParamsVo);
 
 
+
+
+
 }

+ 1 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/YpZdDictMapper.java

@@ -13,7 +13,7 @@ public interface YpZdDictMapper {
      * @param code
      * @return
      */
-    @Select("select code,name,specification from yp_zd_dict where code = #{code,jdbcType=VARCHAR} and serial = #{serial}")
+    @Select("select code,name,specification,mz_restrict from yp_zd_dict where code = #{code,jdbcType=VARCHAR} and serial = #{serial}")
     YpZdDict selectYpZdDictByCode(@Param("code") String code,@Param("serial") String serial);
 
     /**

+ 21 - 1
src/main/java/cn/hnthyy/thmz/service/impl/his/MzChargeDetailServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.hnthyy.thmz.service.impl.his;
 
 import cn.hnthyy.thmz.Utils.CloneUtil;
+import cn.hnthyy.thmz.Utils.DateUtil;
 import cn.hnthyy.thmz.common.Constants;
 import cn.hnthyy.thmz.common.SpringUtil;
 import cn.hnthyy.thmz.entity.MzException;
@@ -59,6 +60,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
     private MzDepositFileService mzDepositFileService;
     @Autowired
     private MzReceiptSerialService mzReceiptSerialService;
+    @Autowired
+    private YpZdDictService ypZdDictService;
     @SuppressWarnings("all")
     @Autowired
     private MzDepositFileMapper mzDepositFileMapper;
@@ -1787,8 +1790,25 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @return
      * @throws Exception
      */
-    private Integer formatSupplyFee(List<MzChargeDetail> mzChargeDetails, List<MzChargeDetail> mzChargeDetailList, Integer itemNo, Integer receiptNo) {
+    private Integer formatSupplyFee(List<MzChargeDetail> mzChargeDetails, List<MzChargeDetail> mzChargeDetailList, Integer itemNo, Integer receiptNo) throws MzException {
         for (MzChargeDetail mcd : mzChargeDetailList) {
+            YpZdDict ypZdDict = ypZdDictService.queryYpZdDictByCode(mcd.getChargeItemCode(), mcd.getSerial());
+            if (ypZdDict != null && ypZdDict.getMzRestrict()!=null ) {
+                //当前处方购药量
+                BigDecimal thisQuantity =BigDecimal.valueOf(mcd.getQuantity()).multiply(BigDecimal.valueOf(mcd.getDrugWin()));
+                //本月已经购买量
+                Integer quantityDb=mzChargeDetailMapper.selectTotalQuantityForMonth(mcd.getPatientId(),mcd.getChargeItemCode(),mcd.getSerial(),DateUtil.getFirstSecondForMonth(new Date()));
+                quantityDb=quantityDb==null?0:quantityDb;
+                BigDecimal totalQuantity=thisQuantity.add(BigDecimal.valueOf(quantityDb));
+                if(totalQuantity.compareTo(BigDecimal.valueOf(ypZdDict.getMzRestrict()))==1){
+                    //当前还可以购药量,小于0时为0
+                    BigDecimal tempCount = BigDecimal.valueOf(ypZdDict.getMzRestrict()).subtract(BigDecimal.valueOf(quantityDb));
+                    if(tempCount.compareTo(BigDecimal.ZERO)==-1){
+                        tempCount=BigDecimal.ZERO;
+                    }
+                    throw new MzException("药品【"+ypZdDict.getName()+"】编码【"+ypZdDict.getCode()+"】的药品超过限购量,最大购买量为【"+ypZdDict.getMzRestrict()+"】,本月已购买量为【"+quantityDb+"】,本次最大可购量为【"+tempCount+"】,当前处方购药数量【"+thisQuantity+"】请联系医生修改处方限制购药品种的数量");
+                }
+            }
             //非口服用药方式,需要写入收费记录
             if (StringUtils.isNotBlank(mcd.getSupplyCode()) && !Constants.KOU_FU_SUPPLY_CODE.equals(mcd.getSupplyCode())) {
                 List<MzZdSupplyCharge> mzZdSupplyChargeList = mzZdSupplyChargeService.queryMzZdSupplyChargeByCode(mcd.getSupplyCode());