RationInviteConfigBiz.java 11.9 KB
package com.cjs.cms.biz.ration;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cjs.cms.dao.quota.OtcStockRealDao;
import com.cjs.cms.dao.ration.RationInviteConfigDao;
import com.cjs.cms.dao.ration.RationInviteUserDao;
import com.cjs.cms.dao.ration.TrustApplyExtDao;
import com.cjs.cms.model.ration.RationInviteConfigInfo;
import com.cjs.cms.model.ration.RationInviteQualityInfo;
import com.cjs.cms.model.ration.RationInviteUserInfo;
import com.cjs.cms.model.user.UserInfo;
import com.cjs.cms.util.file.TemplateUtils;
import com.cjs.cms.util.lang.StringUtil;
import com.cjs.cms.util.t2.T2Result;
import com.cjs.cms.util.t2.T2Util;
import com.cjs.cms.util.web.ActionUtil;
import com.cjs.cms.util.web.SendMessageUtil;

/**
 * 邀约配售设置
 * 
 * @author xiangwei
 *
 */
@Service
public class RationInviteConfigBiz {

    Logger                        log = LogManager.getLogger();
    @Autowired
    private RationInviteConfigDao rationInviteConfigDao;
    @Autowired
    private RationInviteUserDao   rationInviteUserDao;
    @Autowired
    private TrustApplyExtDao      trustApplyExtDao;
    @Autowired
    private SendMessageUtil       sendMsgUtil;
    @Autowired
    OtcStockRealDao               realDao;

    /**新增及修改规则*/
    @Transactional
    public String add(RationInviteConfigInfo inviteConfig) throws Exception {
        UserInfo userInfo = ActionUtil.getUser();
        inviteConfig.setCreateBy(userInfo.getTruename());
        RationInviteUserInfo newUser, oldUser;

        //新增
        if (StringUtil.isBlank(inviteConfig.getId())) {
            inviteConfig.setRationStatus("1");//进行中
            int result = rationInviteConfigDao.insert(inviteConfig);
            if (result > 0) {
                for (int i = 0; i < inviteConfig.getUsers().size(); i++) {
                    newUser = inviteConfig.getUsers().get(i);
                    newUser.setRationInviteConfigId(inviteConfig.getId());
                    newUser.setCreateBy(userInfo.getTruename());
                    rationInviteUserDao.insert(newUser);
                }
            }
            return "1";
        }

        //修改规则
        rationInviteConfigDao.update(inviteConfig);
        //获取修改之前的数据
        RationInviteConfigInfo oldConfig = rationInviteConfigDao.queryAllById(inviteConfig.getId());
        List<Integer> list = new ArrayList<Integer>();

        //修改-配售机构数量减少的情况
        if (oldConfig.getUsers().size() > inviteConfig.getUsers().size()) {
            //获取删除的用户信息的id
            for (int i = 0; i < oldConfig.getUsers().size(); i++) {
                oldUser = oldConfig.getUsers().get(i);
                list.add(oldUser.getId());
                for (int j = 0; j < inviteConfig.getUsers().size(); j++) {
                    newUser = inviteConfig.getUsers().get(j);
                    if (oldUser.getId().equals(newUser.getId())) {
                        list.remove(newUser.getId());
                    }
                }
            }
            //删除用户信息
            for (int i = 0; i < list.size(); i++) {
                rationInviteUserDao.delete(list.get(i));
            }
        }

        //修改-配售机构数量增加的情况
        if (oldConfig.getUsers().size() < inviteConfig.getUsers().size()) {
            for (int i = 0; i < inviteConfig.getUsers().size(); i++) {
                newUser = inviteConfig.getUsers().get(i);
                if (StringUtil.isBlank(newUser.getId())) {
                    newUser.setRationInviteConfigId(inviteConfig.getId());
                    newUser.setCreateBy(userInfo.getTruename());
                    rationInviteUserDao.insert(newUser);
                }
            }
        }

        //修改用户信息
        for (int i = 0; i < inviteConfig.getUsers().size(); i++) {
            rationInviteUserDao.update(inviteConfig.getUsers().get(i));
        }
        return "1";
    }

    /**删除规则中users里的空RationNewUserInfo对象*/
    public RationInviteConfigInfo validateNullUser(RationInviteConfigInfo RationInviteConfigInfo) {
        for (int i = 0; i < RationInviteConfigInfo.getUsers().size(); i++) {
            if (StringUtil.isBlank(RationInviteConfigInfo.getUsers().get(i).getUserId())
                || StringUtil.isBlank(RationInviteConfigInfo.getUsers().get(i).getPercent())) {
                RationInviteConfigInfo.getUsers().remove(i);
            }
        }
        return RationInviteConfigInfo;
    }

    /**新增、修改规则验证*/
    public String valiadate(RationInviteConfigInfo rationInviteConfigInfo) {
        log.info(rationInviteConfigInfo);
        //验证配售机构是否有重复
        RationInviteUserInfo user1, user2;
        for (int i = 0; i < rationInviteConfigInfo.getUsers().size(); i++) {
            user1 = rationInviteConfigInfo.getUsers().get(i);
            for (int j = 0; j < rationInviteConfigInfo.getUsers().size(); j++) {
                user2 = rationInviteConfigInfo.getUsers().get(j);
                if (i != j && user1.getUserId().equals(user2.getUserId())) {
                    return "配售机构有重复,请检查后重新填写";
                }
            }
        }

        //验证时间,确认结束时间必须大于确认开始时间
        if (rationInviteConfigInfo.getConfirmEndDate().getTime() <= rationInviteConfigInfo
            .getConfirmStartDate().getTime()) {
            return "确认结束时间必须大于确认开始时间";
        }
        //验证藏品代码,非作废状态的藏品代码必须是唯一的
        Map<String, Object> inMap = new HashMap<String, Object>();
        inMap.put("otcCode", rationInviteConfigInfo.getOtcCode());
        inMap.put("rationStatus", "0");
        List<RationInviteConfigInfo> list = rationInviteConfigDao.queryByOtcCode(inMap);
        if (list.size() > 0) {
            if (StringUtil.isBlank(rationInviteConfigInfo.getId())) {
                return "邀约规则已添加,不可以重复添加。";
            }
        }
        //配售比例总数验证,不能大于100%
        int totalPercent = 0;
        Map<String, Object> params = new HashMap<String, Object>();
        for (int i = 0; i < rationInviteConfigInfo.getUsers().size(); i++) {
            //验证用户是否存在
            params.put("client_id", rationInviteConfigInfo.getUsers().get(i).getUserId());
            params.put("fund_account", rationInviteConfigInfo.getUsers().get(i).getUserId());
            T2Result result = T2Util.request(params, "619832");
            if (!result.getCode().toString().equals("0")) {
                return "会员号为:" + rationInviteConfigInfo.getUsers().get(i).getUserId() + "的用户不存在";
            }

            totalPercent += rationInviteConfigInfo.getUsers().get(i).getPercent();
        }
        if (totalPercent > 100) {
            return "配售比例总数不能大于100%";
        }
        if (!StringUtil.isBlank(rationInviteConfigInfo.getRationStatus())
            && !rationInviteConfigInfo.getRationStatus().equals("1")) {
            return "只有未配售状态的规则可以修改";
        }
        return "1";
    }

    /**获取配售规则信息及对应的新品配售用户信息*/
    public RationInviteConfigInfo getUserInfoByConfigId(String rationNewConfigId) {
        return rationInviteConfigDao.queryAllById(Integer.parseInt(rationNewConfigId));
    }

    /**作废配售规则*/
    public int cancel(Integer rationNewConfigId) {
        return rationInviteConfigDao.updateCancel(rationNewConfigId);
    }

    /**查看规则功能-表格显示数据查询*/
    public List<Map<String, Object>> detailBottom(Integer id) {
        Map<String, Object> detailMap = null;
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        RationInviteConfigInfo config = rationInviteConfigDao.queryAllById(id);
        Map<String, Object> params = new HashMap<String, Object>();
        RationInviteUserInfo rationUser = null;
        T2Result result, result1, result2 = null;

        for (int i = 0; i < config.getUsers().size(); i++) {
            detailMap = new HashMap<String, Object>();
            params.put("client_id", config.getUsers().get(i).getUserId());
            params.put("fund_account", config.getUsers().get(i).getUserId());
            result = T2Util.request(params, "619832");
            if (result.getCode().toString().equals("0")) {
                rationUser = config.getUsers().get(i);
                detailMap.put("clientId", result.getData().get(0).get("client_id"));
                detailMap.put("clientName", result.getData().get(0).get("client_name"));
                //查询用户手机号(权益账户周边-个人信息获取接口)
                result1 = T2Util.request(params, "619829");
                detailMap.put("mobileTel", result1.getData().get(0).get("mobile_tel"));
                detailMap.put("percent", rationUser.getPercent().doubleValue() + "%");
                //配售数量进行四舍五入,而后乘以价格
                detailMap.put("rationCost",
                    new BigDecimal(rationUser.getPercent()).divide(new BigDecimal(100))
                        .multiply(new BigDecimal(config.getRationAmount()))
                        .setScale(0, RoundingMode.HALF_UP).intValue() * config.getPrice());

                params.put("entrust", "7");//委托请求
                params.put("request_num", "2000");//请求行数
                result2 = T2Util.request(params, "619014");
                detailMap.put("balance", result2.getData().get(0).get("enable_balance"));
                list.add(detailMap);
            }
        }
        log.info(list);
        return list;
    }

    /**发送短信*/
    public String sendMessage(Integer id) {
        RationInviteConfigInfo RationInviteConfigInfo = rationInviteConfigDao.queryById(id);
        if (!RationInviteConfigInfo.getRationStatus().equals("1")) {
            return "只有进行中状态的规则可以发送短信";
        }

        List<RationInviteQualityInfo> infoList = rationInviteConfigDao.queryQualityById(id);
        List<String> paramList = new ArrayList<String>();
        for (RationInviteQualityInfo quality : infoList) {
            paramList.add(quality.getUserId());
        }
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("fundAccounts", paramList);
        params.put("otcCode", RationInviteConfigInfo.getOtcCode());
        List<String> userList = realDao.searchAgreeNoUser(params);
        String content = "";
        //获取短信发送内容
        TemplateUtils template = new TemplateUtils();
        template.put("otcCode", RationInviteConfigInfo.getOtcCode());
        template.put("otcName", RationInviteConfigInfo.getOtcName());
        content = template.readProcessedTemplate("rationInviteRationMsg.ftl");
        T2Result result = null;
        for (int i = 0; i < userList.size(); i++) {
            params.put("client_id", userList.get(i));
            params.put("fund_account", userList.get(i));
            result = T2Util.request(params, "619829");
            log.info(result);
            if (result.getCode() == 0) {
                log.info(result.getData().get(0).get("mobile_tel").toString() + "----" + content);
                sendMsgUtil.sendMsg(result.getData().get(0).get("mobile_tel").toString(), content);
            }
        }
        return "1";
    }

    public String ration(Integer configId) {
        RationInviteConfigInfo configInfo = rationInviteConfigDao.queryById(configId);
        //        T2Result t2= tradeBiz.tradeBiz();
        return "";
    }

}