package cn.jeesoft.mvc.action.app; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import cn.jeesoft.core.interceptor.Before; import cn.jeesoft.core.model.PagerModel; import cn.jeesoft.core.utils.StringUtils; import cn.jeesoft.interceptor.UsersLoginInterceptor; import cn.jeesoft.mvc.Config; import cn.jeesoft.mvc.bean.SysTrade; import cn.jeesoft.mvc.bean.TradeCall; import cn.jeesoft.mvc.helper.GenerateSN; import cn.jeesoft.mvc.helper.LoginUserHolder; import cn.jeesoft.mvc.model.ResultCode; import cn.jeesoft.mvc.model.TradeState; import cn.jeesoft.mvc.model.TradeType; import cn.jeesoft.mvc.outapi.CallRechargeHelper; import cn.jeesoft.mvc.services.TradeCallService; /** * 话费充值 * @author king */ @RestController("app.call") @RequestMapping("app/call") @Before(UsersLoginInterceptor.class) public class CallAction extends BaseTradeAction { static class MPagerModel extends PagerModel<TradeCall, TradeCall> { } @Autowired private TradeCallService tradeCallService; /** * 创建订单 */ @ResponseBody @RequestMapping(value = "insert", method=RequestMethod.POST) public String insert(HttpServletRequest request, SysTrade sys, TradeCall call) { if (call.getCallMoney() == null || call.getCallMoney() < Config.MIN_MONEY_CALL) { return toFailure(ResultCode.ERROE_PARAMETER, "充值金额不正确"); } if (!StringUtils.isPhone(call.getPhone())) { return toFailure(ResultCode.ERROE_PARAMETER, "手机号不正确"); } sys.setFromId(LoginUserHolder.getLoginUser().getId()); sys.setToId(0); sys.setType(TradeType.CALL); sys.setState(TradeState.CREATED); sys.setIsInstant(true); sys.setName("充值"+((double)call.getCallMoney()/100)+"元--["+call.getPhone()+"]"); sys.setSn(GenerateSN.create(TradeType.CALL)); sys.setCreateTime(new Date()); // 金额 sys.setMoney(call.getCallMoney()); // 交易金额 Integer fees = profitService.getHelper().getCall(getLoginUserId(), call.getCallMoney()); sys.setFeesMoney(fees); // 手续费 call.setMoney(call.getCallMoney() + fees); // 总支付金额 if (isEmptyBean(sys)) { return toFailure(ResultCode.ERROE_PARAMETER, "参数不正确"); } // 创建交易记录 int sysId = getService().insert(sys); if (sysId <= 0) { return toFailure(ResultCode.FAILURE, "创建订单失败"); } else { sys.setId(sysId); } call.setFromId(sys.getFromId()); call.setCreateTime(sys.getCreateTime()); call.setSn(sys.getSn()); // 用户充值记录 int callId = tradeCallService.insert(call); if (callId <= 0) { setTransactionRollback(); return toFailure(ResultCode.FAILURE, "创建订单失败"); } else { call.setId(callId); return toSuccess(call); } } @ResponseBody @RequestMapping(value = "update", method = RequestMethod.POST) public String update(HttpServletRequest request, SysTrade sys) { TradeCall call = new TradeCall(); call.setSn(sys.getSn()); call = tradeCallService.selectOne(call); if (call == null) { return toFailure(ResultCode.FAILURE, "订单不存在"); // } else if (call.getIsArrival()) { // return toFailure(ResultCode.FAILURE, "重复订单"); } SysTrade sysTemp = new SysTrade(); sysTemp.setId(sys.getId()); sysTemp.setSn(sys.getSn()); sysTemp.setState(TradeState.SUCCESS); sysTemp.setEndTime(new Date()); sysTemp.setPayType(sys.getPayType()); sysTemp.setPaySn(sys.getPaySn()); // 更新交易记录 int sysId = getService().update(sysTemp); if (sysId <= 0) { return toFailure(ResultCode.FAILURE, "更新订单失败,请联系管理员补单"); } // 用户充值 if (call.getIsArrival()) { return toFailure(ResultCode.FAILURE, "已完成的订单"); } boolean isRecharge = CallRechargeHelper.recharge(sysTemp.getSn(), call.getCallMoney(), call.getPhone()); if (!isRecharge) { return toFailure(ResultCode.FAILURE, "订单已完成,充值失败"); } else { return toSuccess("充值成功"); } } @ResponseBody @RequestMapping("selectList") public String selectList(HttpServletRequest request, TradeCall bean) { TradeCall query = new TradeCall(); query.setFromId(LoginUserHolder.getLoginUser().getId()); if (!StringUtils.isEmpty(bean.getPhone())) { query.setPhone(bean.getPhone()); } if (!StringUtils.isEmpty(bean.getSn())) { query.setSn(bean.getSn()); } return toSuccess(tradeCallService.selectList(query)); } }