package com.ycsoft.business.service.impl; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.ycsoft.beans.config.TServerRes; import com.ycsoft.beans.core.common.CDoneCode; import com.ycsoft.beans.core.cust.CCust; import com.ycsoft.beans.core.prod.CProd; import com.ycsoft.beans.core.prod.CProdInvalidTariff; import com.ycsoft.beans.core.prod.CProdOrderFee; import com.ycsoft.beans.core.prod.CProdPropChange; import com.ycsoft.beans.core.promotion.CPromFee; import com.ycsoft.beans.core.promotion.CPromProdRefund; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.core.user.CUserPropChange; import com.ycsoft.beans.core.user.CUserStb; import com.ycsoft.beans.prod.PProd; import com.ycsoft.beans.prod.PProdTariff; import com.ycsoft.beans.prod.PPromFee; import com.ycsoft.beans.prod.PPromFeeUser; import com.ycsoft.beans.prod.PRes; import com.ycsoft.beans.system.SOptr; import com.ycsoft.business.commons.abstracts.BaseService; import com.ycsoft.business.component.config.ExpressionUtil; import com.ycsoft.business.component.core.CustComponent; import com.ycsoft.business.component.core.UserComponent; import com.ycsoft.business.component.core.UserProdComponent; import com.ycsoft.business.component.core.UserPromComponent; import com.ycsoft.business.component.resource.ProdComponent; import com.ycsoft.business.dto.core.bill.UserBillDto; import com.ycsoft.business.dto.core.prod.CProdBacthDto; import com.ycsoft.business.dto.core.prod.CProdDto; import com.ycsoft.business.dto.core.prod.CPromotionAcctDto; import com.ycsoft.business.dto.core.prod.CPromotionDto; import com.ycsoft.business.dto.core.prod.PProdDto; import com.ycsoft.business.dto.core.prod.ProdResDto; import com.ycsoft.business.dto.core.prod.PromFeeProdDto; import com.ycsoft.business.dto.core.prod.PromTreeDto; import com.ycsoft.business.dto.core.prod.UserProdDto; import com.ycsoft.business.dto.core.user.ChangedUser; import com.ycsoft.business.dto.core.user.UserDto; import com.ycsoft.business.service.IQueryUserService; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.commons.store.MemoryDict; import com.ycsoft.commons.tree.TreeNode; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.daos.core.Pager; import com.ycsoft.sysmanager.dto.prod.ResGroupDto; /** * 查询用户相关信息服务实现类 * @author sheng * May 17, 2010 3:22:29 PM */ @Service public class QueryUserService extends BaseService implements IQueryUserService { private UserComponent userComponent; private UserProdComponent userProdComponent; private ProdComponent prodComponent; private UserPromComponent userPromComponent; private CustComponent custComponent; private ExpressionUtil expressionUtil; public List<PProdDto> queryProdByCountyId(String countyId, String prodStatus, String tariffStatus, String ruleId, String tariffType) throws Exception{ return userProdComponent.queryProdByCountyId(countyId, prodStatus, tariffStatus, ruleId, tariffType); } /** * 查询用户排斥资源 * @param userId * @param custId * @return * @throws Exception */ public List<PRes> queryRejectRes(String userId,String custId) throws Exception{ return userProdComponent.queryRejectRes(userId, custId); } /** * 查询用户未排斥资源 * @param userId * @param custId * @return * @throws Exception */ public List<PRes> queryUnRejectRes(String userId,String custId) throws Exception{ return userProdComponent.queryUnRejectRes(userId, custId); } public ProdResDto queryDynResByProdSn(String prodSn) throws Exception { return userProdComponent.queryDynResByProdSn(prodSn); } public List<UserDto> queryUser(String custId) throws Exception { List<UserDto> result = userComponent.queryUser(custId); return result; } public Map<String, List<CProdDto>> queryAllProd(String custId) throws Exception { return CollectionHelper.converToMap( userProdComponent.queryProdByCustId(custId), "user_id"); } public List<CProdDto> queryProdByCustId(String custId) throws Exception { return userProdComponent.queryProdByCustId(custId); } public List<CProdDto> queryProdBalanceByCustId(String custId) throws Exception { return userProdComponent.queryProdBalanceByCustId(custId); } public List<UserProdDto> queryUserProdToCallCenter(Map<String,Object> p) throws Exception { return userProdComponent.queryUserProdToCallCenter(p); } public List<UserProdDto> queryUserProdHisToCallCenter(Map<String,Object> p) throws Exception { return userProdComponent.queryUserProdHisToCallCenter(p); } public List<CProdBacthDto> queryProdByIds(String[] ids,String type,String prodId) throws Exception { return userProdComponent.queryProdByIds(ids,type,prodId); } public List<CProd> queryBaseProdByIds(String[] ids,String type) throws Exception { return userProdComponent.queryBaseProdByIds(ids,type); } public Map<String, List<CProdDto>> queryAllProdHis(String custId) throws Exception { return CollectionHelper.converToMap( userProdComponent.queryProdHisByCustId(custId), "user_id"); } public List<UserDto> queryUserHis(String custId) throws Exception { return userComponent.queryUserHis(custId); } public List<CProdDto> querProdByUserId(String userId) throws Exception{ return userProdComponent.queryByUserId(userId); } public List<CDoneCode> queryUserDoneCode(String userId) throws Exception { return doneCodeComponent.queryByUserId(userId); } public List<CUserPropChange> queryUserPropChange(String userId,String userType) throws Exception { return userComponent.queryUserPropChange(userId,userType); } public Pager<CProdOrderFee> queryOrderFeeDetail(String orderSn, Integer start, Integer limit) throws Exception { return userComponent.queryOrderFeeDetail(orderSn, start, limit); } public List<CPromotionDto> queryUserPromotion(String userId) throws Exception{ return userComponent.queryUserPromotion(userId); } public List<CPromotionDto> queryPromotionCanCancel(String userId, String prodId) throws Exception{ return userComponent.queryPromotionCanCancel(userId,prodId); } public List<CPromotionAcctDto> queryPromotionProdBySn(String promotionSn,String promotionId) throws Exception { return userPromComponent.queryPromotionProdBySn(promotionSn,promotionId); } public Pager<CProdInvalidTariff> queryTariffChange(String prodId,Integer start,Integer limit) throws Exception { return userProdComponent.queryTariffChange(prodId,start,limit); } /** * 查询用户产品资源 * @param prodSn * @return * @throws Exception */ public List<PRes> queryUserProdRes(String prodSn) throws Exception{ return userProdComponent.queryResByProdSn(prodSn); } /** * 查询当前产品的状态异动信息 * @param prodId * @param countyId * @return * @throws Exception */ public Pager<CProdPropChange> querProdPropChange(String prodId, Integer start, Integer limit) throws Exception{ Pager<CProdPropChange> prodPropList = userProdComponent.queryChangeByProd(prodId,start,limit); PProdTariff ppt = null; String paramName = null; for(CProdPropChange prodProp : prodPropList.getRecords()){ //当变动的字段为 资费ID时,通过ID查询资费名称 if(prodProp.getColumn_name().toUpperCase().equals("TARIFF_ID")){ ppt = prodComponent.queryTariffById(prodProp.getOld_value()); prodProp.setOld_value(ppt.getTariff_name()); ppt = prodComponent.queryTariffById(prodProp.getNew_value()); prodProp.setNew_value(ppt.getTariff_name()); } prodProp.setColumn_name_text( MemoryDict.getTransData(prodProp.getColumn_name_text()) ); paramName=prodProp.getParam_name(); //若数据字典字段不为空,则查询数据字典值 if (StringHelper.isNotEmpty(prodProp.getParam_name())){ prodProp.setOld_value_text(MemoryDict.getDictName( paramName, prodProp.getOld_value())); prodProp.setNew_value_text(MemoryDict.getDictName( paramName, prodProp.getNew_value())); }else { prodProp.setOld_value_text( MemoryDict.getTransData( prodProp.getOld_value() )); prodProp.setNew_value_text( MemoryDict.getTransData( prodProp.getNew_value() )); } } return prodPropList; } public List<CUser> queryUserByCustId(String custId) throws Exception { return userComponent.queryUserByCustId(custId); } /** * @param deviceId * @param returnTvRecordCount * @param returnVodRecordCount * @return */ public List<UserBillDto> queryUserBill(String deviceId, Integer returnTvRecordCount, Integer returnVodRecordCount) throws Exception { return userComponent.queryUserBill(deviceId,returnTvRecordCount,returnVodRecordCount); } public CUser queryUserById(String userId) throws Exception { return userComponent.queryUserById(userId); } public List<PProd> queryAtvProds() throws Exception { return userProdComponent.queryAllAtvProds(); } public PProdTariff queryProdTariffById(String tariffId) throws Exception { return userProdComponent.queryProdTariffById(tariffId); } public UserDto queryUserByDeviceId(String deviceId) throws Exception { return userComponent.queryUserByDeviceId(deviceId); } /** * @return */ public List<ChangedUser> queryChangedUserInfo(String beginDate,String endDate,String countyId) throws JDBCException { return userComponent.queryChangedUserInfo(beginDate,endDate,countyId); } public List<CUser> queryUserByCustNoAndStatus(String custNo,String userStatus) throws Exception { List<CUser> userList = userComponent.queryUserByCustNo(custNo); List<CUser> users = new ArrayList<CUser>(); // if(userStatus.equals(StatusConstants.ATVCLOSE)){ // for(CUser user : userList){ // if(user.getUser_type().equals(SystemConstants.USER_TYPE_ATV)){ // users.add(user); // } // } // }else{ users = userList; // } return users; } /* (non-Javadoc) * @see com.ycsoft.business.service.IQueryUserService#querySelectablePromPay() */ public List<PPromFee> querySelectablePromPay(String custId,SOptr optr) throws Exception { CCust cust = custComponent.queryCustById(custId); List<CUser> userList = userComponent.queryUserByCustId(custId); Map<String, CUserStb> userStbMap = CollectionHelper.converToMapSingle(userComponent.queryUserStbByCustId(custId), "user_id"); List<PPromFee> promFeeList = userComponent.querySelectablePromPay(); String[] promFeeIds = CollectionHelper.converValueToArray(promFeeList, "prom_fee_id"); Map<String,List<CPromFee>> cPrommap = CollectionHelper.converToMap(userComponent.queryPromFee(promFeeIds,custId,optr.getCounty_id()), "prom_fee_id"); Map<String,List<PPromFeeUser>> groupmap = CollectionHelper.converToMap(userComponent.queryPromFeeUser(promFeeIds), "prom_fee_id"); expressionUtil.setCcust(cust); //删除规则和客户终端不一致的套餐 for(int i=promFeeList.size()-1;i>=0;i--){ int num =0; if(groupmap.get(promFeeList.get(i).getProm_fee_id()) == null){ promFeeList.remove(i); continue; } for(PPromFeeUser promUser:groupmap.get(promFeeList.get(i).getProm_fee_id()) ){ for(CUser user : userList){ expressionUtil.setCuser(user); expressionUtil.setCuserStb(userStbMap.get(user.getUser_id())); expressionUtil.setOrderprods(userProdComponent.queryByUserId(user.getUser_id())); if(expressionUtil.parseBoolean(promUser.getRule_id_text())){ num++; break; } } } if(num != groupmap.get(promFeeList.get(i).getProm_fee_id()).size() ){ promFeeList.remove(i); continue; } promFeeList.get(i).setUse_cnt(cPrommap.get(promFeeList.get(i).getProm_fee_id())==null?0:cPrommap.get(promFeeList.get(i).getProm_fee_id()).size()); } return promFeeList; } public List<CPromProdRefund> querySelectPromFee(String userId,String prodSn) throws Exception { List<CPromProdRefund> promList = userComponent.querySelectPromFee(userId,prodSn); List<CPromProdRefund> list = new ArrayList<CPromProdRefund>(); for(CPromProdRefund dto:promList){ boolean ck = false; for (int i=list.size()-1;i>=0;i--){ CPromProdRefund prom = list.get(i); if(prom.getProm_fee_id().equals(dto.getProm_fee_id()) && prom.getCreate_time().compareTo(dto.getCreate_time())>=0 ){ ck = true; break; }else if(prom.getProm_fee_id().equals(dto.getProm_fee_id()) && dto.getCreate_time().compareTo(prom.getCreate_time())>=0){ list.remove(i); } } if(!ck){ list.add(dto); } } return list; } public PromTreeDto querySelectUserProm(String custId,String promFeeId) throws Exception{ PromTreeDto resultProds = new PromTreeDto(); List<PromFeeProdDto> promFeeProds = new ArrayList<PromFeeProdDto>(); CCust cust = custComponent.queryCustById(custId); List<CUser> userList = userComponent.queryUserByCustId(custId); Map<String, CUserStb> userStbMap = CollectionHelper.converToMapSingle(userComponent.queryUserStbByCustId(custId), "user_id"); List<PPromFeeUser> promUserList = userComponent.queryPromFeeUser(promFeeId); List<String> selectUser = new ArrayList<String>(); List<CProdDto> prodList = userProdComponent.queryByCustId(cust.getCust_id()); Map<String,List<CProdDto>> orderprods = CollectionHelper.converToMap(prodList, "user_id"); //查出可用的终端 expressionUtil.setCcust(cust); for(PPromFeeUser promUser : promUserList){ String allowUser = ""; for(CUser user : userList){ expressionUtil.setCuser(user); expressionUtil.setCuserStb(userStbMap.get(user.getUser_id())); expressionUtil.setOrderprods(orderprods.get(user.getUser_id())); if(expressionUtil.parseBoolean(promUser.getRule_id_text()) && ( user.getStatus().equals(StatusConstants.ACTIVE)||user.getStatus().equals(StatusConstants.OWELONG) )){ allowUser += user.getUser_id()+","; if(!selectUser.contains(user.getUser_id())){ selectUser.add(user.getUser_id()); PromFeeProdDto dto = new PromFeeProdDto(); String userName = ""; String userNameText = ""; if(StringHelper.isNotEmpty(user.getCard_id())){ userName = user.getUser_type_text()+"-"+ user.getUser_name()+"_"+user.getCard_id(); userNameText = userName+"->"; }else{ userName = user.getUser_type_text()+"-"+user.getUser_name(); userNameText = userName+"->"; } dto.setCard_id(user.getCard_id()); dto.setUser_name(userName); dto.setUser_name_text(userNameText); dto.setUser_id(user.getUser_id()); dto.setUser_type(user.getUser_type()); promFeeProds.add(dto); } } } allowUser = StringHelper.delEndChar( allowUser , 1 ); promUser.setAllow_user(allowUser); } //生成套餐树 List<PromFeeProdDto> promProdList = userComponent.queryPromFeeProds(promFeeId); Map<String,List<PromFeeProdDto>> promProdmap = CollectionHelper.converToMap(promProdList, "user_no"); String[] prods = CollectionHelper.converValueToArray(promProdList, "prod_id"); List<ResGroupDto> groupList = userComponent.queryGroupByProdIds(prods); Map<String,List<ResGroupDto>> groupmap = CollectionHelper.converToMap(groupList, "prod_id"); String[] groups = CollectionHelper.converValueToArray(groupList, "group_id"); List<PRes> resList = userComponent.queryResByGroupId(groups); Map<String,List<PRes>> resmap = CollectionHelper.converToMap(resList, "group_id"); List<TreeNode> target = new LinkedList<TreeNode>(); //规则 List<TreeNode> targep = null; //产品 List<TreeNode> targeg = null; //产品动态组 List<TreeNode> targer = null; //资源 TreeNode _t = null; TreeNode _p = null; TreeNode _g = null; TreeNode _r = null; for (PPromFeeUser v : promUserList) { _t = new TreeNode(); _t.setId(v.getUser_no()+"_"+v.getProm_fee_id()); _t.setText( v.getRule_name()+ (v.getUser_fee()==null?"":"_实缴:"+v.getUser_fee()/100)+(v.getProd_count()==null?"":"_可选数:"+v.getProd_count())); _t.getOthers().put("user_fee",v.getUser_fee()==null?"":Integer.toString(v.getUser_fee())); _t.getOthers().put("type","RULE"); _t.getOthers().put("allow_user",v.getAllow_user()); _t.getOthers().put("user_no",v.getUser_no()); _t.getOthers().put("rule_id",v.getRule_id()); _t.getOthers().put("prod_count",v.getProd_count()==null?"":Integer.toString(v.getProd_count())); //可选数量 if(promProdmap.get(v.getUser_no())!=null){ targep = new LinkedList<TreeNode>(); for(PromFeeProdDto p : promProdmap.get(v.getUser_no()) ){ _p = new TreeNode(); _p.setId(p.getProd_id()+"_"+p.getUser_no()); _p.setText(p.getProd_name()+ (p.getReal_pay()==null?"":"_实缴:"+p.getReal_pay())); _p.getOthers().put("type","PROD"); _p.getOthers().put("is_base",p.getIs_base()); _p.getOthers().put("prod_id",p.getProd_id()); _p.getOthers().put("should_pay",p.getShould_pay()==null?"":Integer.toString(p.getShould_pay()*100)); _p.getOthers().put("real_pay",p.getReal_pay()==null?"":Integer.toString(p.getReal_pay()*100)); _p.getOthers().put("tariff_id",p.getTariff_id()); _p.getOthers().put("months",p.getMonths()==null?"":Integer.toString(p.getMonths())); _p.getOthers().put("force_select",p.getForce_select()); _p.getOthers().put("bind_prod_id",p.getBind_prod_id()); if(groupmap.get(p.getProd_id())!=null){ targeg = new LinkedList<TreeNode>(); for(ResGroupDto r: groupmap.get(p.getProd_id())){ _g = new TreeNode(); _g.setId(r.getGroup_id()+"_"+p.getProd_id()+"_"+p.getUser_no()); _g.setText(r.getGroup_name()+(r.getRes_number()==0?"":"_可选数:"+r.getRes_number())); _g.getOthers().put("type","GROUP"); _g.getOthers().put("group_id",r.getGroup_id()); _g.getOthers().put("res_number",r.getRes_number()==0?"":Integer.toString(r.getRes_number())); //可选数量 if(resmap.get(r.getGroup_id())!=null){ targer = new LinkedList<TreeNode>(); for(PRes res:resmap.get(r.getGroup_id())){ _r = new TreeNode(); _r.setId(res.getRes_id()+"_"+res.getGroup_id()+"_"+p.getUser_no()); _r.setText(res.getRes_name()); _r.setChecked(false); _r.setLeaf(true); _r.getOthers().put("type","RES"); _r.getOthers().put("res_id",res.getRes_id()); targer.add(_r); } _g.setChildren(targer); } targeg.add(_g); } _p.setChildren(targeg); }else{ _p.setLeaf(true); } if(p.getForce_select().equals("T")){ // _p.setLeaf(true); // _p.setDisabled(true); // _p.setChecked(true); }else{ _p.setChecked(false); } targep.add(_p); } } _t.setChildren(targep); // _t.getOthers().put("type", v.getOptr_id()); // _t.getOthers().put("countyId", v.getCounty_id()); target.add(_t); } if(promFeeProds.size()==0){ PromFeeProdDto dto = new PromFeeProdDto(); dto.setUser_name_text("用户条件不符合!"); promFeeProds.add(dto); } //客户宽带产品与套餐中的宽带产品进行比较,如果套餐中的宽带产品客户未订购,不能进行套餐缴费 Boolean key = false; String bandStr = ""; List<CProdDto> list = userProdComponent.queryAllProdAcct(custId,cust.getCounty_id()); Map<String,List<CProdDto>> custBandProdmap = CollectionHelper.converToMap(list, "serv_id"); List<String> cBandProds = CollectionHelper.converValueToList(custBandProdmap.get("BAND"), "prod_id"); //宽带自动匹配 cBandProds.add("BAND"); Map<String,List<PromFeeProdDto>> pBandProdmap = CollectionHelper.converToMap(promProdList, "serv_id"); if(pBandProdmap.get("BAND") != null){ for(PromFeeProdDto dto:pBandProdmap.get("BAND")){ if(!cBandProds.contains(dto.getProd_id())){ key = true; bandStr=dto.getProd_name(); break; } } } if(key){ promFeeProds.clear(); PromFeeProdDto dto = new PromFeeProdDto(); dto.setUser_name_text("该套餐中的宽带产品:"+bandStr+",客户未订购!"); promFeeProds.add(dto); target = new LinkedList<TreeNode>(); } resultProds.setUserList(promFeeProds); resultProds.setPromTree(target); return resultProds; } public Pager<UserDto> queryUserInfoToCallCenter(Map<String ,Object> params, Integer start, Integer limit) throws Exception { return userComponent.queryUserInfoToCallCenter(new Pager<Map<String ,Object>>(params , start, limit)); } public List<TServerRes> queryZteBandRes() throws Exception { return prodComponent.queryZteBandRes(); } public void setUserComponent(UserComponent userComponent) { this.userComponent = userComponent; } public void setUserProdComponent(UserProdComponent userProdComponent) { this.userProdComponent = userProdComponent; } public void setProdComponent(ProdComponent prodComponent) { this.prodComponent = prodComponent; } public void setUserPromComponent(UserPromComponent userPromComponent) { this.userPromComponent = userPromComponent; } public void setCustComponent(CustComponent custComponent) { this.custComponent = custComponent; } /** * @param expressionUtil the expressionUtil to set */ public void setExpressionUtil(ExpressionUtil expressionUtil) { this.expressionUtil = expressionUtil; } }