/** * <p>Title: QyzxBusinessController.java</p> * <p>Description: </p> * @author dsc * @date 2020年4月22日 * @version 1.0 */ package cn.timer.api.controller.qyzx; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.timer.api.bean.dzht.DzhtSignflowFinish; import cn.timer.api.bean.qyzx.QyzxEntInfoM; import cn.timer.api.bean.qyzx.QyzxSms; import cn.timer.api.bean.qyzx.businessService.QyzxBuyRecord; import cn.timer.api.bean.qyzx.businessService.QyzxInvoiceData; import cn.timer.api.bean.qyzx.businessService.QyzxOrderRecord; import cn.timer.api.bean.qyzx.businessService.QyzxPayContent; import cn.timer.api.bean.qyzx.businessService.QyzxRemainingQuantity; import cn.timer.api.bean.qyzx.businessService.QyzxUseRecord; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; /** * <p> * Title: QyzxBusinessController.java * </p> * <p> * Description: * </p> * * @author dsc * @date 2020年4月22日 * @version 1.0 */ @Transactional @RestController @Api(tags = "4.1企业中心(购买服务)") @RequestMapping(value = "/qyzxbs", produces = { "application/json" }) public class QyzxBusinessController { @GetMapping(value = "/getAllQuantity") @ApiOperation(value = "获取全部套餐余量信息", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxRemainingQuantity>> getAllQuantity(@CurrentUser UserBean userBean) { List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build() .selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0) .eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode())); return ResultUtil.data(list, "查询成功"); } @GetMapping(value = "/getQuantity") @ApiOperation(value = "获取套餐余量信息(数量)", httpMethod = "GET", notes = "接口发布说明") public Result<List<Map<String, Integer>>> getQuantity(@CurrentUser UserBean userBean) { List<QyzxRemainingQuantity> qyzxRemainingQuantitys1 = QyzxRemainingQuantity.builder().build() .selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0) .eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode()) .eq(QyzxRemainingQuantity::getPmid, 1).select(QyzxRemainingQuantity::getRemainder)); Integer sum1 = qyzxRemainingQuantitys1.stream() .collect(Collectors.summingInt(QyzxRemainingQuantity::getRemainder)); List<QyzxRemainingQuantity> qyzxRemainingQuantitys2 = QyzxRemainingQuantity.builder().build() .selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().eq(QyzxRemainingQuantity::getIsDelete, 0) .eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode()) .eq(QyzxRemainingQuantity::getPmid, 2).select(QyzxRemainingQuantity::getRemainder)); Integer sum2 = qyzxRemainingQuantitys2.stream() .collect(Collectors.summingInt(QyzxRemainingQuantity::getRemainder)); Map<String, Integer> map1 = new HashMap<String, Integer>(); map1.put("message", sum1); Map<String, Integer> map2 = new HashMap<String, Integer>(); map2.put("contract", sum2); List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>(); list.add(map1); list.add(map2); return ResultUtil.data(list, "获取成功"); } @GetMapping(value = "/getQuantity/System") @ApiOperation(value = "获取系统剩余天数、版本", httpMethod = "GET", notes = "接口发布说明") public Result<Object> getSystemQuantity(@CurrentUser UserBean userBean) { QyzxEntInfoM qyzxEntInfoM = QyzxEntInfoM.builder().build() .selectOne(new LambdaQueryWrapper<QyzxEntInfoM>().eq(QyzxEntInfoM::getId, userBean.getOrgCode())); Date endTime = qyzxEntInfoM.getEndTime(); Long day = DateUtil.between(new Date(), endTime, DateUnit.DAY, false); Integer level = qyzxEntInfoM.getLevel(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("betweenDay", day); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("level", level); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); list.add(map1); list.add(map2); return ResultUtil.data(list, "获取成功"); } @GetMapping(value = "/getPayList/Contract") @ApiOperation(value = "获取短信商品列表", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxPayContent>> getPayListwithContract(@CurrentUser UserBean userBean) { List<QyzxPayContent> list = QyzxPayContent.builder().build() .selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 1).select( QyzxPayContent::getId, QyzxPayContent::getContent, QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice, QyzxPayContent::getSpecification, QyzxPayContent::getExpiration)); return ResultUtil.data(list, "获取成功"); } @GetMapping(value = "/getPayList/Msg") @ApiOperation(value = "获取电子合同商品列表", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxPayContent>> getPayListWithMsg(@CurrentUser UserBean userBean) { List<QyzxPayContent> list = QyzxPayContent.builder().build() .selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 2).select( QyzxPayContent::getId, QyzxPayContent::getContent, QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice, QyzxPayContent::getSpecification, QyzxPayContent::getExpiration)); return ResultUtil.data(list, "获取成功"); } @GetMapping(value = "/getPayList/System") @ApiOperation(value = "获取系统续费商品列表", httpMethod = "GET", notes = "接口发布说明") public Result<Map<String, Object>> getPayListWithSystem(@CurrentUser UserBean userBean) { List<QyzxPayContent> list1 = QyzxPayContent.builder().build() .selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 3) .eq(QyzxPayContent::getSpecification, 1).select(QyzxPayContent::getId, QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice, QyzxPayContent::getExpiration)); List<QyzxPayContent> list2 = QyzxPayContent.builder().build() .selectList(new LambdaQueryWrapper<QyzxPayContent>().eq(QyzxPayContent::getPmid, 3) .eq(QyzxPayContent::getSpecification, 2).select(QyzxPayContent::getId, QyzxPayContent::getNowPrice, QyzxPayContent::getOriginalPrice, QyzxPayContent::getExpiration)); Map<String, Object> map = new HashMap<String, Object>(); map.put("simple", list1); map.put("professional", list2); return ResultUtil.data(map, "获取成功"); } @PostMapping(value = "/generateOrder") @ApiOperation(value = "生成购买订单", httpMethod = "POST", notes = "接口发布说明") public Result<QyzxOrderRecord> generateOrder(@CurrentUser UserBean userBean, @RequestBody QyzxOrderRecord qyzxOrderRecord) { Integer orgCode = userBean.getOrgCode(); String orderNo = String.valueOf(System.currentTimeMillis()) + orgCode; // 时间毫秒数+orgCode qyzxOrderRecord.setCreateUser(userBean.getEmpNum()); // 创建人 qyzxOrderRecord.setOrgCode(orgCode); qyzxOrderRecord.setOrderNo(orderNo); // 订单号 qyzxOrderRecord.setOrderStatus(0); // 订单状态-无 Integer pmid = qyzxOrderRecord.getPmid(); // 商品id Integer pcid = qyzxOrderRecord.getPcid(); // 商品id QyzxPayContent qyzxPayContent = QyzxPayContent.builder().build(); QyzxPayContent qyzxPayContent2 = qyzxPayContent.selectOne(Wrappers.lambdaQuery(qyzxPayContent) .eq(QyzxPayContent::getId, pcid).eq(QyzxPayContent::getPmid, pmid).select(QyzxPayContent::getContent, QyzxPayContent::getSpecification, QyzxPayContent::getUnit, QyzxPayContent::getExpiration, QyzxPayContent::getOriginalPrice, QyzxPayContent::getNowPrice)); if (qyzxPayContent2 == null) { return ResultUtil.error("商品不存在"); } JSONObject json = JSONUtil.parseObj(qyzxPayContent2); qyzxOrderRecord.setOrderDetail(json.toString()); // 订单商品详情-json字符串 qyzxOrderRecord.insert(); // 请求第三方接口生成预支付交易,返回二维码链接code_url TODO // 生成二维码 TODO return ResultUtil.data(qyzxOrderRecord, "生成订单成功"); } @GetMapping(value = "/queryBuyRecord") @ApiOperation(value = "查询购买记录", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxBuyRecord>> queryBuyRecord(@CurrentUser UserBean userBean, @RequestParam(defaultValue = "1", required = false) Integer pageNum, @RequestParam(defaultValue = "10", required = false) Integer pageSize, @RequestParam(required = false) String query, @RequestParam(required = false) String s, @RequestParam(required = false) String e) { QueryWrapper<QyzxBuyRecord> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("org_code", userBean.getOrgCode()).and(query != null && query != "", wq -> wq.like("order_no", query).or().like("content", query)); queryWrapper.lambda().ge(StringUtils.isNotBlank(s), QyzxBuyRecord::getCreateTime, s) .le(StringUtils.isNotBlank(e), QyzxBuyRecord::getCreateTime, e); Page<Object> page = PageHelper.startPage(pageNum, pageSize); List<QyzxBuyRecord> list = QyzxBuyRecord.builder().build().selectList(queryWrapper); return ResultUtil.pageData(list, page.getTotal(), "查询成功"); } @PostMapping(value = "/invoicing") @ApiOperation(value = "开发票", httpMethod = "POST", notes = "接口发布说明") public Result<QyzxInvoiceData> generateOrder(@CurrentUser UserBean userBean, @RequestBody QyzxInvoiceData qyzxInvoiceData) { Double invoiceValue = qyzxInvoiceData.getInvoiceValue(); if (invoiceValue <= 0) return ResultUtil.error("请填写正确的发票金额!"); if (!ObjectUtil.isAllNotEmpty( // qyzxInvoiceData, qyzxInvoiceData.getInvoiceTitle(), qyzxInvoiceData.getDutyParagraph(), qyzxInvoiceData.getCompanyAddress(), qyzxInvoiceData.getCompanyPhone(), qyzxInvoiceData.getBankName(), qyzxInvoiceData.getBankAccount(), qyzxInvoiceData.getInvoiceType(), qyzxInvoiceData.getInvoiceProject(), invoiceValue, qyzxInvoiceData.getConsignee(), qyzxInvoiceData.getConsigneePhone(), qyzxInvoiceData.getEmail(), qyzxInvoiceData.getShippingArea(), qyzxInvoiceData.getShippingAddress(), qyzxInvoiceData.getZipCode())) { return ResultUtil.error("请完善发票信息!"); } String orderNo = qyzxInvoiceData.getOrderNo(); QyzxBuyRecord qyzxBuyRecord = QyzxBuyRecord.builder().build() .selectOne(new LambdaQueryWrapper<QyzxBuyRecord>().eq(QyzxBuyRecord::getOrderNo, orderNo)); if (qyzxBuyRecord.getInvoiceStatus() != 0) { return ResultUtil.error("开票失败,请检查发票状态"); } qyzxInvoiceData.setCreateUser(userBean.getEmpNum()); qyzxInvoiceData.setOrgCode(userBean.getOrgCode()); qyzxInvoiceData.insert(); qyzxBuyRecord.setInvoiceStatus(1); qyzxBuyRecord.update(new LambdaUpdateWrapper<QyzxBuyRecord>().eq(QyzxBuyRecord::getOrderNo, orderNo)); return ResultUtil.data(qyzxInvoiceData, "开票成功"); } @GetMapping(value = "/queryInvoiceDetail") @ApiOperation(value = "查询开票详情", httpMethod = "GET", notes = "接口发布说明") public Result<QyzxInvoiceData> queryInvoiceDetail(@CurrentUser UserBean userBean, @RequestParam String orderNo) { return ResultUtil.data(QyzxInvoiceData.builder().build() .selectOne(new LambdaQueryWrapper<QyzxInvoiceData>().eq(QyzxInvoiceData::getOrderNo, orderNo)), "查询成功"); } @GetMapping(value = "/queryMsgRecord") @ApiOperation(value = "查询短信套餐余量", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxRemainingQuantity>> queryMsgRecord(@CurrentUser UserBean userBean) { List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build() .selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().ne(QyzxRemainingQuantity::getIsDelete, 1) .eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode()) .eq(QyzxRemainingQuantity::getPmid, 1)); return ResultUtil.data(list, "查询成功"); } @GetMapping(value = "/queryContractRecord") @ApiOperation(value = "查询电子合同套餐余量", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxRemainingQuantity>> queryContractRecord(@CurrentUser UserBean userBean) { List<QyzxRemainingQuantity> list = QyzxRemainingQuantity.builder().build() .selectList(new LambdaQueryWrapper<QyzxRemainingQuantity>().ne(QyzxRemainingQuantity::getIsDelete, 1) .eq(QyzxRemainingQuantity::getOrgCode, userBean.getOrgCode()) .eq(QyzxRemainingQuantity::getPmid, 2)); return ResultUtil.data(list, "查询成功"); } @GetMapping(value = "/queryMsgUseRecord") @ApiOperation(value = "查询短信使用记录", httpMethod = "GET", notes = "接口发布说明") public Result<List<QyzxUseRecord>> queryMsgUseRecord(@CurrentUser UserBean userBean, @RequestParam(required = false) String orderNo, @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize) { Page<Object> page = PageHelper.startPage(pageNum, pageSize); List<QyzxUseRecord> list = QyzxUseRecord.builder().build() .selectList(new LambdaQueryWrapper<QyzxUseRecord>().eq(QyzxUseRecord::getOrgCode, userBean.getOrgCode()) .eq(QyzxUseRecord::getPmid, 1) .eq(StringUtils.isNotBlank(orderNo), QyzxUseRecord::getOrderNo, orderNo) .ge(StringUtils.isNotBlank(startTime), QyzxUseRecord::getCreateTime, startTime) .le(StringUtils.isNotBlank(endTime), QyzxUseRecord::getCreateTime, endTime) .last("order by create_time desc")); return ResultUtil.pageData(list, page.getTotal(), "查询成功"); } @GetMapping(value = "/queryMsgUseDetal/{id}") @ApiOperation(value = "查询短信使用详情", httpMethod = "GET", notes = "接口发布说明") public Result<QyzxSms> queryMsgUseDetal(@CurrentUser UserBean userBean, @PathVariable Integer id) { return ResultUtil.data( QyzxSms.builder().build().selectOne(new LambdaQueryWrapper<QyzxSms>().eq(QyzxSms::getUseId, id)), "查询成功"); } // TODO 不同业务使用 不同数据表 @GetMapping(value = "/queryContractUseRecord") @ApiOperation(value = "查询电子合同套餐使用记录", httpMethod = "GET", notes = "接口发布说明") public Result<Object> queryContractUseRecord(@CurrentUser UserBean userBean, String orderNo) { return ResultUtil.data(QyzxUseRecord.builder().build() .selectList(new LambdaQueryWrapper<QyzxUseRecord>().eq(QyzxUseRecord::getOrgCode, userBean.getOrgCode()) .eq(QyzxUseRecord::getPmid, 2).eq(orderNo != null, QyzxUseRecord::getOrderNo, orderNo)), "查询成功"); } @GetMapping(value = "/queryContractUseDetail") @ApiOperation(value = "查询电子合同使用详情(流程结束后)", httpMethod = "GET", notes = "接口发布说明") public Result<Object> queryContractUseDetail(@CurrentUser UserBean userBean, String flowId) { return ResultUtil.data(DzhtSignflowFinish.builder().build().selectOne( new LambdaQueryWrapper<DzhtSignflowFinish>().eq(flowId != null, DzhtSignflowFinish::getFlowId, flowId)), "查询成功"); } }