kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ProductOrderDetail.java
@@ -70,15 +70,21 @@ @NotEmpty(message = "是否删除,1删除,0未删除不能为空") private Boolean isDel; /** * 产品的读片总量 */ @NotNull(message = "产品的读片总量") private Integer orderAilightCount; /** * 产品的报告总量 */ @NotNull(message = "产品的报告总量") private Integer orderRecordCount; /** * 读片量 */ @NotNull(message = "读片量不能为空") private Integer ailightCount; /** * 总共的读片量 */ @NotNull(message = "总共的读片量不能为空") private Integer count; /** * 报告量 */ kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -13,8 +13,10 @@ import com.kidgrow.oprationcenter.model.ConsumptionRecord; import com.kidgrow.oprationcenter.model.ProductOrder; import com.kidgrow.oprationcenter.model.ProductOrderDetail; import com.kidgrow.oprationcenter.model.SysProduct; import com.kidgrow.oprationcenter.service.IProductOrderDetailService; import com.kidgrow.oprationcenter.service.IProductOrderService; import com.kidgrow.oprationcenter.service.ISysProductService; import com.kidgrow.oprationcenter.vo.*; import com.kidgrow.redis.util.RedisUtils; import com.kidgrow.usercenter.feign.SysDoctorService; @@ -52,6 +54,8 @@ @Autowired private IProductOrderService iProductOrderService; @Autowired private ISysProductService productService; @Autowired private RedisUtils redisUtils; /** * 列表 @@ -62,6 +66,15 @@ public PageResult<ProductOrderDetail> findList(Map<String, Object> params){ Page<ProductOrderDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit")); List<ProductOrderDetail> list = baseMapper.findList(page, params); for (ProductOrderDetail productOrderDetail : list) { if(productOrderDetail.getOrderAilightCount()==null){ SysProduct byId = productService.getById(productOrderDetail.getProId()); if(byId!=null){ productOrderDetail.setOrderAilightCount(byId.getAilightCount()); productOrderDetail.setOrderRecordCount(byId.getRecordCount()); } } } return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build(); } /** kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderDetailController.java
@@ -4,6 +4,7 @@ import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.controller.BaseController; import com.kidgrow.common.model.*; import com.kidgrow.common.utils.DateUtils; import com.kidgrow.oprationcenter.model.HospitalInfo; import com.kidgrow.oprationcenter.model.ProductOrder; import com.kidgrow.oprationcenter.model.ProductOrderDetail; @@ -451,13 +452,13 @@ map.put("enabled",true); map.put("is_del",false); List<ProductOrder> productOrders = productOrderService.listByMap(map); IntSummaryStatistics intSummaryStatistics = productOrders.stream().mapToInt((x) -> x.getContractNum()).summaryStatistics(); IntSummaryStatistics intSummaryStatistics = productOrders.stream().filter(a-> a.getContractNum()!=null).mapToInt((x) -> x.getContractNum()).summaryStatistics(); Date minDate = productOrders.stream().map(e -> e.getContractBeginTime()).min((e1, e2) -> e1.compareTo(e2)).get(); Date manDate = productOrders.stream().map(e -> e.getContractEndTime()).max((e1, e2) -> e1.compareTo(e2)).get(); map = new HashMap<>(); map.put("count",intSummaryStatistics.getSum()); map.put("beginTime",minDate); map.put("endTime",manDate); map.put("count", intSummaryStatistics.getSum()); map.put("beginTime",DateUtils.formatDate(minDate,"yyyy-MM-dd HH:mm:ss")); map.put("endTime",DateUtils.formatDate(manDate,"yyyy-MM-dd HH:mm:ss")); return ResultBody.ok().data(map); } } kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/contract.html
@@ -85,6 +85,9 @@ }, { field: 'contractTime', width: 120, title: '合同签订时间', templet: function (d) { if(d.contractTime==null){ return new Date(d.createTime).dateFormat("yyyy/MM/dd"); } return new Date(d.contractTime).dateFormat("yyyy/MM/dd"); } }, kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
@@ -36,7 +36,7 @@ <div class="layui-form-item" style="padding: 0; margin-bottom: 0px;"> <div class="layui-row"> <div class="layui-col-sm5"> <label class="layui-form-label" style="padding: 0 30px 0 0;">地区</label> <label class="layui-form-label" style="padding: 0 20px 0 0;">地区</label> <input name="hospitalAreas" id="hospitalAreas" type="text" style="border: none; width: 250px; margin-top:-10px" readonly class="layui-input" /> </div> @@ -62,14 +62,16 @@ <label class="layui-form-label" style="padding: 10px 30px 0 0px;">合同名称</label> <div class="layui-input-block"> <input name="contractTitle" id="contractTitle" type="text" class="layui-input" maxlength="50" lay-verify="required" required autocomplete="off" /> maxlength="50" lay-verify="required" required autocomplete="off" style="display: inline-block;width: 80%;" /> </div> </div> <div class="layui-col-sm6"> <label class="layui-form-label">合同编号</label> <div class="layui-input-block"> <input name="contractNo" id="contractNo" type="text" class="layui-input" maxlength="50" autocomplete="off" lay-verify="required" required /> maxlength="50" autocomplete="off" lay-verify="required" required style="display: inline-block;width: 80%;" /> </div> </div> </div> @@ -78,22 +80,22 @@ <div class="layui-row"> <div class="layui-col-sm6"> <label class="layui-form-label">当前软件服务周期:</label> <div class="layui-col-sm4" style="margin-right: 30px;"> <div class="layui-input-block"> <input autocomplete="off" name="contractBeginTime_not" disabled id="contractBeginTime_not" type="text" placeholder="请输开始时间" class="layui-input" maxlength="50" /> </div> <div class="layui-col-sm4 "> maxlength="50" readonly style="border: none; display: inline-block;width: 40%;" /> <input autocomplete="off" name="contractEndTime_not" disabled id="contractEndTime_not" type="text" placeholder="请输入结束时间" class="layui-input" maxlength="50" /> maxlength="50" readonly style="border: none; display: inline-block;width: 40%;" /> </div> </div> <div class="layui-col-sm6"> <label class="layui-form-label">当前读片总量:</label> <div class="layui-input-inline"> <input autocomplete="off" name="contractNum_not" id="contractNum_not" disabled type="text" class="layui-input" maxlength="50" /> type="text" class="layui-input" maxlength="50" readonly style="border: none;" /> </div> </div> <!-- <div class="layui-col-sm6"> @@ -114,16 +116,13 @@ required /> --> <!-- <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text" class="layui-input" maxlength="50" lay-verify="required" required /> --> <div class="layui-col-sm4" style="margin-right: 30px;"> <div class="layui-input-block"> <input autocomplete="off" name="contractBeginTime" id="contractBeginTime" type="text" placeholder="请输开始时间" class="layui-input" maxlength="50" lay-verify="required" required /> </div> <div class="layui-col-sm4 "> lay-verify="required" required style="display: inline-block;width: 40%;" /> <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text" placeholder="请输入结束时间" class="layui-input" maxlength="50" lay-verify="required" required /> required style="display: inline-block;width: 40%;" /> </div> </div> <div class="layui-col-sm6"> @@ -157,7 +156,7 @@ <label class="layui-form-label">充值名称:</label> <div class="layui-input-inline"> <input autocomplete="off" id="custom_proName" type="text" class="layui-input" maxlength="50" value="1000" lay-verify="required" required /> maxlength="50" lay-verify="required" required /> </div> </div> </div> @@ -169,8 +168,7 @@ <div class="layui-input-inline"> <input autocomplete="off" id="custom_ailightCount" onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text" class="layui-input" maxlength="50" value="1000" lay-verify="required" required />张 class="layui-input" maxlength="50" lay-verify="required" required /> </div> </div> <div class="layui-col-sm6"> @@ -182,12 +180,11 @@ </div> <div class="layui-form-item" style="margin: 10px 0px 0px 0px;"> <div class="layui-row"> <div class="layui-col-sm6"> <div class="layui-input-inline"> <input type="radio" id="termType" name="termType" value="true" title="期限限制" /> <div class="layui-col-sm12"> <div class="layui-input-inline" style="width: 160px;text-align: right;"> <input type="radio" id="termType" name="termType" value="true" checked title="期限限制" /> </div> </div> <div class="layui-col-sm6"> <div class="layui-col-sm4" style="margin-right: 30px;"> <input autocomplete="off" id="custom_beginTime" type="text" placeholder="请输开始时间" class="layui-input" maxlength="50" /> @@ -200,7 +197,8 @@ </div> </div> <div class="layui-form-item"> <div class="layui-input-block" style="width: 50;"> <div class="layui-input-block" style="text-align: right;padding-right: 100px;padding-top: 50px;"> <input class="layui-btn" type="button" id="custom_submit" value="确定" /> </div> </div> @@ -260,7 +258,7 @@ //充值进行中 var isRun = false; //执行一个laydate实例 laydate.render({ var contractBeginTime= laydate.render({ elem: '#contractBeginTime', //指定元素 done: function (value, date, endDate) { var startDate = new Date(value).getTime(); @@ -268,17 +266,48 @@ if (endTime < startDate) { layer.msg('结束时间不能小于开始时间'); $('#contractBeginTime').val($('#contractEndTime').val()); } else { $('#custom_beginTime').val($("#contractBeginTime").val()) custom_beginTimes.config.min = { year: date.year, month: date.month - 1,//关键 date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds } } } }); laydate.render({ var contractEndTime = laydate.render({ elem: '#contractEndTime', //指定元素 // min: $("#contractEndTime_not").val(), done: function (value, date, endDate) { var startDate = new Date($('#contractBeginTime').val()).getTime(); var endTime = new Date(value).getTime(); if (endTime < startDate) { layer.msg('结束时间不能小于开始时间'); $('#contractEndTime').val($('#contractBeginTime').val()); } else { $('#custom_endTime').val($("#contractEndTime").val()) custom_endTimes.config.max = { year: date.year, month: date.month - 1,//关键 date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds } var begin = new Date($("#contractBeginTime").val()) custom_endTimes.config.min = { year: layui.util.toDateString(begin, "yyyy"), month: layui.util.toDateString(begin, "MM") - 1,//关键 date: layui.util.toDateString(begin, "dd"), hours: layui.util.toDateString(begin, "HH"), minutes: layui.util.toDateString(begin, "mm"), seconds: layui.util.toDateString(begin, "ss") } } } }); @@ -288,8 +317,10 @@ laydate.render({ elem: '#contractEndTime_not' //指定元素 }); laydate.render({ var custom_beginTimes = laydate.render({ elem: '#custom_beginTime', //指定元素 // min: $("#contractEndTime").val(), // man: $("#contractBeginTime").val(), done: function (value, date, endDate) { var startDate = new Date(value).getTime(); var endTime = new Date($('#custom_endTime').val()).getTime(); @@ -299,8 +330,10 @@ } } }); laydate.render({ var custom_endTimes = laydate.render({ elem: '#custom_endTime', //指定元素 // min: $("#contractEndTime").val(), // man: $("#contractBeginTime").val(), done: function (value, date, endDate) { var startDate = new Date($('#custom_beginTime').val()).getTime(); var endTime = new Date(value).getTime(); @@ -408,8 +441,34 @@ ] }); } //获取软件的服务周期 var getCycleTime = function (departmentId) { admin.req('api-opration/productorderdetail/getContractBeginEndTimeAndNum', { departmentId: departmentId }, function (data) { if (data.code == 0) { $("#contractBeginTime_not").val(layui.util.toDateString(data.data.beginTime, "yyyy-MM-dd")); $("#contractEndTime_not").val(layui.util.toDateString(data.data.endTime, "yyyy-MM-dd")); contractBeginTime.config.max = { year: layui.util.toDateString(data.data.beginTime, "yyyy"), month: layui.util.toDateString(data.data.beginTime, "MM") - 1,//关键 date: layui.util.toDateString(data.data.beginTime, "dd"), hours: layui.util.toDateString(data.data.beginTime, "HH"), minutes: layui.util.toDateString(data.data.beginTime, "mm"), seconds: layui.util.toDateString(data.data.beginTime, "ss") } contractEndTime.config.min = { year: layui.util.toDateString(data.data.endTime, "yyyy"), month: layui.util.toDateString(data.data.endTime, "MM") - 1,//关键 date: layui.util.toDateString(data.data.endTime, "dd"), hours: layui.util.toDateString(data.data.endTime, "HH"), minutes: layui.util.toDateString(data.data.endTime, "mm"), seconds: layui.util.toDateString(data.data.endTime, "ss") } $("#contractNum_not").val(data.data.count); } }, "get") } //回显医院基本数据 let hospitalData = admin.getTempData('t_hospital'); @@ -615,6 +674,7 @@ tempDataList(data); waitRecharge(); }) getCycleTime(hospitalData.departmentId); } //待充值列表功能操作 table.on('tool(product-table-temp)', function (obj) { @@ -663,10 +723,13 @@ data.isShare = obj.tr.find("td[data-field='isShare'] em").text(); data.isShare = (data.isShare.indexOf("不") == 0) ? 0 : 1; //判断待加入产品的总数是否大于合同的总数 var msg = isthenNum(data.ailightCount); if (msg != null) { layer.msg(msg); return false; //试用产品不计算总数 if (data.proType == 1) { var msg = isthenNum(data.ailightCount); if (msg != null) { layer.msg(msg); return false; } } if (!strUtil.isEmpty(data.beginTime) && !strUtil.isEmpty(data.endTime)) { if (dateUtil.compareDate(data.endTime, data.beginTime)) { @@ -816,7 +879,8 @@ ' 00:00:00' : "", proEndtime: item.endTime != "" ? item.endTime + ' 23:59:59' : "", count: item.ailightCount orderAilightCount: item.ailightCount, orderRecordCount: item.recordCount != null ? item.recordCount : 0, }; listDetailData.push(detailData); }) @@ -881,4 +945,13 @@ } }); }); </script> </script> <style> .layui-form-label { width: 140px; } .layui-input-block { margin-left: 160px; } </style> kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/rechargeupdate.html
@@ -91,9 +91,9 @@ </div> --> <div class="layui-input-block"> <input autocomplete="off" name="contractBeginTime" id="contractBeginTime" type="text" placeholder="请输开始时间" class="layui-input" readonly type="text" placeholder="请输开始时间" disabled class="layui-input" readonly style="border: none; margin-top:-10px;display: inline-block;width: 46%;" /> <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text" <input autocomplete="off" name="contractEndTime" disabled id="contractEndTime" type="text" placeholder="请输入结束时间" class="layui-input" readonly style="border: none; margin-top:-10px;display: inline-block;width: 46%;" /> </div> @@ -150,7 +150,7 @@ <label class="layui-form-label">充值名称:</label> <div class="layui-input-inline"> <input autocomplete="off" id="custom_proName" type="text" class="layui-input" maxlength="50" value="1000" lay-verify="required" required /> maxlength="50" lay-verify="required" required /> </div> </div> </div> @@ -162,8 +162,8 @@ <div class="layui-input-inline"> <input autocomplete="off" id="custom_ailightCount" onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text" class="layui-input" maxlength="50" value="1000" lay-verify="required" required />张 class="layui-input" maxlength="50" lay-verify="required" required /> </div> </div> <div class="layui-col-sm6"> @@ -175,12 +175,10 @@ </div> <div class="layui-form-item" style="margin: 10px 0px 0px 0px;"> <div class="layui-row"> <div class="layui-col-sm6"> <div class="layui-input-inline"> <input type="radio" id="termType" name="termType" value="true" title="期限限制" /> <div class="layui-col-sm12"> <div class="layui-input-inline" style="width: 120px;text-align: right;"> <input type="radio" id="termType" name="termType" value="true" checked title="期限限制" /> </div> </div> <div class="layui-col-sm6"> <div class="layui-col-sm4" style="margin-right: 30px;"> <input autocomplete="off" id="custom_beginTime" type="text" placeholder="请输开始时间" class="layui-input" maxlength="50" /> @@ -193,10 +191,11 @@ </div> </div> <div class="layui-form-item"> <div class="layui-input-block" style="width: 50;"> <div class="layui-input-block" style="text-align: right;padding-right: 100px;padding-top: 50px;"> <input class="layui-btn" type="button" id="custom_submit" value="确定" /> </div> </div> </div> </div> </div> @@ -225,7 +224,7 @@ </form> <!-- 表格操作列 --> <script type="text/html" id="product-tpl-bar-now"> {{# if (d.ailightCount !=d.count){}} {{# if (d.ailightCount !=d.orderAilightCount){}} {{# if (d.enabled){}} <a class="layui-btn layui-btn-xs" lay-event="order_detail_enable">禁用</a> {{# } else { }} @@ -270,7 +269,7 @@ //充值进行中 var isRun = false; //执行一个laydate实例 laydate.render({ var contractBeginTime= laydate.render({ elem: '#contractBeginTime', //指定元素 done: function (value, date, endDate) { var startDate = new Date(value).getTime(); @@ -278,17 +277,48 @@ if (endTime < startDate) { layer.msg('结束时间不能小于开始时间'); $('#contractBeginTime').val($('#contractEndTime').val()); } else { $('#custom_beginTime').val($("#contractBeginTime").val()) custom_beginTimes.config.min = { year: date.year, month: date.month - 1,//关键 date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds } } } }); laydate.render({ var contractEndTime = laydate.render({ elem: '#contractEndTime', //指定元素 // min: $("#contractEndTime_not").val(), done: function (value, date, endDate) { var startDate = new Date($('#contractBeginTime').val()).getTime(); var endTime = new Date(value).getTime(); if (endTime < startDate) { layer.msg('结束时间不能小于开始时间'); $('#contractEndTime').val($('#contractBeginTime').val()); } else { $('#custom_endTime').val($("#contractEndTime").val()) custom_endTimes.config.max = { year: date.year, month: date.month - 1,//关键 date: date.date, hours: date.hours, minutes: date.minutes, seconds: date.seconds } var begin = new Date($("#contractBeginTime").val()) custom_endTimes.config.min = { year: layui.util.toDateString(begin, "yyyy"), month: layui.util.toDateString(begin, "MM") - 1,//关键 date: layui.util.toDateString(begin, "dd"), hours: layui.util.toDateString(begin, "HH"), minutes: layui.util.toDateString(begin, "mm"), seconds: layui.util.toDateString(begin, "ss") } } } }); @@ -298,8 +328,10 @@ laydate.render({ elem: '#contractEndTime_not' //指定元素 }); laydate.render({ var custom_beginTimes = laydate.render({ elem: '#custom_beginTime', //指定元素 // min: $("#contractEndTime").val(), // man: $("#contractBeginTime").val(), done: function (value, date, endDate) { var startDate = new Date(value).getTime(); var endTime = new Date($('#custom_endTime').val()).getTime(); @@ -309,8 +341,10 @@ } } }); laydate.render({ var custom_endTimes = laydate.render({ elem: '#custom_endTime', //指定元素 // min: $("#contractEndTime").val(), // man: $("#contractBeginTime").val(), done: function (value, date, endDate) { var startDate = new Date($('#custom_beginTime').val()).getTime(); var endTime = new Date(value).getTime(); @@ -448,8 +482,11 @@ field: 'ailightCount', width: 100, align: 'center', title: '读片剩余量' }, { field: 'count', width: 100, align: 'center', title: '读片使用量', templet: function (d) { return d.count - d.ailightCount; field: 'orderAilightCount', width: 100, align: 'center', title: '读片使用量', templet: function (d) { // if(d.orderAilightCount==null){ // return ""; // } return d.orderAilightCount - d.ailightCount; } }, { @@ -478,10 +515,12 @@ //如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度 var num = 0; res.data.forEach(element => { if (element.enabled) { num += element.count; } else { num += (element.count - element.ailightCount) if(element.proType==1){ if (element.enabled) { num += element.orderAilightCount; } else { num += (element.orderAilightCount - element.ailightCount) } } }); $("#contractNum_not").val($("#contractNum").val() - num); @@ -501,6 +540,7 @@ admin.putTempData("t_tempProduct", ""); } } //获取医院的地址 var getHospitalAddress=function(id){ admin.req('api-user/syshospital/' + id, {}, function (data) { @@ -514,6 +554,35 @@ },"get") } //获取软件的服务周期 var getCycleTime=function(departmentId){ admin.req('api-opration/productorderdetail/getContractBeginEndTimeAndNum' , {departmentId: departmentId}, function (data) { if(data.code==0){ $("#contractBeginTime").val(layui.util.toDateString(data.data.beginTime,"yyyy-MM-dd")); $("#contractEndTime").val( layui.util.toDateString(data.data.endTime,"yyyy-MM-dd")); $("#contractNum").val(data.data.count); contractBeginTime.config.max = { year: layui.util.toDateString(data.data.beginTime, "yyyy"), month: layui.util.toDateString(data.data.beginTime, "MM") - 1,//关键 date: layui.util.toDateString(data.data.beginTime, "dd"), hours: layui.util.toDateString(data.data.beginTime, "HH"), minutes: layui.util.toDateString(data.data.beginTime, "mm"), seconds: layui.util.toDateString(data.data.beginTime, "ss") } contractEndTime.config.min = { year: layui.util.toDateString(data.data.endTime, "yyyy"), month: layui.util.toDateString(data.data.endTime, "MM") - 1,//关键 date: layui.util.toDateString(data.data.endTime, "dd"), hours: layui.util.toDateString(data.data.endTime, "HH"), minutes: layui.util.toDateString(data.data.endTime, "mm"), seconds: layui.util.toDateString(data.data.endTime, "ss") } } },"get") } //回显医院基本数据 let hospitalData = admin.getTempData('t_hospital'); @@ -534,6 +603,9 @@ } else { hospitalData.contractBeginTime = layui.util.toDateString(hospitalData.contractBeginTime, 'yyyy-MM-dd') hospitalData.contractEndTime = layui.util.toDateString(hospitalData.contractEndTime, 'yyyy-MM-dd') delete hospitalData.contractBeginTime delete hospitalData.contractEndTime delete hospitalData.contractNum form.val('recharge-form', hospitalData); getHospitalAddress(hospitalData.hospitalId); //装载产品数据 @@ -722,6 +794,7 @@ $("#submit").click(function () { submit(); }) getCycleTime(hospitalData.departmentId); } //已充值列表 功能操作 table.on('tool(product-table-now)', function (obj) { @@ -804,10 +877,13 @@ data.isShare = obj.tr.find("td[data-field='isShare'] em").text(); data.isShare = (data.isShare.indexOf("不") == 0) ? 0 : 1; //判断待加入产品的总数是否大于合同的总数 var msg = isthenNum(data.ailightCount); if (msg != null) { layer.msg(msg); return false; //试用产品不计算总数 if(data.proType==1){ var msg = isthenNum(data.ailightCount); if (msg != null) { layer.msg(msg); return false; } } if (!strUtil.isEmpty(data.beginTime) && !strUtil.isEmpty(data.endTime)) { if (dateUtil.compareDate(data.endTime, data.beginTime)) { @@ -926,7 +1002,8 @@ ' 00:00:00' : "", proEndtime: item.endTime != "" ? item.endTime + ' 23:59:59' : "", count: item.ailightCount orderAilightCount: item.ailightCount, orderRecordCount: item.recordCount != null ? item.recordCount : 0, }; listDetailData.push(detailData); })