StorageBiz.java 6.53 KB
package com.cjs.cms.biz.ration;

import java.io.File;
import java.net.URI;
import java.text.MessageFormat;
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.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cjs.cms.action.user.fund.UserBalanceAction;
import com.cjs.cms.biz.user.fund.UserFinanceBiz;
import com.cjs.cms.dao.ration.OtcTrustEECodeDao;
import com.cjs.cms.dao.ration.TrustApplyDao;
import com.cjs.cms.dao.ration.TrustApplyExtDao;
import com.cjs.cms.model.pub.ResultInfo;
import com.cjs.cms.model.ration.TrustApplyExtInfo;
import com.cjs.cms.util.file.FileUtil;
import com.cjs.cms.util.lang.DateEnum;
import com.cjs.cms.util.lang.DateUtil;
import com.cjs.cms.util.lang.StringUtil;
import com.cjs.cms.util.poi.ExcelConfig;
import com.cjs.cms.util.poi.ExcelUtil;
import com.cjs.cms.util.t2.T2Result;
import com.cjs.cms.util.t2.T2Util;

/**
 * 入库
 * 
 * @author tongyufu
 *
 */
@Service
public class StorageBiz {

    Logger                    log = LogManager.getLogger();
    @Value("${download.export}")
    private String            exportPath;
    @Autowired
    private TrustApplyExtDao  trustApplyExtDao;
    @Autowired
    private TrustApplyDao     trustApplyDao;
    @Autowired
    private OtcTrustEECodeDao otcTrustEECodeDao;
    @Autowired
    private UserFinanceBiz    userFinanceBiz;

    /**
     * 预约托管申请入库处理
     * @param applyNo 托管单号
     * @return
     */
    public T2Result storage(String applyNo) {
        TrustApplyExtInfo applyInfo = trustApplyExtDao.queryTrunstApply(applyNo);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("action_in", "0");
        params.put("pre_in_amount", applyInfo.getApprovalCount());
        params.put("apply_type", 4);
        params.put("approval_count", applyInfo.getApprovalCount());
        params.put("trustee_fare", 0);
        params.put("fund_account", applyInfo.getFundAccount());
        params.put("apply_no", applyNo);
        params.put("otc_code", applyInfo.getOtcCode());
        params.put("curr_time", DateUtil.getNow(DateEnum.UNSIGNED_TIME));
        params.put("curr_date", DateUtil.getNow(DateEnum.UNSIGNED_DATE));
        params.put("storage_date", 0);
        params.put("operator_name", "业务管理");
        params.put("operator_no", "2001");
        params.put("branch_no", "11");
        params.put("otcexch_type", "O1");
        params.put("issue_price", applyInfo.getIssuePrice());
        params.put("status", "0");
        params.put("back_amount", applyInfo.getBackAmount());
        T2Result result = T2Util.request(params, "610520");
        log.info(MessageFormat.format("预约托管申请单[{0}]入库结果:{1}", applyNo, result));
        return result;
    }

    /**
     * 鉴定否决
     * @param applyNo
     * @return
     */
    @Transactional
    public ResultInfo vote(String applyNo, Integer backAmount) {
        Map<String, Object> applyInfo = trustApplyDao.queryByApplyNo(applyNo);
        if (applyInfo == null) {
            return new ResultInfo(0, "托管记录不存在");
        }
        if (!StringUtil.equals(applyInfo.get("APPLY_TYPE").toString(), "2", "3", "4")) {
            return new ResultInfo(0, "只能鉴定否决待鉴定、鉴定不通过、待入库的托管记录");
        }
        int row = trustApplyDao.voteApply(applyNo, backAmount);
        if (row == 0) {
            return new ResultInfo(0, "鉴定否决失败,请确认托管单状态");
        }
        return new ResultInfo(1, "鉴定否决成功");
    }

    /**
     * 取消托管
     * @param applyNo
     * @return
     */
    @Transactional
    public ResultInfo cancel(String applyNo) {
        Map<String, Object> applyInfo = trustApplyDao.queryByApplyNo(applyNo);
        if (applyInfo == null) {
            return new ResultInfo(0, "托管记录不存在");
        }
        if (!"2".equals(applyInfo.get("APPLY_TYPE"))) {
            return new ResultInfo(0, "只能取消待鉴定的托管记录");
        }
        int row = trustApplyDao.cancelApply(applyNo);
        if (row == 0) {
            return new ResultInfo(0, "取消失败,请确认托管单状态");
        }
        Double money = Double.parseDouble(applyInfo.get("APPRAISAL_FARE").toString());
        otcTrustEECodeDao.addApplicableAmount(applyInfo.get("OTC_CODE").toString(),
            Integer.parseInt(applyInfo.get("APPLY_COUNT").toString()));
        T2Result result = userFinanceBiz.addSysFund(applyNo, "cancel_trustapply",
            applyInfo.get("FUND_ACCOUNT").toString(), money, "退鉴定费:" + applyNo);
        if (result.getCode() != 0) {
            return new ResultInfo(0, "蓝补资金失败:" + result.getData().get(0));
        }
        return new ResultInfo(1, "取消托管成功");
    }

    /**验证及入库*/
    public String preStorage(String param) {
        for (String applyNo : param.split(",")) {
            TrustApplyExtInfo trustApplyExtInfo = trustApplyExtDao.queryTrunstApply(applyNo);
            if ("4".equals(trustApplyExtInfo.getApplyType())) {
                storage(applyNo);
            }
        }
        return "1";
    }

    /**入库导出*/
    public File export(Map<String, Object> params) throws Exception {
        String filename = "直接上市确权_" + DateUtil.getNow(DateEnum.UNSIGNED_DATE_TIME);
        filename = FileUtil.makeMonthDir(exportPath) + filename + ".xlsx";
        File targetFile = new File(filename);
        ExcelConfig config = new ExcelConfig();
        URI template = UserBalanceAction.class.getResource("/excel/collection_storage.xlsx")
            .toURI();
        //查询导出的数据
        List<Map<String, Object>> list = trustApplyDao.queryForExport(params);
        for (Map<String, Object> map : list) {
            map.put("market", "O1");
            map.put("non_circulation", "0");
            map.put("manage_type", "0");
        }
        //导出数据状态变更
        params.put("currDate", DateUtil.getNow(DateEnum.UNSIGNED_DATE));
        params.put("currTime", DateUtil.getNow(DateEnum.UNSIGNED_TIME));
        trustApplyDao.storageExport(params);

        // 先生成Excel文件
        config.setSourceTemplate(new File(template));
        config.setTargetFile(targetFile);
        config.setData(list);
        new ExcelUtil(config).writeExcel();
        return targetFile;
    }
}