瀏覽代碼

优化收费算法

hurugang 5 年之前
父節點
當前提交
b991babbe8

+ 1 - 2
src/main/java/cn/hnthyy/thmz/controller/MzChargeDetailController.java

@@ -40,8 +40,6 @@ public class MzChargeDetailController {
     @Autowired
     private MzReceiptSerialService mzReceiptSerialService;
     @Autowired
-    private YpZdDictService ypZdDictService;
-    @Autowired
     private MzPatientMiService mzPatientMiService;
 
     /**
@@ -937,6 +935,7 @@ public class MzChargeDetailController {
             thmzmxsrParamsVo.setHisData(YesNoEnum.NO);
             List<Map<String, Object>> depetBusinessReports = mzChargeDetailService.queryDepetBusinessReport(thmzmxsrParamsVo);
             thmzmxsrParamsVo.setHisData(YesNoEnum.YES);
+            //历史数据
             List<Map<String, Object>> depetBusinessReportsHis = mzChargeDetailService.queryDepetBusinessReport(thmzmxsrParamsVo);
 
 

+ 2 - 0
src/main/java/cn/hnthyy/thmz/controller/MzPatientMiController.java

@@ -231,6 +231,7 @@ public class MzPatientMiController {
                 resultMap.put("message", "保存病人信息失败,已经存在相同的身份证号码记录");
                 return resultMap;
             }
+            mzPatientMi.setIcCardNo(mzPatientMi.getIcCardNo().trim());
             MzPatientMi dbMzPatientMi=mzPatientMiService.queryByIcCardNo(mzPatientMi.getIcCardNo());
             if(dbMzPatientMi!=null){
                 resultMap.put("code", -1);
@@ -284,6 +285,7 @@ public class MzPatientMiController {
                 resultMap.put("message", "修改病人信息失败,已经存在相同的身份证号码记录");
                 return resultMap;
             }
+            mzPatientMi.setIcCardNo(mzPatientMi.getIcCardNo().trim());
             MzPatientMi dbMzPatientMi=mzPatientMiService.queryByIcCardNo(mzPatientMi.getIcCardNo());
             if(dbMzPatientMi!=null && !dbMzPatientMi.getPatientId().equals(mzPatientMi.getPatientId())){
                 resultMap.put("code", -1);

+ 5 - 1
src/main/java/cn/hnthyy/thmz/controller/api/MedicalViewApiController.java

@@ -525,7 +525,11 @@ public class MedicalViewApiController {
                 map.put("itemName",mz.getTcName());
                 map.put("itemType","");
                 map.put("itemUnit","");
-                BigDecimal unitPrice= mz.getUnitPrice().multiply(BigDecimal.valueOf(100));
+                BigDecimal unitPrice= mz.getUnitPrice().setScale(1, BigDecimal.ROUND_HALF_UP);
+                if(BigDecimal.ZERO.equals(unitPrice)){
+                    unitPrice=BigDecimal.valueOf(0.01D);
+                }
+                unitPrice= unitPrice.multiply(BigDecimal.valueOf(100));
                 map.put("itemPrice",unitPrice);
                 map.put("itemSpec","");
                 BigDecimal quantity=mz.getQuantity()==null?BigDecimal.ONE:BigDecimal.valueOf(mz.getQuantity());

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

@@ -150,7 +150,7 @@ public interface MzChargeDetailMapper {
             "<when test='mzChargeDetail.payMark eq 5'>",
             " price_time,",
             "</when>",
-            "real_no,sum(unit_price*quantity*drug_win) amount from mz_charge_detail  where bill_item_code <![CDATA[<>]]> 'TC' ",
+            "real_no,sum(( case when convert(decimal(18,2),unit_price)=0.00 then 0.01 else convert(decimal(18,2),unit_price) end )*quantity*drug_win) amount from mz_charge_detail  where bill_item_code <![CDATA[<>]]> 'TC' ",
             "<when test='mzChargeDetail.payMark!=null'>",
             " and pay_mark =#{mzChargeDetail.payMark,jdbcType=CHAR}",
             "</when>",
@@ -792,7 +792,7 @@ public interface MzChargeDetailMapper {
                     "  exec_dept= z.name," +
                     "       charge_bill_code= case a.charge_bill_code when 'BILL10' then 'BILL01' when 'BILL11' then 'BILL28' when 'BILL12' then 'BILL02' else a.charge_bill_code end," +
                     "         parent=max( d.parent_code )," +
-                    "         total_charge= case  when (b.pay_id ='99999' and b.charge_dcount_date <![CDATA[<=]]> '2021-12-01 23:59:59')  then  isnull(sum(round(convert(decimal(18,2),((convert(decimal(18,2),unit_price)) * (quantity * isnull(drug_win,1)))),2)),0) else isnull(sum(round(convert(decimal(18,3),((convert(decimal(18,3),unit_price)) * (quantity * isnull(drug_win,1)))),2)),0) end ," +
+                    "         total_charge= isnull(sum(round(convert(decimal(18,2),((case when convert(decimal(18,2),unit_price)=0.00 then 0.01 else convert(decimal(18,2),unit_price) end) * (quantity * isnull(drug_win,1)))),2)),0) ," +
                     "         audit_code=case when isnull(a.group_no,'00')='71' then max(d.name)+'(门诊)' when isnull(a.group_no,'00')='72' then max(d.name)+'(急诊)' else max(d.name) end," +
                     " charge_dcount_date=b.charge_dcount_date  " +
                     "    FROM ${firstTableName} a(nolock),   " +

+ 19 - 3
src/main/java/cn/hnthyy/thmz/service/impl/his/MzChargeDetailServiceImpl.java

@@ -204,7 +204,13 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             if (returnMzChargeDetail.getPriceTime() == null) {
                 returnMzChargeDetail.setPriceTime(md.getPriceTime());
             }
-            returnMzChargeDetail.setAmount(returnMzChargeDetail.getAmount().add((md.getUnitPrice() == null ? BigDecimal.ZERO : md.getUnitPrice()).multiply(BigDecimal.valueOf(md.getQuantity() == null ? 1D : md.getQuantity())).multiply(BigDecimal.valueOf(md.getDrugWin() == null ? 1D : md.getDrugWin()))));
+            BigDecimal unitPrice=md.getUnitPrice() == null ? BigDecimal.ZERO : md.getUnitPrice().setScale(2, BigDecimal.ROUND_HALF_UP);
+            if(BigDecimal.ZERO.compareTo(unitPrice)==0){
+                unitPrice=BigDecimal.valueOf(0.01D);
+                md.setUnitPrice(unitPrice);
+            }
+
+            returnMzChargeDetail.setAmount(returnMzChargeDetail.getAmount().add(unitPrice.multiply(BigDecimal.valueOf(md.getQuantity() == null ? 1D : md.getQuantity())).multiply(BigDecimal.valueOf(md.getDrugWin() == null ? 1D : md.getDrugWin()))));
         }
         return returnMzChargeDetail;
     }
@@ -567,7 +573,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
     public List<MzChargeDetail> getMzChargeDetails(List<MzChargeDetail> mzChargeDetailList) {
         if (mzChargeDetailList != null) {
             for (MzChargeDetail md : mzChargeDetailList) {
-                md.setAmount((md.getUnitPrice() == null ? BigDecimal.ZERO : md.getUnitPrice()).multiply(BigDecimal.valueOf(md.getQuantity() == null ? 1D : md.getQuantity())).multiply(BigDecimal.valueOf(md.getDrugWin() == null ? 1D : md.getDrugWin())).setScale(2, BigDecimal.ROUND_HALF_UP));
+                BigDecimal unitPrice=md.getUnitPrice() == null ? BigDecimal.ZERO : md.getUnitPrice().setScale(2, BigDecimal.ROUND_HALF_UP);
+                if(BigDecimal.ZERO.compareTo(unitPrice)==0){
+                    unitPrice=BigDecimal.valueOf(0.01D);
+                    md.setUnitPrice(unitPrice);
+                }
+                md.setAmount(unitPrice.multiply(BigDecimal.valueOf(md.getQuantity() == null ? 1D : md.getQuantity())).multiply(BigDecimal.valueOf(md.getDrugWin() == null ? 1D : md.getDrugWin())).setScale(2, BigDecimal.ROUND_HALF_UP));
                 if (!Constants.YJ_GROUP_NO.equals(md.getGroupNo())) {
                     YpZdDict ypZdDict = ypZdDictService.queryYpZdDictByCode(md.getChargeItemCode(), md.getSerial());
                     if (ypZdDict != null) {
@@ -1656,7 +1667,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
                 if (Constants.TC.equals(billItemCode)) {
                     continue;
                 }
-                BigDecimal tempFee = mzChargeDetail.getUnitPrice().multiply(BigDecimal.valueOf(mzChargeDetail.getQuantity()).multiply(BigDecimal.valueOf(mzChargeDetail.getDrugWin())));
+                BigDecimal unitPrice=mzChargeDetail.getUnitPrice() == null ? BigDecimal.ZERO : mzChargeDetail.getUnitPrice().setScale(2, BigDecimal.ROUND_HALF_UP);
+                if(BigDecimal.ZERO.compareTo(unitPrice)==0){
+                    unitPrice=BigDecimal.valueOf(0.01D);
+                    mzChargeDetail.setUnitPrice(unitPrice);
+                }
+                BigDecimal tempFee = unitPrice.multiply(BigDecimal.valueOf(mzChargeDetail.getQuantity()).multiply(BigDecimal.valueOf(mzChargeDetail.getDrugWin())));
                 totalPayable = totalPayable.add(tempFee);
                 if (StringUtils.isBlank(billItemCode)) {
                     billItemCode = Constants.QTF;

+ 4 - 0
src/main/resources/static/js/toll_administration.js

@@ -1749,6 +1749,10 @@ function initRefundFeeDetailTable(patientId, times, receiptNo) {
                 title: '数量',
                 align: "center",
                 valign: 'middle'
+                ,
+                formatter: function (value, row, index) {
+                    return value*row.drugWin;
+                }
             }, {
                 field: 'unitPrice',
                 title: '单价(元)',

+ 1 - 1
src/test/java/cn/hnthyy/thmz/ThmzApiTests.java

@@ -207,7 +207,7 @@ public class ThmzApiTests {
         JSONObject jsonParam = new JSONObject();
         jsonParam.put("patCardType", "1");
         jsonParam.put("patCardNo","00263311");
-        jsonParam.put("hisOrdNum","290509-4_843_1");
+        jsonParam.put("hisOrdNum","290509-4_301_1");
         try {
             StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");// 解决中文乱码问题
             entity.setContentEncoding("UTF-8");