QuotaUserAction.java 8.42 KB
package com.cjs.site.action.user.quota;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cjs.site.biz.user.account.PassportBiz;
import com.cjs.site.biz.user.quota.QuotaConvertBiz;
import com.cjs.site.dao.user.quota.QuotaUserDao;
import com.cjs.site.model.quota.QuotaConfigInfo;
import com.cjs.site.model.quota.QuotaUserInfo;
import com.cjs.site.model.user.account.UserInfo;
import com.cjs.site.util.lang.JsonUtil;
import com.cjs.site.util.lang.StringUtil;
import com.cjs.site.util.t2.T2Result;
import com.cjs.site.util.t2.T2Util;
import com.cjs.site.util.web.ActionUtil;

/**
 * 权益转让/转换
 * @author tongxiaochuan
 *
 */
@Controller
@RequestMapping("/user/quota")
public class QuotaUserAction {
    
    @Autowired
    private QuotaConvertBiz quotaConvertBiz;
    @Autowired
    private QuotaUserDao quotaUserDao;
    @Autowired
    private PassportBiz passportBiz;
    /**
     * 查询权益信息列表
     * @return
     */
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String getQuotaUserInfoList(Model model){
        UserInfo userInfo = ActionUtil.getUser();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("userId", userInfo.getClient_id());
        List<QuotaConfigInfo> list = quotaConvertBiz.getAllByUserId(params);
        model.addAttribute("QuotaConfigList", list);
        return "quota/quotaUserList.jsp";
    }
    
    /**
     * 根据用户id查询用户名
     * @param userId
     * @return
     */
    @RequestMapping("getName")
    public @ResponseBody String getUserNameById(String userId){
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("fund_account", userId);
        T2Result result = T2Util.request(params, "619832");
        if(result.getCode() == 0){
            String clientName = result.getData().get(0).get("client_name").toString();
            String retStr = StringUtil.leftReplace(1, clientName, "*");
            return JsonUtil.toJson("clientName", retStr);
        }
        return JsonUtil.toJson("clientName", "");
    }
    
    /**
     * 额度转让
     * @param params
     * @param redirectAttributes
     * @return
     */
    @RequestMapping("transfer")
    public @ResponseBody Map<String, Object> transfer(@RequestParam Map<String, Object> params){
        Map<String, Object> outmap = new HashMap<String, Object>();
        if(!passportBiz.checkUserIsExist(params.get("transId").toString())){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "转让目标用户不存在");
            return outmap;
        }
        if(StringUtil.isBlank(params.get("transNum"))){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "请输入转让数量");
            return outmap;
        }
        UserInfo userInfo = ActionUtil.getUser();
        QuotaUserInfo quotaUser = quotaUserDao.queryByUserId(userInfo.getClient_id(), params.get("otcCode").toString());
        if(quotaUser == null){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "转让数量不能大于额度数量");
            return outmap;
        }
        int decNum = Integer.parseInt(params.get("transNum").toString());
        if(decNum > quotaUser.getQuota()){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "转让数量不能大于额度数量");
            return outmap;
        }
        quotaConvertBiz.transfer(quotaUser, params);
        
        outmap.put("resultCode", "0");
        outmap.put("resultMsg", "权益转让成功");
        return outmap;
    }
    
    /**
     * 额度转交易
     * @param params
     * @return
     * @throws ParseException 
     */
    @RequestMapping("convertIn")
    public @ResponseBody Map<String, Object> converIn(@RequestParam Map<String, Object> params) throws Exception {
        Map<String, Object> outmap = new HashMap<String, Object>();
        UserInfo userInfo = ActionUtil.getUser();
        params.put("userId", userInfo.getClient_id());
        List<QuotaConfigInfo> list = quotaUserDao.queryInfoByUserId(params);
        if(list.isEmpty()){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "当前非再托管时间");
            return outmap;
        }
        QuotaConfigInfo quotaConfig = list.get(0);
        if(quotaConfig.getQuotaUserInfo().getQuota() < Integer.parseInt(params.get("quota").toString())){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "转换数量不可大于额度数量");
            return outmap;
        }
        Calendar date = Calendar.getInstance();
        date.setTime(quotaConfig.getTradeEndDate());
        date.add(Calendar.DAY_OF_MONTH, -1);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String tradeEndDate = sdf.format(date.getTime()) + " 18:00:00";
        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date tradeEndTime = sdf.parse(tradeEndDate);
        String tradeStartDate = sdf.format(quotaConfig.getTradeStartDate());
        
        if(new Date().getTime() >= tradeEndTime.getTime()){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "只可在 "+tradeStartDate+ " ~ "+tradeEndDate+" 时间内转换。");
            return outmap;
        }
        
        params.put("otcName", quotaConfig.getOtcName());
        params.put("source", 4);
        params.put("type", 0);
        quotaConvertBiz.convert(params);
        
        outmap.put("resultCode", "0");
        outmap.put("resultMsg", "权益转换申请成功");
        return outmap;
    }   
    
    /**
     * 验证交易系统转出操作时间
     * @return
     */
    @RequestMapping("time")
    public @ResponseBody Map<String, Object> timeLimit(String otcCode) throws Exception{
        Map<String, Object> outmap = new HashMap<String, Object>();
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
        if(Integer.parseInt(sdf.format(now)) <= 150000 || Integer.parseInt(sdf.format(now)) >= 180000){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "只有在15:00:00 ~ 18:00:00之间可以进行此操作");
            return outmap;
        }
        
        int quotaReal = quotaConvertBiz.queryotcStockReal(otcCode) < 0 ? 0 : quotaConvertBiz.queryotcStockReal(otcCode);
        outmap.put("resultCode", "0");
        outmap.put("quota", quotaReal);
        return outmap;
    }
    
    /**
     * 交易转额度
     * @param params
     * @return
     */
    @RequestMapping("convertOut")
    public @ResponseBody Map<String, Object> convertOut(@RequestParam Map<String, Object> params) throws Exception{
        Map<String ,Object> check = timeLimit(params.get("otcCode").toString());
        if(check.get("resultCode").equals("1")){
            return check;
        }
        Map<String, Object> outmap = new HashMap<String, Object>();
        int quotaReal = quotaConvertBiz.queryotcStockReal(params.get("otcCode").toString());
        if(Integer.parseInt(params.get("quota").toString()) > quotaReal){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "转换数量不可大于持仓数量");
            return outmap;
        }
        
        UserInfo userInfo = ActionUtil.getUser();
        params.put("userId", userInfo.getClient_id());
        List<QuotaConfigInfo> list = quotaUserDao.queryInfoByUserId(params);
        QuotaConfigInfo quotaConfig = list.get(0);
        if(quotaConfig == null){
            outmap.put("resultCode", "1");
            outmap.put("resultMsg", "当前非再托管时间");
            return outmap;
        }
        
        params.put("otcName", quotaConfig.getOtcName());
        params.put("source", 5);
        params.put("type", 1);
        quotaConvertBiz.convert(params);
        
        outmap.put("resultCode", "0");
        outmap.put("resultMsg", "权益转换申请成功");
        return outmap;
    }
}