package com.kidgrow.oprationcenter.controller; import com.kidgrow.common.annotation.LoginUser; import com.kidgrow.common.constant.CommonConstant; import com.kidgrow.common.controller.BaseController; import com.kidgrow.common.model.*; import com.kidgrow.oprationcenter.model.HospitalInfo; import com.kidgrow.oprationcenter.model.ProductOrder; import com.kidgrow.oprationcenter.model.ProductOrderDetail; import com.kidgrow.oprationcenter.model.ProductOrderRecord; import com.kidgrow.oprationcenter.service.IBusinessRecordsService; import com.kidgrow.oprationcenter.service.IProductOrderDetailService; import com.kidgrow.oprationcenter.service.IProductOrderRecordService; import com.kidgrow.oprationcenter.service.IProductOrderService; import com.kidgrow.oprationcenter.vo.OrderChartVo; import com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail; import com.kidgrow.oprationcenter.vo.UserProductData; import com.kidgrow.usercenter.feign.SysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* * @Description: 产品/明显的充值记录 * @Project: 运营中心 * @CreateDate: Created in 2020-04-02 18:25:34
* @Author: liuke * @version: 1.0 */ @Slf4j @RestController @RequestMapping("/productorderdetail") @Api(tags = "产品/明显的充值记录") public class ProductOrderDetailController extends BaseController { @Autowired private IProductOrderDetailService productOrderDetailService; @Autowired private IProductOrderRecordService productOrderRecordService; @Autowired private IBusinessRecordsService businessRecordsService; @Autowired private IProductOrderService productOrderService; @Autowired private SysUserService sysUserServiceFeign; /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @GetMapping public PageResult list(@RequestParam Map params) { if (params.size() == 0) { params.put("page", 1); params.put("limit", 10); } return productOrderDetailService.findList(params); } /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @GetMapping("all") public PageResult all(@RequestParam Map params) { if (params.size() == 0) { params.put("page", 1); params.put("limit", 10); } return productOrderDetailService.all(params); } /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @GetMapping("alldetail") public PageResult alldetail(@RequestParam Map params) { if (params.size() == 0) { params.put("page", 1); params.put("limit", 10); } return productOrderDetailService.departmentProductDetail(params); } /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @PostMapping("/alldata") public PageResult findAllDataList(@RequestParam Map params) { if (params.size() == 0) { params.put("page", 1); params.put("limit", 10); } if (params.get("diagnosticHospitalId") == null) return PageResult.builder().data(null).code(0).count(0L).build(); return productOrderDetailService.findAllDataList(params); } /** * 列表 */ @ApiOperation(value = "查询列表") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"), @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer") }) @GetMapping("/group") public PageResult groupList(@RequestParam Map params) { if (params.size() == 0) { params.put("page", 1); params.put("limit", 10); } return productOrderDetailService.groupList(params); } /** * 获取医院套餐是否到期和到期时间 * data内 isend为true说明套餐到期 * endtime上套餐的到期时间 * * @param hospitalId * @param departmentId * @return */ @ApiOperation(value = "获取医院套餐是否到期和到期时间") @GetMapping("/UserProductDetailData") public ResultBody UserProductDetailData(@RequestParam Long hospitalId, @RequestParam Long departmentId,@RequestParam String diagnosticId) { return productOrderDetailService.UserProductDetailData(hospitalId, departmentId,diagnosticId); } /** * 获取医院套餐是否到期和到期时间 * data内 isend为true说明套餐到期 * endtime上套餐的到期时间 * * @return */ @ApiOperation(value = "获取医院套餐是否到期和到期时间") @PostMapping("/serviceperiod") public ResultBody ServicePeriod(@RequestBody HospitalInfo hospitalInfo) { return productOrderDetailService.UserProductDetailData(hospitalInfo.getHospitalId(), hospitalInfo.getDepartmentId(),hospitalInfo.getDiagnosticId()); } /** * 查询 */ @ApiOperation(value = "查询") @GetMapping("/{id}") public ResultBody findById(@PathVariable Long id) { ProductOrderDetail model = productOrderDetailService.getById(id); return ResultBody.ok().data(model).msg("查询成功"); } /** * 根据ProductOrderDetail当做查询条件进行查询 */ @ApiOperation(value = "根据ProductOrderDetail当做查询条件进行查询") @PostMapping("/query") public ResultBody findByObject(@RequestBody ProductOrderDetail productOrderDetail) { ProductOrderDetail model = productOrderDetailService.findByObject(productOrderDetail); return ResultBody.ok().data(model).msg("查询成功"); } /** * 新增or更新 */ @ApiOperation(value = "保存") @PostMapping public ResultBody save(@Valid @RequestBody ProductOrderDetail productOrderDetail, BindingResult bindingResult, @LoginUser SysUser sysUser) { List errMsg = new ArrayList<>(); if (bindingResult.hasErrors()) { for (ObjectError error : bindingResult.getAllErrors()) { errMsg.add(error.getDefaultMessage()); } return ResultBody.failed().msg(errMsg.toString()); } else { List organizations = sysUser.getOrganizations(); if (organizations.size() > 0) { productOrderDetail.setCreateUserOrgCode(organizations.get(organizations.size() - 1).getOrgCode()); } boolean v = productOrderDetailService.saveOrUpdate(productOrderDetail); if (v) { return ResultBody.ok().data(productOrderDetail).msg("保存成功"); } else { return ResultBody.failed().msg("保存失败"); } } } /** * 新增or更新 套餐充值 */ @ApiOperation(value = "保存") @PostMapping("/saveall") @Transactional(rollbackFor = Exception.class) public ResultBody batchInsert(@Valid @RequestBody List list,BindingResult bindingResult) { List errMsg = new ArrayList<>(); if (bindingResult.hasErrors()) { for (ObjectError error : bindingResult.getAllErrors()) { errMsg.add(error.getDefaultMessage()); } return ResultBody.failed().msg(errMsg.toString()); } else { //先检查科室试用数量是否已经超 ProductOrder productOrder = productOrderService.getById(list.get(0).getOrderId()); if (productOrder != null) { //是否管理人员 boolean ismanager=false, //是否有待审核套餐 isenabled=false; //如果是超管,高管,销售部门管理 则不受次数限制 ResultBody loginAppUserTemp=sysUserServiceFeign.getLoginAppUser(); LoginAppUser loginAppUser=loginAppUserTemp.getData(); if (loginAppUser != null) { List sysRoleList = loginAppUser.getRoles(); if (sysRoleList != null && sysRoleList.size() > 0) { for (int i = 0; i < sysRoleList.size(); i++) { String roleName = sysRoleList.get(i).getCode(); if (roleName.equals(CommonConstant.SYSTEM_ADMIN_ROLE_CODE) || roleName.equals(CommonConstant.SALE_MANAGER_ROLE_CODE) || roleName.equals(CommonConstant.PC_ADMIN_ROLE_CODE) || roleName.equals(CommonConstant.OPRATIONMANAGER_ROLE_CODE)) { ismanager=true; break; } } } } if (!ismanager) { int counts = productOrderDetailService.getEnabledCount(productOrder.getDepartmentId()); if (counts >= CommonConstant.MAX_FREE_COUNT) { //超过了限定次数 将试用套餐改为禁用 待审核 for (int i = 0; i productOrderRecordList = new ArrayList(); ; list.forEach(item -> { ProductOrderRecord productOrderRecord = new ProductOrderRecord(); productOrderRecord.setAilightCount(item.getAilightCount()); productOrderRecord.setOrderId(item.getOrderId()); productOrderRecord.setProId(item.getProId()); productOrderRecord.setProName(item.getProName()); productOrderRecord.setProType(item.getProType()); productOrderRecord.setIsShare(item.getIsShare()); productOrderRecord.setIsDel(item.getIsDel()); productOrderRecord.setRecordCount(item.getRecordCount()); productOrderRecord.setProBegintime(item.getProBegintime()); productOrderRecord.setProEndtime(item.getProEndtime()); productOrderRecord.setEnabled(item.getEnabled()); productOrderRecordList.add(productOrderRecord); }); Boolean r = productOrderRecordService.saveBatch(productOrderRecordList); //更新合同 Boolean p = false; if (productOrder != null) { productOrder.setIsDel(false); p = productOrderService.saveOrUpdate(productOrder); } if (v && r && p) { if (isenabled) { return ResultBody.ok().data(list.size()).msg("充值成功,但是试用套餐需要管理审核才可使用!"); } else { return ResultBody.ok().data(list.size()).msg("产品充值成功..."); } } else { //写入订单明细失败,则删除订单记录数据 Boolean e = productOrderService.removeById(list.get(0).getOrderId()); if (e) return ResultBody.failed().msg("充值数据保存失败,订单已撤回!"); else return ResultBody.failed().msg("充值数据保存失败,订单撤回失败!"); } } else { return ResultBody.failed().msg("充值数据关联订单不存在!"); } } } /** * 删除 */ @ApiOperation(value = "删除") @DeleteMapping("/{id}") public ResultBody delete(@PathVariable Long id) { boolean v = productOrderDetailService.removeById(id); if (v) { if (!businessRecordsService.recordBusinessData("删除订单明细:" + id, id.toString())) { log.error(String.format("删除订单明细id为:{1}", id)); } return ResultBody.ok().msg("删除成功"); } else { return ResultBody.failed().msg("删除失败"); } } /** * 修改状态 * * @param params * @return */ @ApiOperation(value = "修改数据状态") @GetMapping("/updateEnabled") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Integer"), @ApiImplicitParam(name = "enabled", value = "是否启用", required = true, dataType = "Boolean") }) public ResultBody updateEnabled(@RequestParam Map params, HttpServletRequest request) { if (params.size() == 0) { return ResultBody.failed().msg("参数异常!"); } ResultBody resultBody = productOrderDetailService.updateEnabled(params); //记录业务日志 if (resultBody.getCode() == 0) { String enablad = (MapUtils.getBoolean(params, "enabled")) ? "启用" : "禁用"; if (!businessRecordsService.recordBusinessData("修改订单明细状态为:" + enablad, enablad)) { log.error(String.format("修改合同状态为:{0},写入业务日志失败!合同管理id为:{1}", enablad, MapUtils.getString(params, "id"))); } } return resultBody; } /** * 获取 用户的状态 为试用状态还是 启用状态 * * @return */ @ApiOperation(value = "获取 用户的状态") @GetMapping("/getTypeByUser") public ResultBody getTypeByUser(@LoginUser SysUser sysUser) { return productOrderDetailService.getTypeByUser(sysUser); } /** * 统计获取数据量 * @param datatype * 0 试用审核量 * 1 套餐总量 * 2 未处理用户反馈 * 3 未处理数据需求 * @return */ @ApiOperation(value = "统计获取数据量") @GetMapping("/oprationChart") public ResultBody oprationChart(int datatype) { int counts=productOrderDetailService.oprationChart(datatype); return ResultBody.ok().data(counts).msg("数据获取成功!") ; } /** * 按指定类型统计合同数量 * @param params * datatype 1 按年 * 2 按月 * 3 按天 * 4 按周 * beginTime 查询时间段的开始时间 * endTime 结束时间 * @return */ @ApiOperation(value = "按指定类型统计合同数量") @GetMapping("/productOrderChart") public ResultBody productOrderChart(@RequestParam Map params) { List orderChartVo=productOrderDetailService.productOrderChart(params); return ResultBody.ok().data(orderChartVo).msg("数据获取成功!") ; } /** * 统计产品的使用数量 * @return ccount 是数量 * units 是产品名称 */ @ApiOperation(value = "统计产品的使用数量") @GetMapping("/proCountChart") public ResultBody proCountChart() { List orderChartVo=productOrderDetailService.proCountChart(); return ResultBody.ok().data(orderChartVo).msg("数据获取成功!") ; } }