/** * <p>Title: WxCallBackController.java</p> * <p>Description: </p> * @author dsc * @date 2020年4月22日 * @version 1.0 */ package cn.timer.api.callback.wx; import java.util.Date; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; 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.update.LambdaUpdateWrapper; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.timer.api.bean.qyzx.QyzxEntInfoM; import cn.timer.api.bean.qyzx.businessService.QyzxBuyRecord; import cn.timer.api.bean.qyzx.businessService.QyzxOrderRecord; import cn.timer.api.bean.qyzx.businessService.QyzxRemainingQuantity; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; /** * <p> * Title: WxCallBackController.java * </p> * <p> * Description: 微信回调接口类 * </p> * * @author dsc * @date 2020年4月22日 * @version 1.0 */ @RestController @Transactional @Api(tags = "99.98 微信回调接口") @RequestMapping(value = "/callback/wx", produces = { "application/json" }) public class WxCallBackController { @Value("${spring.profiles.active}") private String env; @GetMapping(value = "/t") public String testEnv() { // System.out.println(env); return env; } @PostMapping(value = "/pro") @ApiOperation(value = "购买服务(pro)", httpMethod = "POST", notes = "接口发布说明") public Result<Object> wxcallback_pro(@RequestBody String orderNo) { // 入参修改 TODO // 验证微信回调信息 TODO // 交易成功 // updateAndInsert(orderNo); return ResultUtil.data(orderNo, "购买成功"); } @PostMapping(value = "/test") @ApiOperation(value = "购买服务(test)", httpMethod = "POST", notes = "接口发布说明") public Result<Object> wxcallback_test(@RequestParam String orderNo) { if (!env.equals("dev") && !env.equals("test")) { return ResultUtil.error("请切换到开发/测试环境"); } // TODO 加套餐 如果已经存在可用的套餐 ,怎么搞 // TODO 如果是系统续费 update企业信息表 updateAndInsert(orderNo); return ResultUtil.data(orderNo, "购买成功"); } private void updateAndInsert(String orderNo) { // 修改订单表 QyzxOrderRecord qyzxOrderRecord = QyzxOrderRecord.builder().build() .selectOne(new LambdaQueryWrapper<QyzxOrderRecord>().eq(QyzxOrderRecord::getOrderNo, orderNo)); // 查询该订单 qyzxOrderRecord.setOrderStatus(1); // 修改订单状态 qyzxOrderRecord.update(new LambdaUpdateWrapper<QyzxOrderRecord>().eq(QyzxOrderRecord::getOrderNo, orderNo)); // 更新数据 // 插入套餐余量表 String jsonStr = qyzxOrderRecord.getOrderDetail(); // json字符串 JSONObject jsonObject = JSONUtil.parseObj(jsonStr); // json对象 Integer expiration = jsonObject.getInt("expiration"); // 商品有效期(天) Date expireDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, expiration); // 时间偏移 String content = jsonObject.getStr("content"); // 商品名称 Integer specification = jsonObject.getInt("specification"); // 商品规格-用于系统续费表示为系统版本0-试用 1-普通 2-专业 String unit = jsonObject.getStr("unit"); // Double originalPrice = jsonObject.getDouble("originalPrice"); // 商品原价 Double nowPrice = jsonObject.getDouble("nowPrice"); // 购买价 Integer count = qyzxOrderRecord.getCount(); // 订单购买数量 Integer pmid = qyzxOrderRecord.getPmid(); // 付费模块id Integer pcid = qyzxOrderRecord.getPcid(); // 付费内容id Integer createdUser = qyzxOrderRecord.getCreateUser(); // 订单创建人 Integer orgCode = qyzxOrderRecord.getOrgCode(); // 公司 Integer totalNum = specification * count; // 套餐总量 if (pmid == 3) { QyzxEntInfoM qyzxEntInfoM = QyzxEntInfoM.builder().id(orgCode).build().selectById(); // 企业信息 Date endTime = qyzxEntInfoM.getEndTime(); // 当前到期时间 // Integer level = qyzxEntInfoM.getLevel(); // 原系统版本 // Integer specification = jsonObject.getInt("specification"); // 新系统版本 Date newEndTime = DateUtil.offsetDay(endTime, expiration*count); // 到期时间+商品有效期x购买数量=系统续费后的时间 qyzxEntInfoM.update(new LambdaUpdateWrapper<QyzxEntInfoM>().eq(QyzxEntInfoM::getId, orgCode) .set(QyzxEntInfoM::getEndTime, newEndTime).set(QyzxEntInfoM::getLevel, specification)); } else { QyzxRemainingQuantity quantity = new QyzxRemainingQuantity(); quantity.setOrderNo(orderNo); // 订单号 quantity.setContent(content); // 商品名称 quantity.setExpireDate(expireDate); // 到期时间 quantity.setSpecification(specification); // 套餐规格 quantity.setTotalNum(totalNum); // 套餐总量 quantity.setRemainder(totalNum); // 套餐剩余数(同上) quantity.setCount(count); // 购买数量 quantity.setPmid(pmid); // 付费模块id quantity.setPcid(pcid); // 付费内容id quantity.setUnit(unit); quantity.setCreateUser(createdUser); quantity.setOrgCode(orgCode); quantity.insert(); } // 插入购买记录表 QyzxBuyRecord qyzxBuyRecord = new QyzxBuyRecord(); qyzxBuyRecord.setSpecification(specification); qyzxBuyRecord.setUnit(unit); qyzxBuyRecord.setContent(content); qyzxBuyRecord.setCreateUser(createdUser); qyzxBuyRecord.setOrderNo(orderNo); qyzxBuyRecord.setPmid(pmid); qyzxBuyRecord.setPcid(pcid); qyzxBuyRecord.setPrice(nowPrice); qyzxBuyRecord.setCount(count); qyzxBuyRecord.setTotalPrice(nowPrice * count); qyzxBuyRecord.setExpireDate(expireDate); qyzxBuyRecord.setPayment(1); // 1-微信 2-支付宝 qyzxBuyRecord.setInvoiceStatus(0); // 0-待开票 1-开票中 2-已开票 3-开票失败 qyzxBuyRecord.setOrgCode(orgCode); qyzxBuyRecord.insert(); } }