From a730987f2a3eb600b3c0d90961aa6ac7925b902e Mon Sep 17 00:00:00 2001
From: houruijun <411269194@kidgrow.com>
Date: Mon, 28 Sep 2020 15:49:38 +0800
Subject: [PATCH] 1.增加小数类型处理公共类 2.开通支付修改互斥条件和查询参数 3.修改单次支付的开通金额统一单位为分

---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java         |    8 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml                                                    |    1 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java                                      |    4 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ProductOrderDetailMapper.java            |    8 
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html                                                                        |    8 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml                                   |   36 ++
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysDepartmentController.java                    |   19 +
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml                                                    |    4 
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html                                                                    |   11 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java                           |   10 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/SysDepartmentService.java                               |   19 +
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDepartmentServiceImpl.java                    |    5 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java         |   67 +++-
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html                                                                        |  240 ++++++++++--------
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/mapper/SysDepartmentMapper.java                               |    6 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysDepartmentService.java                            |    6 
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ArithUtils.java                                                     |  267 ++++++++++++++++++++
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysDepartmentMapper.xml                                                  |    5 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java |    5 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/fallback/SysDepartmentServiceFallbackFactory.java       |   22 +
 20 files changed, 608 insertions(+), 143 deletions(-)

diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
index 1abf4b7..087ed9b 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
@@ -55,17 +55,17 @@
      * 单次支付金额 (单位为分)
      */
     @NotNull(message = "单次支付金额不能为空")
-    private Integer payPrice;
+    private double payPrice;
     /**
      * 支付给喜高的费用 (单位为分)
      */
-    @NotNull(message = "单次支付金额不能为空")
-    private Integer payKidgrow;
+    @NotNull(message = "支付给喜高的费用不能为空")
+    private double payKidgrow;
     /**
      * 支付给客户的费用(单位为分)
      */
-    @NotNull(message = "单次支付金额不能为空")
-    private Integer payCustom;
+    @NotNull(message = "支付给客户金额不能为空")
+    private double payCustom;
     /**
      * 是否删除,1删除,0未删除
      */
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ProductOrderDetailMapper.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ProductOrderDetailMapper.java
index 10d516e..ba2c004 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ProductOrderDetailMapper.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/ProductOrderDetailMapper.java
@@ -53,6 +53,14 @@
      * @return
      */
     int getEnabledCount(Long departmentId);
+    /**
+     * 获取一个科室所有的有效套餐
+     * @param departmentId
+     * hospitalId
+     * @return
+     */
+    int getUserdProduct(@Param("hospitalId") Long hospitalId,@Param("departmentId") Long departmentId);
+
 
     /**
      * 统计获取数据量
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
index a4569b7..6bf6987 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
@@ -6,6 +6,7 @@
 import com.kidgrow.common.service.ISuperService;
 import com.kidgrow.oprationcenter.model.ProductOrderDetail;
 import com.kidgrow.oprationcenter.vo.*;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -131,5 +132,12 @@
      * @return
      */
     PageResult<ProductOrderDetail> departmentProductDetail(Map<String, Object> params);
+    /**
+     * 获取一个科室所有的有效套餐
+     * @param departmentId
+     * hospitalId
+     * @return
+     */
+    int getUserdProduct(@Param("hospitalId") Long hospitalId, @Param("departmentId") Long departmentId);
 }
 
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
index df69cd0..e9cca5e 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -214,6 +214,11 @@
         return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
+    @Override
+    public int getUserdProduct(Long hospitalId, Long departmentId) {
+        return baseMapper.getUserdProduct(hospitalId,departmentId);
+    }
+
     /**
      * 获取诊断列表
      * @param params
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
index 14d010c..4377d09 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/ProductOrderDetailMapper.xml
@@ -264,4 +264,40 @@
 ORDER BY
 	create_time DESC
     </select>
+    <select id="getUserdProduct" resultType="int">
+        SELECT
+        sum(total)
+        FROM
+        (
+        SELECT
+        count(*) total
+        FROM
+        `product_order` order_order
+        LEFT JOIN product_order_record record ON order_order.id = record.order_id
+        WHERE
+        order_order.hospital_id = #{hospitalId}
+        AND order_order.department_id = #{departmentId}
+        and  record.pro_id!=1000000000000000000
+        AND order_order.is_del = 0
+	AND order_order.enabled = 1
+		AND record.is_del = 0
+	AND record.enabled = 1
+	AND record.pro_endtime>now()
+        UNION ALL
+        SELECT
+        count(*) total
+        FROM
+        `product_order` order_order
+        LEFT JOIN product_order_record record ON order_order.id = record.order_id
+        WHERE
+        order_order.hospital_id = #{hospitalId}
+        AND record.is_share = 1
+        and  record.pro_id!=1000000000000000000
+        AND order_order.is_del = 0
+	AND order_order.enabled = 1
+		AND record.is_del = 0
+	AND record.enabled = 1
+	AND record.pro_endtime>now()
+        ) cc
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
index 85e0f7a..5103774 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
@@ -5,10 +5,12 @@
 import com.kidgrow.common.model.PageResult;
 import com.kidgrow.common.model.ResultBody;
 import com.kidgrow.common.model.SysUser;
+import com.kidgrow.common.utils.ArithUtils;
 import com.kidgrow.oprationcenter.model.PayManager;
 import com.kidgrow.oprationcenter.model.ProductOrderDetail;
 import com.kidgrow.oprationcenter.service.IPayManagerService;
 import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
+import com.kidgrow.usercenter.feign.SysDepartmentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -44,6 +46,8 @@
     private IPayManagerService payManagerService;
     @Autowired
     private IProductOrderDetailService productOrderDetailService;
+    @Autowired
+    private SysDepartmentService sysDepartmentService;
 
     /**
      * 列表
@@ -129,39 +133,54 @@
             }
             return ResultBody.failed().msg(errMsg.toString());
         } else {
-            if (payManager.getId()!=null) {
-                //修改支付功能
-                ProductOrderDetail modelDetail=payManagerService.getProductDetail(payManager.getHospitalId(),payManager.getDepartmentId());
-                if(!payManager.getEnabled()&&modelDetail!=null)
-                {
-                    //支付禁用  禁用套餐
-                    modelDetail.setEnabled(false);
-                    modelDetail.setIsDel(true);
-                    if(!productOrderDetailService.saveOrUpdate(modelDetail))
+            int userdCount=-1;
+            if (payManager.getEnabled()) {
+                userdCount=productOrderDetailService.getUserdProduct(payManager.getHospitalId(),payManager.getDepartmentId());
+            }
+            if (userdCount>0) {
+                return ResultBody.failed().msg("该医院已有可用的套餐,不能开通单次支付!");
+            }
+            else
+            {
+                payManager.setPayPrice(ArithUtils.round(payManager.getPayPrice()*100,2));
+                payManager.setPayKidgrow(ArithUtils.round(payManager.getPayKidgrow()*100,2));
+                payManager.setPayCustom(ArithUtils.round(payManager.getPayCustom()*100,2));
+                if (payManager.getId()!=null) {
+                    //修改支付功能
+                    ProductOrderDetail modelDetail=payManagerService.getProductDetail(payManager.getHospitalId(),payManager.getDepartmentId());
+                    if(!payManager.getEnabled()&&modelDetail!=null)
                     {
-                        return ResultBody.failed().msg("套餐修改失败!支付开通修改失败!");
+                        //支付禁用  禁用套餐
+                        modelDetail.setEnabled(false);
+                        modelDetail.setIsDel(true);
+                        if(!productOrderDetailService.saveOrUpdate(modelDetail))
+                        {
+                            return ResultBody.failed().msg("套餐修改失败!支付开通修改失败!");
+                        }
                     }
-                }
-                else if(modelDetail==null)
-                {
+                    else if(modelDetail==null)
+                    {
+                        Boolean isResult=payManagerService.saveproductOrder(payManager,sysUser);
+                        if (!isResult) {
+                            return ResultBody.failed().msg("套餐充入失败,支付开通失败!");
+                        }
+                    }
+                } else {
                     Boolean isResult=payManagerService.saveproductOrder(payManager,sysUser);
                     if (!isResult) {
-                        return ResultBody.failed().msg("套餐充入失败,支付开通失败!");
+                        return ResultBody.failed().msg("套餐充入失败!支付开通失败!");
                     }
                 }
-            } else {
-                Boolean isResult=payManagerService.saveproductOrder(payManager,sysUser);
-                if (!isResult) {
-                    return ResultBody.failed().msg("套餐充入失败!支付开通失败!");
+                boolean v = payManagerService.saveOrUpdate(payManager);
+                //修改科室的支付功能状态
+                sysDepartmentService.updatePay(payManager.getDepartmentId(),payManager.getEnabled());
+                if (v) {
+                    return ResultBody.ok().data(payManager).msg("保存成功");
+                } else {
+                    return ResultBody.failed().msg("保存失败");
                 }
             }
-            boolean v = payManagerService.saveOrUpdate(payManager);
 
-            if (v) {
-                return ResultBody.ok().data(payManager).msg("保存成功");
-            } else {
-                return ResultBody.failed().msg("保存失败");
-            }
         }
     }
 }
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
index e2fab01..fef3071 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
@@ -95,6 +95,7 @@
     ignoreSqls:
       - com.kidgrow.usercenter.mapper.SysRoleMapper.findAll
       - com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper.findDetailList
+      - com.kidgrow.oprationcenter.mapper.ProductOrderDetailMapper.getUserdProduct
 
 
 pay:
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/SysDepartmentService.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/SysDepartmentService.java
new file mode 100644
index 0000000..bca165d
--- /dev/null
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/SysDepartmentService.java
@@ -0,0 +1,19 @@
+package com.kidgrow.usercenter.feign;
+
+import com.kidgrow.common.constant.ServiceNameConstants;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.usercenter.feign.fallback.SysDepartmentServiceFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = ServiceNameConstants.USER_SERVICE, fallbackFactory = SysDepartmentServiceFallbackFactory.class, decode404 = true)
+public interface SysDepartmentService {
+    /**
+     * 根据条件查询
+     * @param departmentId
+     * isPay
+     */
+    @GetMapping(value = "/sysdepartment/updatePay")
+    ResultBody updatePay(@RequestParam("departmentId") Long departmentId, @RequestParam("isPay") Boolean isPay);
+}
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/fallback/SysDepartmentServiceFallbackFactory.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/fallback/SysDepartmentServiceFallbackFactory.java
new file mode 100644
index 0000000..b7f800e
--- /dev/null
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/fallback/SysDepartmentServiceFallbackFactory.java
@@ -0,0 +1,22 @@
+package com.kidgrow.usercenter.feign.fallback;
+
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.usercenter.feign.SysDepartmentService;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Slf4j
+@Component
+public class SysDepartmentServiceFallbackFactory implements FallbackFactory<SysDepartmentService> {
+    @Override
+    public SysDepartmentService create(Throwable throwable) {
+        return new SysDepartmentService() {
+            @Override
+            public  ResultBody updatePay(@RequestParam("departmentId") Long departmentId, @RequestParam("isPay") Boolean isPay){
+                return ResultBody.failed("操作失败");
+            }
+        };
+    }
+}
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java
index 41ae83d..98451e7 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/model/SysDepartment.java
@@ -81,4 +81,8 @@
      * 帐号数量,默认6
      */
     private Integer accountsCount;
+    /**
+     * 是否单次支付 1是0否
+     */
+    private Boolean isPay;
 }
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/mapper/SysDepartmentMapper.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/mapper/SysDepartmentMapper.java
index a2a2cf5..4b235b7 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/mapper/SysDepartmentMapper.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/mapper/SysDepartmentMapper.java
@@ -39,4 +39,10 @@
      * @return  如果返回空则视为不存在
      */
     String checkDepartmentName(@Param("hosId") Long hosId,@Param("departmentName") String departmentName);
+    /**
+     * 更新支付功能的开通状态
+     * @param
+     * @return boolean
+     */
+    boolean updatePay(@Param("departmentId") Long departmentId,@Param("isPay") boolean isPay);
 }
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysDepartmentService.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysDepartmentService.java
index 16ba17a..1d1cbf9 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysDepartmentService.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysDepartmentService.java
@@ -29,6 +29,12 @@
     * @return SysDepartment对象
     */
     SysDepartment findByObject(SysDepartment sysDepartment);
+    /**
+     * 更新支付功能的开通状态
+     * @param
+     * @return boolean
+     */
+    boolean updatePay(Long departmentId,boolean isPay);
 
     ResultBody findAll(Map<String, Object> params);
 
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDepartmentServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDepartmentServiceImpl.java
index 215534d..1d97395 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDepartmentServiceImpl.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDepartmentServiceImpl.java
@@ -62,6 +62,11 @@
     }
 
     @Override
+    public boolean updatePay(Long departmentId, boolean isPay) {
+        return baseMapper.updatePay(departmentId,isPay);
+    }
+
+    @Override
     public ResultBody findAll(Map<String, Object> params) {
         return  ResultBody.ok().data(baseMapper.selectByMap(params));
     }
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysDepartmentMapper.xml b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysDepartmentMapper.xml
index 181b0a0..e7be82d 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysDepartmentMapper.xml
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysDepartmentMapper.xml
@@ -80,4 +80,9 @@
 WHERE org_parent_id =( SELECT org_id FROM sys_hospital WHERE id = #{hosId} )
 AND org_name = #{departmentName}
     </select>
+    <select id="updatePay" resultType="boolean">
+        UPDATE sys_department
+        set is_pay=#{isPay}
+        where id=#{departmentId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml
index a46fb44..687de0e 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysHospitalMapper.xml
@@ -136,6 +136,9 @@
             <if test="p.isScreen != null and p.isScreen !=''">
                 and is_screen = #{p.isScreen}
             </if>
+            <if test="p.isPay != null and p.isPay !=''">
+                and is_pay = #{p.isPay}
+            </if>
             <if test="p.isAnswer != null and p.isAnswer !=''">
                 and is_answer = #{p.isAnswer}
             </if>
@@ -234,6 +237,7 @@
         DEP.server_user_id,
         DEP.org_id,
         DEP.is_del,
+        DEP.is_pay,
         DEP.enabled,
         hospitals.*
         FROM
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysDepartmentController.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysDepartmentController.java
index 5586df4..6da73ca 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysDepartmentController.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysDepartmentController.java
@@ -72,7 +72,24 @@
         SysDepartment model = sysDepartmentService.getById(id);
         return ResultBody.ok().data(model).msg("查询成功");
     }
-
+    /**
+     * 查询
+     */
+    @ApiOperation(value = "更新支付功能的开通状态")
+    @GetMapping("/updatePay")
+    public ResultBody updatePay(Long departmentId,Boolean isPay) {
+        boolean isPays = sysDepartmentService.updatePay(departmentId,isPay);
+        return ResultBody.ok().data(isPays).msg("操作成功");
+    }
+    /**
+     * 查询
+     */
+    @ApiOperation(value = "查看支付功能的开通状态")
+    @GetMapping("/getPayMes")
+    public ResultBody getPayMes(Long departmentId) {
+        SysDepartment model = sysDepartmentService.getById(departmentId);
+        return ResultBody.ok().data(model.getIsPay()).msg("操作成功");
+    }
     /**
      * 根据SysDepartment当做查询条件进行查询
      */
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ArithUtils.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ArithUtils.java
new file mode 100644
index 0000000..7352d44
--- /dev/null
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ArithUtils.java
@@ -0,0 +1,267 @@
+package com.kidgrow.common.utils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+@Slf4j
+public class ArithUtils {
+    /**
+     * 精度值
+     */
+    private static final int DEF_DIV_SCALE = 2;
+
+    private static final String POINT = ".";
+
+    private static  DecimalFormat decimalFormat = new DecimalFormat("#.####");
+
+    private ArithUtils() {
+
+    }
+
+    /**
+     * 提供精确的加法运算。如果参数为null,则视为0处理。
+     *
+     * @param v1 被加数
+     * @param v2 加数
+     * @return 两个参数的和
+     */
+    public static double add(Double v1, Double v2) {
+        BigDecimal b1 = BigDecimal.valueOf(v1 == null ? 0D : v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2 == null ? 0D : v2);
+        return b1.add(b2).doubleValue();
+    }
+
+    /**
+     * 提供精确的加法运算。
+     *
+     * @param vs 加数
+     * @return 和
+     */
+    public static double add(Double... vs) {
+        BigDecimal b1 = new BigDecimal(0);
+        for (Double d : vs) {
+            BigDecimal b2 = BigDecimal.valueOf(d == null ? 0D : d);
+            b1 = b1.add(b2);
+        }
+        return b1.doubleValue();
+    }
+
+
+    /**
+     * 提供精确的减法运算。
+     *
+     * @param v1 被减数
+     * @param v2 减数
+     * @return 两个参数的差
+     */
+    public static double sub(double v1, double v2) {
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.subtract(b2).doubleValue();
+    }
+
+    /**
+     * 提供精确的乘法运算。
+     *
+     * @param v1 被乘数
+     * @param v2 乘数
+     * @return 两个参数的积
+     */
+    public static double mul(double v1, double v2) {
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.multiply(b2).doubleValue();
+    }
+
+    /**
+     * 提供精确的乘法运算。
+     *
+     * @return 多个values的乘积
+     */
+    public static double mul(Double... values) {
+        BigDecimal result = new BigDecimal(1);
+        for (Double value : values) {
+            result = result.multiply(new BigDecimal(Double.toString(value)));
+        }
+        return result.doubleValue();
+    }
+
+    /**
+     * 提供精确的乘法运算。
+     *
+     * @param v1 被乘数
+     * @param v2 乘数
+     * @return 两个参数的积
+     */
+    public static double mul(double v1, double v2, int scale) {
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return ArithUtils.round(b1.multiply(b2).doubleValue(), scale);
+    }
+
+    /**
+     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后几位,以后的数字四舍五入。
+     *
+     * @param v1 被除数
+     * @param v2 除数
+     * @return 两个参数的商
+     */
+    public static double div(double v1, double v2) {
+        return div(v1, v2, DEF_DIV_SCALE);
+    }
+
+    /**
+     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
+     *
+     * @param v1    被除数
+     * @param v2    除数
+     * @param scale 表示表示需要精确到小数点以后几位。
+     * @return 两个参数的商
+     */
+    public static double div(double v1, double v2, int scale) {
+        if (scale < 0) {
+            throw new IllegalArgumentException("参数scale必须为整数为零!");
+        }
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 提供精确的小数位四舍五入处理。
+     *
+     * @param v     需要四舍五入的数字
+     * @param scale 小数点后保留几位
+     * @return 四舍五入后的结果
+     */
+    public static double round(double v, int scale) {
+        if (scale < 0) {
+            throw new IllegalArgumentException("参数scale必须为整数或零!");
+        }
+        BigDecimal b = BigDecimal.valueOf(v);
+        BigDecimal one = new BigDecimal("1");
+        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 提供精确的类型转换(Float)
+     *
+     * @param v 需要被转换的数字
+     * @return 返回转换结果
+     */
+    public static float convertsToFloat(double v) {
+        BigDecimal b = new BigDecimal(v);
+        return b.floatValue();
+    }
+
+    /**
+     * 提供精确的类型转换(Int)不进行四舍五入
+     *
+     * @param v 需要被转换的数字
+     * @return 返回转换结果
+     */
+    public static int convertsToInt(double v) {
+        BigDecimal b = new BigDecimal(v);
+        return b.intValue();
+    }
+
+    /**
+     * 提供精确的类型转换(Long)
+     *
+     * @param v 需要被转换的数字
+     * @return 返回转换结果
+     */
+    public static long convertsToLong(double v) {
+        BigDecimal b = new BigDecimal(v);
+        return b.longValue();
+    }
+
+    /**
+     * 返回两个数中大的一个值
+     *
+     * @param v1 需要被对比的第一个数
+     * @param v2 需要被对比的第二个数
+     * @return 返回两个数中大的一个值
+     */
+    public static double returnMax(double v1, double v2) {
+        BigDecimal b1 = new BigDecimal(v1);
+        BigDecimal b2 = new BigDecimal(v2);
+        return b1.max(b2).doubleValue();
+    }
+
+    /**
+     * 返回两个数中小的一个值
+     *
+     * @param v1 需要被对比的第一个数
+     * @param v2 需要被对比的第二个数
+     * @return 返回两个数中小的一个值
+     */
+    public static double returnMin(double v1, double v2) {
+        BigDecimal b1 = new BigDecimal(v1);
+        BigDecimal b2 = new BigDecimal(v2);
+        return b1.min(b2).doubleValue();
+    }
+
+    /**
+     * 精确比较两个数字
+     *
+     * @param v1 需要被对比的第一个数
+     * @param v2 需要被对比的第二个数
+     * @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
+     */
+    public static int compareTo(double v1, double v2) {
+        BigDecimal b1 = new BigDecimal(v1);
+        BigDecimal b2 = new BigDecimal(v2);
+        return b1.compareTo(b2);
+    }
+
+    /**
+     * 获取数字小数位数
+     *
+     * @param number 数字.
+     * @return 小数位数
+     */
+    public static int getDecimals(double number) {
+        String numberString = decimalFormat.format(number);
+        if (numberString.indexOf(POINT) > 0) {
+            return numberString.length() - String.valueOf(number).indexOf(".")
+                    - 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * 获取数字小数位数
+     *
+     * @param number 数字.
+     * @return 小数位数
+     */
+    public static int getDecimals(float number) {
+        String numberString = decimalFormat.format(number);
+        if (numberString.indexOf(POINT) > 0) {
+            return numberString.length() - String.valueOf(number).indexOf(".")
+                    - 1;
+        } else {
+            return 0;
+        }
+    }
+
+    /**
+     * 对double数据进行取精度.
+     *
+     * @param value        double数据.
+     * @param scale        精度位数(保留的小数位数).
+     * @param roundingMode : BigDecimal.ROUND_FLOOR(舍去scale位数后所有)
+     *                     精度取值方式.
+     * @return 精度计算后的数据.
+     */
+    public static double round(double value, int scale, int roundingMode) {
+        BigDecimal bd = new BigDecimal(value);
+        bd = bd.setScale(scale, roundingMode);
+        double d = bd.doubleValue();
+        bd = null;
+        return d;
+    }
+}
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
index ea1061a..faa35c9 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
@@ -21,10 +21,10 @@
                 <option value="1">-是-</option>
                 <option value="0">-否-</option>
             </select>
-            <select id="isanswer" placeholder="支付功能" lay-filter="ispay">
+            <select id="ispay" placeholder="支付功能" lay-filter="ispay">
                 <option value="">-支付功能-</option>
-                <option value="1">-是-</option>
-                <option value="0">-否-</option>
+                <option value="1">-已开通-</option>
+                <option value="0">-未开通-</option>
             </select>
             <input id="hosName" class="layui-input search-input" type="text" placeholder="按医院名" />
             <button id="hospita-btn-search" class="layui-btn icon-btn"><i class="layui-icon permissions"
@@ -229,6 +229,7 @@
         $('#hospita-btn-search').click(function () {
             var isscreen = $('#isscreen').val();
             var isanswer = $('#isanswer').val();
+            var ispay = $('#ispay').val();
             var hospitalstate = $('#hospitalstate').val();
             var hospitalName = $('#hosName').val();
 
@@ -240,6 +241,7 @@
             var whereModel = {
                 isScreen: isscreen,
                 isAnswer: isanswer,
+                isPay: ispay,
                 hospitalState: hospitalstate,
                 hospitalName: hospitalName,
                 hospitalProvince: hospitalProvince,
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
index e49a159..22ef169 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
@@ -21,22 +21,22 @@
     <div class="layui-form-item">
         <label class="layui-form-label" style="width: 150px;">单次支付金额(元)</label>
         <div class="layui-input-block">
-            <input name="payPrice" type="text" class="layui-input" maxlength="8" lay-verify="required|number" required
-                autocomplete="off" style="width: 200px;" />
+            <input name="payPrice" type="text" class="layui-input" maxlength="8" lay-verify="required" required
+                autocomplete="off" style="width: 200px;"  onkeyup="value=value.replace(/^|[^\d.]+/g,'')"/>
         </div>
     </div>
     <div class="layui-form-item">
         <label class="layui-form-label" style="width: 150px;">客户所得(元)</label>
         <div class="layui-input-block">
             <input name="payCustom" type="text" autocomplete="off" class="layui-input" maxlength="8"
-                lay-verify="required|number" required style="width: 200px;" />
+                lay-verify="required" required style="width: 200px;"  onkeyup="value=value.replace(/^|[^\d.]+/g,'')"/>
         </div>
     </div>
     <div class="layui-form-item">
         <label class="layui-form-label" style="width: 150px;">喜高所得(元)</label>
         <div class="layui-input-block">
             <input name="payKidgrow" type="text" autocomplete="off" class="layui-input" maxlength="8"
-                lay-verify="required|number" required style="width: 200px;" />
+                lay-verify="required" required style="width: 200px;"  onkeyup="value=value.replace(/^|[^\d.]+/g,'')"/>
         </div>
     </div>
     <div class="layui-form-item">
@@ -85,6 +85,9 @@
             if (0 === data.code) {
                 queryData = data.data;
                 if (queryData != null) {
+                    queryData.payPrice=(parseFloat(queryData.payPrice)/100).toFixed(2);
+                    queryData.payCustom=(parseFloat(queryData.payCustom)/100).toFixed(2);
+                    queryData.payKidgrow=(parseFloat(queryData.payKidgrow)/100).toFixed(2);
                     form.val('pay-form', queryData);
                 }
             }
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
index a5eb861..0156127 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
@@ -275,113 +275,141 @@
         //回显医院基本数据
         let hospitalData = admin.getTempData('t_hospital');
         if (hospitalData != null) {
-            form.val('recharge-form', hospitalData);
-            $("#hospitalAreas").val(hospitalData.hospitalProvince + " " + hospitalData.hospitalCity + " " +
-                hospitalData.hospitalArea);
-        }
-        //装载产品数据
-        table.render({
-            elem: '#product-table',
-            url: config.base_server + 'api-opration/product/all',
-            method: 'GET',
-            cellMinWidth: 50,
-            headers: {
-                'Authorization': 'Bearer ' + config.getToken().access_token
-            },
-            page: false,
-            where: {
-                is_del: 0,
-                enabled: 1
-            },
-            cols: [
-                [{
-                        field: 'proName',
-                        sort: true,
-                        width: 330,
-                        title: '产品名称',
-                        align: 'center',
-                        fixed: 'left'
-                    },
-                    {
-                        field: 'proType',
-                        sort: true,
-                        align: 'center',
-                        width: 80,
-                        templet: function (d) {
-                            if (d.proType === 0)
-                                return "试用"
-                            else
-                                return "正式"
-                        },
-                        title: '类型'
-                    },
-                    {
-                        field: 'proTime',
-                        width: 100,
-                        title: '时长',
-                        align: 'center',
-                        templet: function (d) {
-                            switch (d.proTimeUnit) {
-                                case 0:
-                                    return d.proTime + "天";
-                                    break;
-                                case 1:
-                                    return d.proTime + "月";
-                                    break;
-                                case 2:
-                                    return d.proTime + "年";
-                                    break;
-                            }
+            admin.req('api-user/sysdepartment/getPayMes?departmentId=' + hospitalData.departmentId, {},
+                function (data) {
+                    layer.closeAll('loading');
+                    debugger
+                    if (0 === data.code) {
+                        queryData = data.data;
+                        if (queryData === true) {
+                                admin.finishPopupCenter();
+                            layer.msg("当前科室开通了单次支付功能,不能进行充值业务!", {
+                                icon: 3,
+                                time: 5000
+                            });
+                        } else {
+                            form.val('recharge-form', hospitalData);
+                            $("#hospitalAreas").val(hospitalData.hospitalProvince + " " + hospitalData
+                                .hospitalCity + " " +
+                                hospitalData.hospitalArea);
+
+                            //装载产品数据
+                            table.render({
+                                elem: '#product-table',
+                                url: config.base_server + 'api-opration/product/all',
+                                method: 'GET',
+                                cellMinWidth: 50,
+                                headers: {
+                                    'Authorization': 'Bearer ' + config.getToken().access_token
+                                },
+                                page: false,
+                                where: {
+                                    is_del: 0,
+                                    enabled: 1
+                                },
+                                cols: [
+                                    [{
+                                            field: 'proName',
+                                            sort: true,
+                                            width: 330,
+                                            title: '产品名称',
+                                            align: 'center',
+                                            fixed: 'left'
+                                        },
+                                        {
+                                            field: 'proType',
+                                            sort: true,
+                                            align: 'center',
+                                            width: 80,
+                                            templet: function (d) {
+                                                if (d.proType === 0)
+                                                    return "试用"
+                                                else
+                                                    return "正式"
+                                            },
+                                            title: '类型'
+                                        },
+                                        {
+                                            field: 'proTime',
+                                            width: 100,
+                                            title: '时长',
+                                            align: 'center',
+                                            templet: function (d) {
+                                                switch (d.proTimeUnit) {
+                                                    case 0:
+                                                        return d.proTime + "天";
+                                                        break;
+                                                    case 1:
+                                                        return d.proTime + "月";
+                                                        break;
+                                                    case 2:
+                                                        return d.proTime + "年";
+                                                        break;
+                                                }
+                                            }
+                                        },
+                                        {
+                                            field: 'ailightCount',
+                                            width: 100,
+                                            align: 'center',
+                                            title: '读片量'
+                                        },
+                                        {
+                                            field: 'recordCount',
+                                            width: 100,
+                                            align: 'center',
+                                            title: '报告量'
+                                        },
+                                        {
+                                            field: 'beginTime',
+                                            align: 'center',
+                                            width: 120,
+                                            title: '开始日期',
+                                            event: "date"
+                                        },
+                                        {
+                                            field: 'endTime',
+                                            align: 'center',
+                                            width: 120,
+                                            title: '结束日期',
+                                            event: "date"
+                                        },
+                                        {
+                                            field: 'isShare',
+                                            fixed: 'right',
+                                            align: 'center',
+                                            width: 100,
+                                            templet: '#product-tpl-isShare',
+                                            title: '共享'
+                                        },
+                                        {
+                                            field: 'id',
+                                            fixed: 'right',
+                                            align: 'center',
+                                            width: 100,
+                                            toolbar: '#product-tpl-bar',
+                                            title: '操作'
+                                        }
+                                    ]
+                                ],
+                                done: function (res) {
+                                    permissionsInput(res, config);
+                                }
+                            });
                         }
-                    },
-                    {
-                        field: 'ailightCount',
-                        width: 100,
-                        align: 'center',
-                        title: '读片量'
-                    },
-                    {
-                        field: 'recordCount',
-                        width: 100,
-                        align: 'center',
-                        title: '报告量'
-                    },
-                    {
-                        field: 'beginTime',
-                        align: 'center',
-                        width: 120,
-                        title: '开始日期',
-                        event: "date"
-                    },
-                    {
-                        field: 'endTime',
-                        align: 'center',
-                        width: 120,
-                        title: '结束日期',
-                        event: "date"
-                    },
-                    {
-                        field: 'isShare',
-                        fixed: 'right',
-                        align: 'center',
-                        width: 100,
-                        templet: '#product-tpl-isShare',
-                        title: '共享'
-                    },
-                    {
-                        field: 'id',
-                        fixed: 'right',
-                        align: 'center',
-                        width: 100,
-                        toolbar: '#product-tpl-bar',
-                        title: '操作'
                     }
-                ]
-            ],
-            done: function (res) {
-                permissionsInput(res, config);
-            }
-        });
+                    else
+                    {
+                        admin.finishPopupCenter();
+                        layer.msg("验证医院科室数据异常!", {
+                                icon: 2,
+                                time: 3000
+                            });
+                    }
+                }, 'get');
+
+        }
+
         //待充值列表功能操作
         table.on('tool(product-table-temp)', function (obj) {
             if (obj.event === "del") {
@@ -403,7 +431,7 @@
                     format: "yyyy-MM-dd",
                     show: true,
                     done: function (value, date) {
-                        var nowTr=obj.tr;
+                        var nowTr = obj.tr;
                         if (field === "beginTime") {
                             var endTimes = getNowDate(data.proTime, data.proTimeUnit,
                                 value);

--
Gitblit v1.8.0