package com.ycsoft.sysmanager.component.prod; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import com.ycsoft.beans.config.TBusiFee; import com.ycsoft.beans.config.TPublicAcctitem; import com.ycsoft.beans.device.RStbModel; import com.ycsoft.beans.prod.PProd; import com.ycsoft.beans.prod.PProdTariff; import com.ycsoft.beans.prod.PPromotion; import com.ycsoft.beans.prod.PPromotionAcct; import com.ycsoft.beans.prod.PPromotionCard; import com.ycsoft.beans.prod.PPromotionCounty; import com.ycsoft.beans.prod.PPromotionFee; import com.ycsoft.beans.prod.PPromotionGift; import com.ycsoft.beans.prod.PPromotionTheme; import com.ycsoft.beans.prod.PPromotionThemeCounty; import com.ycsoft.beans.system.SOptr; import com.ycsoft.business.dao.config.TBusiFeeDao; import com.ycsoft.business.dao.config.TPublicAcctitemDao; import com.ycsoft.business.dao.config.TRuleDefineDao; import com.ycsoft.business.dao.prod.PProdTariffDao; import com.ycsoft.business.dao.prod.PPromotionAcctDao; import com.ycsoft.business.dao.prod.PPromotionCardDao; import com.ycsoft.business.dao.prod.PPromotionCountyDao; import com.ycsoft.business.dao.prod.PPromotionDao; import com.ycsoft.business.dao.prod.PPromotionFeeDao; import com.ycsoft.business.dao.prod.PPromotionGiftDao; import com.ycsoft.business.dao.prod.PPromotionThemeCountyDao; import com.ycsoft.business.dao.prod.PPromotionThemeDao; import com.ycsoft.business.dao.resource.device.RStbModelDao; import com.ycsoft.business.dto.core.prod.PromotionDto; import com.ycsoft.business.dto.core.prod.PromotionThemeDto; import com.ycsoft.commons.abstracts.BaseComponent; import com.ycsoft.commons.constants.DataRight; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.exception.ComponentException; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.sysmanager.dto.tree.TreeDto; @Component public class PromotionComponent extends BaseComponent { private PPromotionDao pPromotionDao; private TRuleDefineDao tRuleDefineDao; private TBusiFeeDao tBusiFeeDao; private PProdTariffDao pProdTariffDao; private TPublicAcctitemDao tPublicAcctitemDao; private PPromotionAcctDao pPromotionAcctDao; private PPromotionCardDao pPromotionCardDao; private PPromotionGiftDao pPromotionGiftDao; private PPromotionFeeDao pPromotionFeeDao; private RStbModelDao rStbModelDao; private PPromotionThemeDao pPromotionThemeDao; private PPromotionCountyDao pPromotionCountyDao; private PPromotionThemeCountyDao pPromotionThemeCountyDao; /** * 查询所有业务费用 * @return * @throws Exception */ public List<TBusiFee> queryAllFee() throws Exception{ return tBusiFeeDao.findAll(); } /** * 查询产品资费 * @return * @throws JDBCException */ public List<PProdTariff> queryAllTariff(String acctitemId, String promotionId) throws JDBCException{ List<PProdTariff> list = pProdTariffDao.findProdTariff(acctitemId,promotionId); if(acctitemId.equals("BAND")){ PProdTariff tariff=new PProdTariff(); tariff.setTariff_id("BAND"); tariff.setTariff_name("宽带自动匹配"); tariff.setRent(0); list.add(tariff); } return list; } /** * 查询所有公用账目 * @return * @throws JDBCException */ public List<TPublicAcctitem> queryAllAcct() throws JDBCException{ List<TPublicAcctitem> list = pPromotionDao.findAllAcctitem(); TPublicAcctitem acctitem = new TPublicAcctitem(); acctitem.setAcctitem_id("BAND"); acctitem.setAcctitem_name("宽带自动匹配"); acctitem.setAcctitem_type("PROD"); list.add(acctitem); return list; } /** * 查询所有促销主题 * @return * @throws JDBCException */ public List<PPromotionTheme> queryPromThemes(String query,SOptr optr) throws Exception { String dataRight = SystemConstants.COUNTY_ALL; if(!optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)){ dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString()); } return pPromotionThemeDao.queryAll(query,dataRight); } /** * 根据操作员地区Id返回促销数据 * @param optr * @return * @throws Exception */ public List<PromotionDto> queryProm(String themeId,SOptr optr) throws Exception{ String dataRight = SystemConstants.COUNTY_ALL; if(!optr.getCounty_id().equals(SystemConstants.COUNTY_ALL)){ dataRight = this.queryDataRightCon(optr, DataRight.CHANGE_COUNTY.toString()); } List<PromotionDto> promList = pPromotionDao.queryPromotion(themeId,dataRight); for(PromotionDto prom : promList){ pPromotionDao.findByKey(prom); } return promList; } /** * 根据促销主题适用地区,限定促销适用地区 * @param promId 促销编号 * @param countyList 促销适用地区 * @return * @throws Exception */ public List<TreeDto> getCountyTree(String themeId,List<TreeDto> countyList) throws Exception{ List<PPromotionThemeCounty> themeList = pPromotionThemeCountyDao.queryCountyById(themeId); for (int j = countyList.size() - 1; j >= 0; j--) { boolean ck = false; for(PPromotionThemeCounty pt : themeList){ if(pt.getCounty_id().equals(countyList.get(j).getId())){ ck = true; } } if (!ck) { countyList.remove(j); } } return countyList; } /** * 保存一条促销记录 * @param promotion * @param promCountyIds * @throws JDBCException */ public void savePromotion(PPromotion promotion,SOptr optr, String promCountyIds) throws JDBCException{ promotion.setPromotion_id(pPromotionDao.getPromId()); promotion.setArea_id(optr.getArea_id()); promotion.setCounty_id(optr.getCounty_id()); promotion.setCreate_time(new Date()); promotion.setOptr_id(optr.getOptr_id()); pPromotionDao.save(promotion); //保存促销适用地区 savePromotionCounty(promotion.getPromotion_id(),promCountyIds); } /** * 修改一条促销记录 * @param promotion * @param promCountyIds * @throws JDBCException */ public void editPromotion(PPromotion promotion, String promCountyIds) throws JDBCException{ pPromotionDao.update(promotion); //保存促销适用地区 savePromotionCounty(promotion.getPromotion_id(),promCountyIds); } /** * 保存促销适用地区 * @param promId * @param promCountyIds * @throws JDBCException */ public void savePromotionCounty(String promId,String promCountyIds) throws JDBCException{ pPromotionCountyDao.deleteById(promId); if(StringHelper.isNotEmpty(promCountyIds)){ String[] promCountys = promCountyIds.split(","); for(int i=0;i<promCountys.length;i++){ PPromotionCounty entity = new PPromotionCounty(); entity.setPromotion_id(promId); entity.setCounty_id(promCountys[i]); pPromotionCountyDao.save(entity); } } } /** * 删除一条促销记录 * @param promotion * @throws JDBCException */ public void removePromotion(String promotionId) throws JDBCException{ pPromotionDao.remove(promotionId); pPromotionAcctDao.deleteByPromId(promotionId); pPromotionCardDao.deleteByPromId(promotionId); pPromotionFeeDao.deleteByPromId(promotionId); pPromotionGiftDao.deleteByPromId(promotionId); } /** * 保存一条促销记录的详细信息 * @param promotionId * @param feeList * @param acctList * @param cardList * @param giftList * @throws JDBCException */ public void savePromDetail(String promotionId,List<PPromotionFee> feeList,List<PPromotionAcct> acctList, List<PPromotionCard> cardList, List<PPromotionGift> giftList) throws JDBCException{ //先删除原有记录 pPromotionAcctDao.deleteByPromId(promotionId); pPromotionCardDao.deleteByPromId(promotionId); pPromotionFeeDao.deleteByPromId(promotionId); pPromotionGiftDao.deleteByPromId(promotionId); //保存新的数据 pPromotionAcctDao.save(acctList.toArray(new PPromotionAcct[acctList.size()])); pPromotionCardDao.save(cardList.toArray(new PPromotionCard[cardList.size()])); pPromotionFeeDao.save(feeList.toArray(new PPromotionFee[feeList.size()])); pPromotionGiftDao.save(giftList.toArray(new PPromotionGift[giftList.size()])); } /** * 保存促销主题地市配置 * @param themeId * @param promCountyIds * @throws JDBCException */ public void savePromotionThemeCounty(String themeId,String promCountyIds) throws Exception{ if(StringHelper.isEmpty(promCountyIds)){ throw new ComponentException("请先选择应用地区!"); } pPromotionThemeCountyDao.deleteById(themeId); if(StringHelper.isNotEmpty(promCountyIds)){ String[] promCountys = promCountyIds.split(","); for(int i=0;i<promCountys.length;i++){ PPromotionThemeCounty entity = new PPromotionThemeCounty(); entity.setTheme_id(themeId); entity.setCounty_id(promCountys[i]); pPromotionThemeCountyDao.save(entity); } } } public void savePromTheme(PPromotionTheme theme ,SOptr optr,String promCountyIds) throws Exception{ theme.setTheme_id(pPromotionThemeDao.getPromThemeId()); theme.setArea_id(optr.getArea_id()); theme.setCounty_id(optr.getCounty_id()); theme.setCreate_time(new Date()); theme.setOptr_id(optr.getOptr_id()); pPromotionThemeDao.save(theme); //保存促销主题适用地区 savePromotionThemeCounty(theme.getTheme_id(),promCountyIds); } public void editPromTheme(PPromotionTheme theme, String promCountyIds) throws Exception{ pPromotionThemeDao.update(theme); //保存促销主题适用地区 savePromotionThemeCounty(theme.getTheme_id(),promCountyIds); //促销主题适用地区减少后,删除促销的减少的适用地区 deletePromCounty(theme.getTheme_id(),promCountyIds); } public void deletePromCounty(String themeId ,String promCountyIds) throws Exception{ List<PPromotionCounty> promList = pPromotionThemeCountyDao.findByThemeId(themeId); String[] promCountys = promCountyIds.split(","); for (int i = promList.size() - 1; i >= 0; i--) { boolean ck = false; for(String pt : promCountys){ if(pt.equals(promList.get(i).getCounty_id())){ ck = true; } } if (ck) { promList.remove(i); } } List<Object[]> countyList = new ArrayList<Object[]>(); List<String> aList = new ArrayList<String>(); for (int j = 0; j < promList.size(); j++) { aList.add(promList.get(j).getPromotion_id()); aList.add(promList.get(j).getCounty_id()); countyList.add(aList.toArray(new String[aList.size()])); aList.clear(); } pPromotionCountyDao.deleteByAll(countyList); } public List<RStbModel> queryAllDeviceMdoel() throws JDBCException { return rStbModelDao.queryAllDeviceMdoel(); } public PPromotionDao getPPromotionDao() { return pPromotionDao; } public void setPPromotionDao(PPromotionDao promotionDao) { pPromotionDao = promotionDao; } public TRuleDefineDao getTRuleDefineDao() { return tRuleDefineDao; } public void setTRuleDefineDao(TRuleDefineDao ruleDefineDao) { tRuleDefineDao = ruleDefineDao; } public TBusiFeeDao getTBusiFeeDao() { return tBusiFeeDao; } public void setTBusiFeeDao(TBusiFeeDao busiFeeDao) { tBusiFeeDao = busiFeeDao; } public PProdTariffDao getPProdTariffDao() { return pProdTariffDao; } public void setPProdTariffDao(PProdTariffDao prodTariffDao) { pProdTariffDao = prodTariffDao; } public TPublicAcctitemDao getTPublicAcctitemDao() { return tPublicAcctitemDao; } public void setTPublicAcctitemDao(TPublicAcctitemDao publicAcctitemDao) { tPublicAcctitemDao = publicAcctitemDao; } public PPromotionAcctDao getPPromotionAcctDao() { return pPromotionAcctDao; } public void setPPromotionAcctDao(PPromotionAcctDao promotionAcctDao) { pPromotionAcctDao = promotionAcctDao; } public PPromotionCardDao getPPromotionCardDao() { return pPromotionCardDao; } public void setPPromotionCardDao(PPromotionCardDao promotionCardDao) { pPromotionCardDao = promotionCardDao; } public PPromotionGiftDao getPPromotionGiftDao() { return pPromotionGiftDao; } public void setPPromotionGiftDao(PPromotionGiftDao promotionGiftDao) { pPromotionGiftDao = promotionGiftDao; } public PPromotionFeeDao getPPromotionFeeDao() { return pPromotionFeeDao; } public void setPPromotionFeeDao(PPromotionFeeDao promotionFeeDao) { pPromotionFeeDao = promotionFeeDao; } public void setRStbModelDao(RStbModelDao stbModelDao) { rStbModelDao = stbModelDao; } public PPromotionThemeDao getPPromotionThemeDao() { return pPromotionThemeDao; } public void setPPromotionThemeDao(PPromotionThemeDao promotionThemeDao) { pPromotionThemeDao = promotionThemeDao; } public PPromotionCountyDao getPPromotionCountyDao() { return pPromotionCountyDao; } public void setPPromotionCountyDao(PPromotionCountyDao promotionCountyDao) { pPromotionCountyDao = promotionCountyDao; } public PPromotionThemeCountyDao getPPromotionThemeCountyDao() { return pPromotionThemeCountyDao; } public void setPPromotionThemeCountyDao(PPromotionThemeCountyDao promotionThemeCountyDao) { pPromotionThemeCountyDao = promotionThemeCountyDao; } /** * 为记录异动准备数据. * @param themeId * @return * @throws ComponentException */ public PromotionThemeDto queryForSysChangeInfo(String themeId,SOptr optr) throws ComponentException{ PromotionThemeDto dto = new PromotionThemeDto(); if(StringHelper.isEmpty(themeId)){ return dto; } try { PPromotionTheme theme = pPromotionThemeDao.findByKey(themeId); dto.setTheme(theme); dto.setCountys(pPromotionThemeCountyDao.queryCountyById(themeId)); List<PromotionDto> proms = queryProm(themeId, optr); dto.setProms(proms); } catch (Exception e) { throw new ComponentException(e); } return dto; } /** * 根据promid查询数据为记录异动准备数据. * @param themeId * @return * @throws ComponentException */ public PromotionThemeDto queryForSysChangeInfoByPromId(String promId,SOptr optr) throws ComponentException{ PromotionThemeDto dto = new PromotionThemeDto(); if(StringHelper.isEmpty(promId)){ return dto; } PromotionDto prom = new PromotionDto(); try { prom = this.pPromotionDao.findByKey(promId); } catch (Exception e) { throw new ComponentException(e); } return queryForSysChangeInfo(prom.getTheme_id(), optr); } }