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未删除 */ 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); /** * 统计获取数据量 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); } 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 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> 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,6 +133,18 @@ } return ResultBody.failed().msg(errMsg.toString()); } else { 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()); @@ -156,12 +172,15 @@ } } boolean v = payManagerService.saveOrUpdate(payManager); //修改科室的支付功能状态 sysDepartmentService.updatePay(payManager.getDepartmentId(),payManager.getEnabled()); if (v) { return ResultBody.ok().data(payManager).msg("保存成功"); } else { return ResultBody.failed().msg("保存失败"); } } } } } 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: kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/SysDepartmentService.java
New file @@ -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); } kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-api/src/main/java/com/kidgrow/usercenter/feign/fallback/SysDepartmentServiceFallbackFactory.java
New file @@ -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("操作失败"); } }; } } 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; } 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); } 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); 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)); } 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> 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 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当做查询条件进行查询 */ kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/ArithUtils.java
New file @@ -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; } } 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, 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); } } kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
@@ -275,10 +275,24 @@ //回显医院基本数据 let hospitalData = admin.getTempData('t_hospital'); if (hospitalData != null) { 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 + " " + $("#hospitalAreas").val(hospitalData.hospitalProvince + " " + hospitalData .hospitalCity + " " + hospitalData.hospitalArea); } //装载产品数据 table.render({ elem: '#product-table', @@ -382,6 +396,20 @@ 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") {