package com.sp2p.action.front; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import com.hehenian.biz.common.account.IUserService; import com.hehenian.biz.common.account.dataobject.AccountUserDo; import com.hehenian.biz.common.activity.IActivityAuthService; import com.hehenian.biz.common.activity.IActivityOrderService; import com.hehenian.biz.common.activity.dataobject.ActivityAuthDo; import com.hehenian.biz.common.activity.dataobject.ActivityOrderDo; import com.hehenian.web.common.util.ServletUtils; import com.shove.data.DataException; import com.shove.security.Encrypt; import com.shove.web.action.BaseAction; import com.sp2p.constants.IConstants; import com.sp2p.service.HomeInfoSettingService; import com.sp2p.service.MyHomeService; /** * User: liuwtmf * Date: 2014/10/29 * Time: 9:59 * 投e理财免物业费 */ public class WyfAction extends BaseAction { private MyHomeService myHomeService; @Autowired private IActivityAuthService activityAuthService; @Autowired private IActivityOrderService activityOrderService; @Autowired private IUserService accountUserService; @Autowired private HomeInfoSettingService homeInfoSettingService; private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd"); private static final DateFormat DATE_FORMAT1 = new SimpleDateFormat("yyyyMMddHHmmss"); public static final Log log = LogFactory.getLog(WyfAction.class); private boolean checkColorLifeSign() { if (IConstants.ISDEMO.equals("1")){ return true; } String sign = request("sign"); StringBuilder param = new StringBuilder(sKey); param.append("userid").append(request("userid")); param.append("username").append(request("username")); param.append("ordNo").append(request("ordNo")); param.append("beginDate").append(request("beginDate")); param.append("endDate").append(request("endDate")); param.append("ordDate").append(request("ordDate")); param.append("t").append(request("t")); param.append("investAmount").append(request("investAmount")); param.append("deductAmount").append(request("deductAmount")); param.append("deductPerMonth").append(request("deductPerMonth")); param.append("profit").append(request("profit")); try { param.append("billingAddress").append(URLEncoder.encode(request("billingAddress"), "utf-8")); param.append("cId").append(request("cId")); param.append("cName").append(URLEncoder.encode(request("cName"), "utf-8")); param.append("mobile").append(request("mobile")); param.append("password").append(request("password")); param.append("via").append(request("via")); param.append("rate_type").append(URLEncoder.encode(request("rate_type"), "utf-8")); param.append("orderModel").append(request("orderModel")); param.append("userRate").append(request("userRate")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } param.append(sKey); String check = Encrypt.MD5(param.toString()); check=check.toUpperCase(); log.info("-----------------param sign is:" + sign + ",sign:" + check); return check.equals(sign); } private static final String sKey="DJKC#$%CD%des$"; public String appIndex(){ session().setAttribute("platform", "colorlife_wyf_app"); if (!checkColorLifeSign()){ ServletUtils.write("参数无效或 验证签名失败"); return null; } return SUCCESS; } public String webIndex(){ session().setAttribute("platform", "colorlife_wyf_web"); if (!checkColorLifeSign()){ ServletUtils.write("参数无效或 验证签名失败"); return null; } return SUCCESS; } public String index() { String title = request("title"); request().setAttribute("title",title); int step = 1; String ordNo = request("ordNo"); if (StringUtils.isNotBlank(ordNo)) { session().setAttribute("wyf_ordno", ordNo); } else { Object object = session("wyf_ordno"); if (object != null) { ordNo = object.toString(); } else { //没有订单信息 返回失败 return null; } } if (StringUtils.isNotBlank(ordNo)) { //查询用户自动投标状态 AccountUserDo user = (AccountUserDo) session().getAttribute("user"); ActivityOrderDo activityOrderDo1 = new ActivityOrderDo(); activityOrderDo1.setOrdNo(ordNo); activityOrderDo1.setOrdType(0); ActivityOrderDo activityOrderDo = activityOrderService.getByOrdNo(activityOrderDo1); if (activityOrderDo==null){ //订单不存在 保存订单信息 Object wyf_activityOrderDo = session("wyf_activityOrderDo"); if (wyf_activityOrderDo!=null){ activityOrderDo = (ActivityOrderDo)wyf_activityOrderDo; Long id = activityOrderService.addActivityOrder(activityOrderDo); if (id<=0){ //保存失败 log.error("addActivityOrder 失败了.activityOrderDo:"+activityOrderDo); }else { activityOrderDo.setOrdId(id); session().removeAttribute("wyf_activityOrderDo"); } }else{ String beginDateStr = request("beginDate"); String endDateStr = request("endDate"); String ordDateStr = request("ordDate"); try { Date beginDate = DATE_FORMAT.parse(beginDateStr); Date endDate = DATE_FORMAT.parse(endDateStr); Date ordDate = DATE_FORMAT1.parse(ordDateStr); String investAmountStr = request("investAmount"); String deductAmountStr = request("deductAmount"); String rateType = request("rate_type"); String orderSubType = request("orderModel"); String deductPerMonthStr = request("deductPerMonth"); String profitStr = request("profit"); String billingAddress = URLDecoder.decode(request("billingAddress"),"utf-8"); //动态文字描述: //每月冲抵物业费/冲抵费用 String deductPerMonthText = URLDecoder.decode(request("deductPerMonthText"),"utf-8"); //冲抵周期/冲抵时长 String billingDateText = URLDecoder.decode(request("billingDateText"),"utf-8"); //冲抵物业费地址/冲抵地址 String billingAddressText = URLDecoder.decode(request("billingAddressText"),"utf-8"); //车牌号 (值为:空或者车牌号:粤GF4586) String carNumber = URLDecoder.decode(request("carNumber"),"utf-8"); //产品利率 String userRate = request("userRate"); String cId = request("cId"); String cName = URLDecoder.decode(request("cName"),"utf-8"); int investAmount = Integer.parseInt(investAmountStr); double deductAmount = Double.parseDouble(deductAmountStr); double deductPerMonth = Double.parseDouble(deductPerMonthStr); double profit = Double.parseDouble(profitStr); double rate = Double.parseDouble(userRate); activityOrderDo = new ActivityOrderDo(); activityOrderDo.setUserId(user.getId()); activityOrderDo.setOrdType(0); activityOrderDo.setInvestAmount(investAmount); activityOrderDo.setDeductAmount(deductAmount); activityOrderDo.setDeductPerMonth(deductPerMonth); activityOrderDo.setProfit(profit); activityOrderDo.setcName(cName); activityOrderDo.setcId(cId); activityOrderDo.setBillingAddress(billingAddress); activityOrderDo.setBeginDate(beginDate); activityOrderDo.setEndDate(endDate); activityOrderDo.setOrdDate(ordDate); activityOrderDo.setOrdNo(ordNo); activityOrderDo.setOrdStatus(0); activityOrderDo.setRateType(rateType); activityOrderDo.setOrderSubType(orderSubType); Date now = new Date(); activityOrderDo.setCreateTime(now); activityOrderDo.setUpdateTime(now); activityOrderDo.setRechargeMoney(0.0); //设置动态文本 activityOrderDo.setBillingAddressText(billingAddressText); activityOrderDo.setBillingDateText(billingDateText); activityOrderDo.setDeductPerMonthText(deductPerMonthText); activityOrderDo.setCarNumber(carNumber); activityOrderDo.setRate(rate); Long id = activityOrderService.addActivityOrder(activityOrderDo); if (id<=0){ //保存失败 log.error("addActivityOrder 失败了。activityOrderDo:"+activityOrderDo); }else { activityOrderDo.setOrdId(id); } }catch (Exception e){ e.printStackTrace(); } } }else if(!user.getId().equals(activityOrderDo.getUserId())){ //订单已存在 但不是该用户的订单 ServletUtils.write("该订单号已被其他用户使用,请联系彩之云客服."); return null; } if (activityOrderDo !=null){ AccountUserDo accountUserDo = accountUserService.getById(user.getId()); request().setAttribute("userinfo",accountUserDo); Integer ordStatus = activityOrderDo.getOrdStatus(); if (ordStatus != 1) { if (accountUserDo.getUsrCustId()!=null&&accountUserDo.getUsrCustId()>0){ //已经注册汇付 step++; } ActivityAuthDo activityAuthDo1 = new ActivityAuthDo(); activityAuthDo1.setOrdId(activityOrderDo.getOrdId()); activityAuthDo1.setFromUserId(user.getId()); activityAuthDo1.setAuthType(0); ActivityAuthDo activityAuthDo = activityAuthService.getByOrdId(activityAuthDo1); if (activityAuthDo == null){ //未授权 request().setAttribute("hasAuth",false); request().setAttribute("authAmount",activityOrderDo.getInvestAmount()); }else if(activityAuthDo.getAuthAmount() < activityOrderDo.getInvestAmount()){ //已授权 但授权金额不够 request().setAttribute("hasAuth",false); request().setAttribute("authAmount",activityOrderDo.getInvestAmount()-activityAuthDo.getAuthAmount()); }else{ step++; if (activityOrderDo.getOrdStatus()!=1){ //授权成功,修改订单状态为3 ActivityOrderDo activityOrderDo2 = new ActivityOrderDo(); activityOrderDo2.setOrdId(activityOrderDo.getOrdId()); activityOrderDo2.setOrdStatus(3); activityOrderService.updateActivityOrderById(activityOrderDo2); //通知彩生活 activityOrderDo.setOrdStatus(3); activityOrderService.notifyColorLife(accountUserDo,activityOrderDo); } request().setAttribute("hasAuth",true); //判断是否开启自动投标 try { Map<String, String> automaticBidMap = myHomeService.queryAutomaticBid(user.getId()); request().setAttribute("bidStatus", automaticBidMap.get("bidStatus")); if ("2".equals(automaticBidMap.get("bidStatus"))){ //已开启 step++; //判断是否充值 Integer investAmount = activityOrderDo.getInvestAmount(); double investMoney = activityOrderDo.getRechargeMoney(); if (investMoney >= investAmount){ //充够钱了 step++; request().setAttribute("hasRecharge",true); request().setAttribute("wyf_recharge_money", 0); }else { //没充够钱 request().setAttribute("hasRecharge",false); request().setAttribute("wyf_recharge_money", investAmount- investMoney); } } } catch (SQLException e) { e.printStackTrace(); } catch (DataException e) { e.printStackTrace(); } } if (step>=5){ //更新订单状态 activityOrderDo.setOrdStatus(1); int i = activityOrderService.updateStatus(accountUserDo,activityOrderDo); if (i<=0){ //修改订单状态失败 log.error("修改订单状态失败.activityOrderDo:"+activityOrderDo); } } } //已成功 request().setAttribute("activityOrderDo",activityOrderDo); if (activityOrderDo.getOrdStatus() == 1){ request().setAttribute("title",""); } } try { List<Map<String, Object>> maps = homeInfoSettingService.queryBankInfoList2(user.getId()); request().setAttribute("bankList",maps); } catch (SQLException e) { e.printStackTrace(); } catch (DataException e) { e.printStackTrace(); } } request().setAttribute("step",step); if ("colorlife_wyf_app".equals(session("platform"))){ return "colorlife_wyf_app"; }else{ return "colorlife_wyf_web"; } } // public String public void setMyHomeService(MyHomeService myHomeService) { this.myHomeService = myHomeService; } public void setActivityAuthService(IActivityAuthService activityAuthService) { this.activityAuthService = activityAuthService; } public void setActivityOrderService(IActivityOrderService activityOrderService) { this.activityOrderService = activityOrderService; } public void setAccountUserService(IUserService accountUserService) { this.accountUserService = accountUserService; } }