GoodsConfigBiz.java 7.88 KB
package com.cjs.cms.biz.user.point;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
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 com.cjs.cms.biz.site.UploadBiz;
import com.cjs.cms.dao.quota.OtcHolderDao;
import com.cjs.cms.dao.user.OrganinfoDao;
import com.cjs.cms.dao.user.SdcostockDao;
import com.cjs.cms.dao.user.account.ClientInfoDao;
import com.cjs.cms.dao.user.point.GoodsConfigDao;
import com.cjs.cms.model.pub.ConstInfo;
import com.cjs.cms.model.user.account.ClientInfo;
import com.cjs.cms.model.user.point.GoodsConfigInfo;
import com.cjs.cms.util.file.FileUtil;
import com.cjs.cms.util.redis.JedisTemplate;

/**
 * 积分商城
 * @author kongmingke
 *
 */
@Service
public class GoodsConfigBiz {
    @Autowired
    private UploadBiz      upload;
    @Autowired
    private ClientInfoDao  clientInfoDao;
    @Autowired
    private GoodsConfigDao goodsConfigDao;
    @Autowired
    private OtcHolderDao   otcHolderDao;
    @Autowired
    private SdcostockDao   sdcostockDao;
    @Autowired
    private OrganinfoDao   organinfoDao;
    @Autowired
    private JedisTemplate  jedisTemplate;
    Logger                 log = LogManager.getLogger();

    /**藏品信息验证
     * @throws ParseException */
    public Map<String, Object> validateInfo(GoodsConfigInfo configInfo) {
        final Map<String, Object> outMap = new HashMap<String, Object>();
        if (StringUtils.isNotBlank(configInfo.getImageFile().getOriginalFilename())) {
            //上传图片图片不能大于1M
            if (configInfo.getImageFile().getSize() <= 1048576) {
                // 图片名称
                String imageName = FileUtil.QueryArticleImgPrefix() + FileUtil
                    .getSuffix(configInfo.getImageFile().getOriginalFilename());
                Map<String, String> map = upload.markFile();
                // 图片上传路径
                String imgTargetFile = map.get("uploadPath") + "/" + imageName;
                configInfo.setImage(map.get("imageUrl") + "/" + imageName);
                try {
                    FileUtil.transferFile(configInfo.getImageFile(), imgTargetFile);
                } catch (IOException e) {
                    outMap.put("resultCode", "0");
                    outMap.put("resultMsg", "图片上传失败");
                    return outMap;
                }
            } else {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg", "图片大小不能超过1兆,请重新上传");
                return outMap;
            }
        }
        //判断发放账户的真实性
        ClientInfo clientInfo = clientInfoDao.queryByClientId(configInfo.getOtcAccount());
        Map<String, Object> clientMap = organinfoDao.queryByClientId(configInfo.getOtcAccount());
        if (clientInfo == null && clientMap == null) {
            outMap.put("resultCode", "0");
            outMap.put("resultMsg", "账号" + configInfo.getOtcAccount() + "不存在");
            return outMap;
        }

        //判断账户持仓>商品总量
        Map<String, Object> sdcostock = this.enableStock(configInfo.getOtcAccount(),
            configInfo.getOtcCode());
        if (sdcostock == null) {
            outMap.put("resultCode", "0");
            outMap.put("resultMsg", "该账号没有" + configInfo.getOtcCode() + "藏品持仓");
            return outMap;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try {
            if (sdf.parse(configInfo.getLotteryStart())
                .after(sdf.parse(configInfo.getLotteryEnd()))) {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg", "开始累计时间不能大于结束累计时间");
                return outMap;
            }
        } catch (Exception e) {
            log.error("", e);
        }

        //刮奖类型藏品,获取时间不可重合
        List<GoodsConfigInfo> info = goodsConfigDao.searchByTime(configInfo);
        if (info != null && info.size() > 0) {
            outMap.put("resultCode", "0");
            outMap.put("resultMsg", "刮奖类型藏品,获取时间不可重合");
            return outMap;
        }
        //修改
        if (configInfo.getId() != null) {
            GoodsConfigInfo goodsConfigInfo = goodsConfigDao.queryOne(configInfo.getId());
            //已发放藏品数量
            int alreayAmount = goodsConfigInfo.getGoodsAmount() - goodsConfigInfo.getGoodsRemain();
            if (configInfo.getGoodsAmount() < alreayAmount) {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg",
                    "输入藏品总量(" + configInfo.getGoodsAmount() + ")不能小于已发放数量(" + alreayAmount + ")");
                return outMap;
            }
            //内置账户可配售数量
            int enableCount = Integer.parseInt(sdcostock.get("ENABLE_AMOUNT").toString());
            if (enableCount < configInfo.getGoodsAmount() - alreayAmount) {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg",
                    "账号" + configInfo.getOtcAccount() + "中的" + configInfo.getOtcCode() + "("
                                        + configInfo.getOtcName() + ")可配售数量(" + enableCount
                                        + ")必须大于修改后的剩余库存("
                                        + (configInfo.getGoodsAmount() - alreayAmount) + ")");
                return outMap;
            }
            configInfo.setGoodsRemain(configInfo.getGoodsAmount() - alreayAmount);
            goodsConfigDao.updateAll(configInfo);
        } else {
            //添加
            //验证是否重复添加
            List<GoodsConfigInfo> configInfos = goodsConfigDao
                .queryByOtcCode(configInfo.getOtcCode());
            if (configInfos != null && configInfos.size() > 0) {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg", "商品" + configInfo.getOtcCode() + "已经存在,不允许重复添加");
                return outMap;
            }
            if (Integer.parseInt(sdcostock.get("ENABLE_AMOUNT").toString()) < configInfo
                .getGoodsAmount()) {
                outMap.put("resultCode", "0");
                outMap.put("resultMsg",
                    "账号" + configInfo.getOtcAccount() + "中的" + configInfo.getOtcCode() + "("
                                        + configInfo.getOtcName() + ")数量必须大于库存数量("
                                        + configInfo.getGoodsAmount() + ")");
                return outMap;
            }
            configInfo.setGoodsStatus("0");
            configInfo.setGoodsRemain(configInfo.getGoodsAmount());
            goodsConfigDao.insert(configInfo);
        }

        //剩余数量存放到redis
        String redisKey = ConstInfo.Point.GOODS_REMAIN + configInfo.getOtcCode();
        String goodsRemain = configInfo.getGoodsRemain().toString();
        jedisTemplate.set(redisKey, goodsRemain, 60 * 60 * 24);

        outMap.put("resultCode", "1");
        outMap.put("resultMsg", "");
        return outMap;
    }

    /**
     * 查询内部账号指定藏品可用数量
     * @return 
     */
    public Map<String, Object> enableStock(String userId, String otcCode) {
        //得到用户股东账号
        String otcAccount = otcHolderDao.queryOtcAccount(userId);
        //查询可用数量
        Map<String, String> params = new HashMap<String, String>();
        params.put("userId", otcAccount);
        params.put("otcCode", otcCode);
        Map<String, Object> sdcostock = sdcostockDao.searchEnable(params);
        return sdcostock;
    }

}