package com.ycsoft.business.component.core; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ycsoft.beans.config.TCustColonyCfg; import com.ycsoft.beans.config.TDeviceChangeReason; import com.ycsoft.beans.core.common.CDoneCode; import com.ycsoft.beans.core.common.CDoneCodeDetail; import com.ycsoft.beans.core.cust.CCust; import com.ycsoft.beans.core.cust.CCustDevice; import com.ycsoft.beans.core.job.JUserStop; import com.ycsoft.beans.core.prod.CProdOrderFee; import com.ycsoft.beans.core.promotion.CPromFee; import com.ycsoft.beans.core.promotion.CPromProdRefund; import com.ycsoft.beans.core.user.CRejectRes; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.core.user.CUserBroadband; import com.ycsoft.beans.core.user.CUserDtv; import com.ycsoft.beans.core.user.CUserHis; import com.ycsoft.beans.core.user.CUserPropChange; import com.ycsoft.beans.core.user.CUserStb; import com.ycsoft.beans.device.RModemModel; import com.ycsoft.beans.device.RStbModel; import com.ycsoft.beans.prod.PPromFee; import com.ycsoft.beans.prod.PPromFeeUser; import com.ycsoft.beans.prod.PRes; import com.ycsoft.beans.prod.PSpkgOpenbusifee; import com.ycsoft.beans.prod.PSpkgOpenuser; import com.ycsoft.beans.system.SOptr; import com.ycsoft.business.commons.abstracts.BaseBusiComponent; import com.ycsoft.business.component.config.ExpressionUtil; import com.ycsoft.business.dao.config.TCustColonyCfgDao; import com.ycsoft.business.dao.config.TDeviceChangeReasonDao; import com.ycsoft.business.dao.core.cust.CCustDao; import com.ycsoft.business.dao.core.cust.CCustDeviceDao; import com.ycsoft.business.dao.core.job.JUserStopDao; import com.ycsoft.business.dao.core.prod.CProdOrderFeeDao; import com.ycsoft.business.dao.core.promotion.CPromFeeDao; import com.ycsoft.business.dao.core.promotion.CPromProdRefundDao; import com.ycsoft.business.dao.core.promotion.CPromotionDao; import com.ycsoft.business.dao.core.user.CRejectResDao; import com.ycsoft.business.dao.core.user.CUserAtvDao; import com.ycsoft.business.dao.core.user.CUserBroadbandDao; import com.ycsoft.business.dao.core.user.CUserDtvDao; import com.ycsoft.business.dao.core.user.CUserHisDao; import com.ycsoft.business.dao.prod.PPromFeeDao; import com.ycsoft.business.dao.prod.PPromFeeProdDao; import com.ycsoft.business.dao.prod.PPromFeeUserDao; import com.ycsoft.business.dao.prod.PSpkgDao; import com.ycsoft.business.dao.prod.PSpkgOpenbusifeeDao; import com.ycsoft.business.dao.prod.PSpkgOpenuserDao; import com.ycsoft.business.dao.resource.device.RDeviceDao; import com.ycsoft.business.dao.resource.device.RModemModelDao; import com.ycsoft.business.dao.resource.device.RStbModelDao; import com.ycsoft.business.dao.system.SOptrDao; import com.ycsoft.business.dto.core.bill.UserBillDto; import com.ycsoft.business.dto.core.prod.CPromotionDto; import com.ycsoft.business.dto.core.prod.PromFeeProdDto; import com.ycsoft.business.dto.core.user.ChangedUser; import com.ycsoft.business.dto.core.user.UserDto; import com.ycsoft.commons.constants.DictKey; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.exception.ComponentException; import com.ycsoft.commons.exception.ServicesException; import com.ycsoft.commons.helper.BeanHelper; import com.ycsoft.commons.helper.CollectionHelper; import com.ycsoft.commons.helper.DateHelper; import com.ycsoft.commons.helper.StringHelper; import com.ycsoft.commons.store.MemoryDict; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.daos.core.Pager; import com.ycsoft.sysmanager.dto.prod.ResGroupDto; /** * 用户组件 */ @Component public class UserComponent extends BaseBusiComponent { private CUserHisDao cUserHisDao; private CUserAtvDao cUserAtvDao; private CUserDtvDao cUserDtvDao; private CUserBroadbandDao cUserBroadbandDao; private SOptrDao sOptrDao; private CRejectResDao cRejectResDao; private JUserStopDao jUserStopDao; private CPromotionDao cPromotionDao; private CCustDao cCustDao; private PPromFeeDao pPromFeeDao; private PPromFeeUserDao pPromFeeUserDao; private PPromFeeProdDao pPromFeeProdDao; private CPromProdRefundDao cPromProdRefundDao; private RDeviceDao rDeviceDao; private CPromFeeDao cPromFeeDao; private TCustColonyCfgDao tCustColonyCfgDao; private ExpressionUtil expressionUtil ; @Autowired private RStbModelDao rStbModelDao; @Autowired private RModemModelDao rModemModelDao; @Autowired private CCustDeviceDao cCustDeviceDao; @Autowired private CProdOrderFeeDao cProdOrderFeeDao; @Autowired private TDeviceChangeReasonDao tDeviceChangeReasonDao; @Autowired private PSpkgDao pSpkgDao; @Autowired private PSpkgOpenuserDao pSpkgOpenuserDao; @Autowired private PSpkgOpenbusifeeDao pSpkgOpenbusifeeDao; public List<TDeviceChangeReason> queryDeviceChangeReason() throws Exception{ return tDeviceChangeReasonDao.findAll(); } public Map<String,CUser> queryUserMap(String cust_id) throws Exception{ return CollectionHelper.converToMapSingle(cUserDao.queryUserByCustId(cust_id), "user_id"); } /** * 创建用户 * @param user * @return * @throws Exception */ public CUser createUser(CUser user) throws Exception { //DTT,OTT用户没有机顶盒号、宽带用户没有MAC if (((user.getUser_type().equals(SystemConstants.USER_TYPE_DTT) || user.getUser_type().equals(SystemConstants.USER_TYPE_OTT)) && StringHelper.isEmpty(user.getStb_id())) || (user.getUser_type().equals(SystemConstants.USER_TYPE_BAND) && StringHelper.isEmpty(user.getModem_mac()))) user.setStatus(StatusConstants.INSTALL); else user.setStatus(StatusConstants.ACTIVE); user.setIs_rstop_fee(isStopFee()); setBaseInfo(user); cUserDao.save(user); return user; } private void decideFreeUser(CUserDtv dtv) throws JDBCException { /* // 客户允许有2个免费副机 List<CUser> users = queryUserByCustId(dtv.getCust_id()); if (dtv.getTerminal_type().equals( SystemConstants.USER_TERMINAL_TYPE_FZD)) { int freenum = 0; for (CUser u : users) { if (u.getUser_type().equals(PROD_SERV_ID_DTV) && "T".equals(u.getStr19())) freenum++; } if ( "T".equals(dtv.getStr19()) && freenum > 1) dtv.setStr19("F"); } else { dtv.setStr19("F"); } */ } public String queryLastStatus(String userId) throws Exception{ CUserPropChange upc = cUserPropChangeDao.queryLastStatus(userId, getOptr().getCounty_id()); if(null == upc) return null; return upc.getOld_value(); } /** * 删除用户信息 * @param doneCode * @param user * @throws Exception */ public void removeUserWithHis( Integer doneCode ,CUser user) throws Exception{ CUserHis userHis = new CUserHis(); userHis.setDone_code(doneCode); BeanUtils.copyProperties(user, userHis); userHis.setStatus(StatusConstants.INVALID); userHis.setStatus_date(DateHelper.now()); // if (user.getUser_type().equals(SystemConstants.USER_TYPE_DTV)) // userHis.setNeed_check("T"); // else userHis.setNeed_check("F"); cUserHisDao.save(userHis); // if (user.getUser_type().equals(SystemConstants.USER_TYPE_ATV)){ // CUserAtv atv = cUserAtvDao.findByKey(user.getUser_id()); // CUserAtvHis atvHis = new CUserAtvHis(); // BeanUtils.copyProperties(atv, atvHis); // atvHis.setDone_code(doneCode); // cUserAtvHisDao.save(atvHis); // } else if (user.getUser_type().equals(SystemConstants.USER_TYPE_DTV)){ // CUserDtv dtv = cUserDtvDao.findByKey(user.getUser_id()); // CUserDtvHis dtvHis = new CUserDtvHis(); // BeanUtils.copyProperties(dtv, dtvHis); // dtvHis.setDone_code(doneCode); // cUserDtvHisDao.save(dtvHis); // } else if (user.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){ // CUserBroadband band = cUserBroadbandDao.findByKey(user.getUser_id()); // CUserBroadbandHis bandHis = new CUserBroadbandHis(); // BeanUtils.copyProperties(band, bandHis); // bandHis.setDone_code(doneCode); // cUserBroadbandHisDao.save(bandHis); // } removeUserWithoutHis(user.getUser_id()); } public void removeUserWithoutHis(String userId) throws Exception{ cUserDao.remove(userId); cUserAtvDao.remove(userId); cUserDtvDao.remove(userId); cUserBroadbandDao.remove(userId); } /** * @param cardId */ public void updateUserCheckFlag(String cardId) throws Exception{ this.cUserHisDao.updateCheckFlag(cardId); } /** * 根据客户ID,获取符合条件用户的集合 * @param cust */ public List<CUser> queryUserByCustId(String custId) throws JDBCException { List<CUser> users= cUserDao.queryUserByCustId(custId); fillUserName(users); return users; } /** * 查询正常和施工中的用户清单 * @param custId * @return */ public List<CUser> queryCanSelectByCustId(String custId)throws JDBCException { List<CUser> users=cUserDao.queryCanSelectUserByCustId(custId); fillUserName(users); return users; } /** * @param custId * @return */ public List<CUserStb> queryUserStbByCustId(String custId) throws JDBCException, ServicesException { return cUserDao.queryUserStbByCustId(custId); } /** * @param userId * @return */ public CUserStb queryUserStbByUserId(String userId) throws JDBCException { return cUserDao.queryUserStbByUserId(userId); } public List<CUser> queryUserByCustIds(String[] custIds) throws Exception{ return cUserDao.queryUserByCustIds(custIds); } public List<CUser> queryUserHisByCustId(String custId) throws JDBCException { List<CUser> users= new ArrayList<CUser>(); users.addAll(cUserAtvDao.queryAtvHisByCustId(custId)); users.addAll(cUserDtvDao.queryDtvHisByCustId(custId)); users.addAll(cUserBroadbandDao.queryBandHisByCustId(custId)); fillUserName(users); return users; } /** * 根据客户ID,获取符合条件用户的集合 * @param cust */ public List<UserDto> queryUser(String custId) throws Exception { List<UserDto> result = new ArrayList<UserDto>(); List<CUser> users = queryUserByCustId(custId); List<JUserStop> stopList = jUserStopDao.findAll(); Map<String,List<JUserStop>> stopmap = CollectionHelper.converToMap(stopList, "user_id"); for (CUser user :users){ UserDto userdto = new UserDto(); BeanUtils.copyProperties(user, userdto); List<JUserStop> stoplist = stopmap.get(user.getUser_id()); if(stoplist!=null){ userdto.setStop_date(stoplist.get(0).getStop_date()); } if(userdto.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){ if(StringHelper.isNotEmpty(userdto.getModem_mac())){ RModemModel modemModel = rModemModelDao.queryByModemMac(userdto.getModem_mac()); if(modemModel != null){ userdto.setDevice_model(modemModel.getDevice_model()); userdto.setDevice_model_text(modemModel.getModel_name()); } CCustDevice custDevice = cCustDeviceDao.queryCustDeviceByDeviceCode(userdto.getCust_id(), userdto.getModem_mac()); if(custDevice != null){ userdto.setBuy_model(custDevice.getBuy_mode()); userdto.setBuy_model_text(custDevice.getBuy_mode_text()); } } }else{ if(StringHelper.isNotEmpty(userdto.getStb_id())){ RStbModel stbModel = rStbModelDao.queryByStbId(userdto.getStb_id()); if(stbModel != null){ userdto.setDevice_model(stbModel.getDevice_model()); userdto.setDevice_model_text(stbModel.getModel_name()); } CCustDevice custDevice = cCustDeviceDao.queryCustDeviceByDeviceCode(userdto.getCust_id(), userdto.getStb_id()); if(custDevice != null){ userdto.setBuy_model(custDevice.getBuy_mode()); userdto.setBuy_model_text(custDevice.getBuy_mode_text()); } } } if(!user.getUser_type().equals(SystemConstants.USER_TYPE_OTT_MOBILE)){ if(StringHelper.isEmpty(userdto.getDevice_model()) && StringHelper.isNotEmpty(user.getStr3())){ userdto.setDevice_model(user.getStr3()); if(user.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){ userdto.setDevice_model_text( MemoryDict.getDictName(DictKey.MODEM_MODEL, user.getStr3()) ); }else{ userdto.setDevice_model_text( MemoryDict.getDictName(DictKey.STB_MODEL, user.getStr3()) ); } } if(StringHelper.isEmpty(userdto.getBuy_model()) && StringHelper.isNotEmpty(user.getStr10())){ userdto.setBuy_model(user.getStr10()); userdto.setBuy_model_text( MemoryDict.getDictName(DictKey.DEVICE_BUY_MODE, user.getStr10()) ); } } result.add(userdto); } return result; } /** * 根据客户ID,获取符合条件销户用户的集合 * @param cust */ public List<UserDto> queryUserHis(String custId) throws JDBCException { List<UserDto> result = new ArrayList<UserDto>(); List<CUser> users = queryUserHisByCustId(custId); for (CUser user :users){ UserDto userdto = new UserDto(); BeanUtils.copyProperties(user, userdto); result.add(userdto); } return result; } public void saveCancelOpenInteractive(String userId,Integer doneCode) throws Exception { /* CUser user = cUserDao.findByKey(userId); CUserDtv dtv = cUserDtvDao.findByKey(userId); List<CUserPropChange> changeList = new ArrayList<CUserPropChange>(); RDevice modem = rDeviceDao.findByDeviceCode(user.getModem_mac()); if (StringHelper.isNotEmpty(user.getModem_mac())){ CUserPropChange change = new CUserPropChange(); change.setColumn_name("modem_mac"); change.setOld_value(user.getModem_mac()); change.setNew_value(""); setBaseInfo(change); change.setUser_id(userId); change.setDone_code(doneCode); change.setChange_time(DateHelper.now()); changeList.add(change); } if (StringHelper.isNotEmpty(user.getNet_type())){ CUserPropChange change = new CUserPropChange(); change.setColumn_name("net_type"); change.setOld_value(user.getNet_type()); change.setNew_value(""); setBaseInfo(change); change.setUser_id(userId); change.setDone_code(doneCode); change.setChange_time(DateHelper.now()); changeList.add(change); } //双向用户类型 if (StringHelper.isNotEmpty(user.getStr11())){ CUserPropChange change = new CUserPropChange(); change.setColumn_name("str11"); change.setOld_value(user.getStr11()); change.setNew_value(""); setBaseInfo(change); change.setUser_id(userId); change.setDone_code(doneCode); change.setChange_time(DateHelper.now()); changeList.add(change); } if (StringHelper.isNotEmpty(dtv.getPassword())){ CUserPropChange change = new CUserPropChange(); change.setColumn_name("password"); change.setOld_value(dtv.getPassword()); change.setNew_value(""); setBaseInfo(change); change.setUser_id(userId); change.setDone_code(doneCode); change.setChange_time(DateHelper.now()); changeList.add(change); } if (dtv.getServ_type().equals(SystemConstants.DTV_SERV_TYPE_DOUBLE)){ CUserPropChange change = new CUserPropChange(); change.setColumn_name("serv_type"); change.setOld_value(dtv.getServ_type()); change.setNew_value(SystemConstants.DTV_SERV_TYPE_SINGLE); setBaseInfo(change); change.setUser_id(userId); change.setDone_code(doneCode); change.setChange_time(DateHelper.now()); changeList.add(change); } user.setNet_type(""); user.setStr11(""); if(modem!= null && SystemConstants.BOOLEAN_FALSE.equals(modem.getIs_virtual())){ //不是虚拟设备 user.setModem_mac(""); } dtv.setPassword(""); dtv.setServ_type(SystemConstants.DTV_SERV_TYPE_SINGLE); cUserDao.update(user); cUserDtvDao.update(dtv); cUserPropChangeDao.save(changeList.toArray(new CUserPropChange[changeList.size()])); */ } /** * 返回userdto * @param userId * @return * @throws JDBCException */ public CUser queryUserById(String userId) throws JDBCException { return cUserDao.findByKey(userId); } /** * 根据用户ID, 查询用户异动信息 * @param userId */ public List<CUserPropChange> queryUserPropChange(String userId,String userType) throws Exception{ List<CUserPropChange> propChangelist = cUserPropChangeDao.queryByUserId(userId,userType, getOptr().getCounty_id()); for(CUserPropChange upc :propChangelist){ upc.setBusi_name( MemoryDict.getTransData( upc.getBusi_name() ) ); upc.setColumn_name_text( MemoryDict.getTransData(upc.getColumn_name_text()) ); if (StringHelper.isNotEmpty(upc.getParam_name())){ upc.setOld_value_text(MemoryDict.getDictName( upc.getParam_name(), upc.getOld_value())); upc.setNew_value_text(MemoryDict.getDictName( upc.getParam_name(), upc.getNew_value())); }else { upc.setOld_value_text( MemoryDict.getTransData( upc.getOld_value() )); upc.setNew_value_text( MemoryDict.getTransData( upc.getNew_value() )); } } return propChangelist; } public Pager<CProdOrderFee> queryOrderFeeDetail(String orderSn, Integer start, Integer limit) throws Exception { return cProdOrderFeeDao.queryOrderFeeDetail(orderSn, start, limit); } /** * @param userId * @param doneCode * @return */ public List<CUserPropChange> queryPropChangeByDoneCode(String userId,Integer doneCode) throws Exception{ return cUserPropChangeDao.queryByDoneCode(userId, doneCode,getOptr().getCounty_id()); } /** * 修改用户设备信息 * @param userId */ public void updateDevice(Integer doneCode,CUser user) throws Exception { CUser oldUser = cUserDao.findByKey(user.getUser_id()); String[] propNames = {"stb_id","card_id","modem_mac", "str10"}; List<CUserPropChange> upcList = new ArrayList<CUserPropChange>(); for (String propName:propNames){ String oldValue = BeanHelper.getPropertyString(oldUser, propName); String newValue = BeanHelper.getPropertyString(user, propName); oldValue = (oldValue == null) ? "" : oldValue; newValue = (newValue == null) ? "" : newValue; if (!oldValue.equals(newValue)){ CUserPropChange upc = new CUserPropChange(); upc.setUser_id(user.getUser_id()); upc.setDone_code(doneCode); upc.setColumn_name(propName); upc.setOld_value(BeanHelper.getPropertyString(oldUser, propName)); upc.setNew_value(BeanHelper.getPropertyString(user, propName)); setBaseInfo(upc); upcList.add(upc); } } //修改用户信息 cUserDao.update(user); //记录异动 cUserPropChangeDao.save(upcList.toArray(new CUserPropChange[upcList.size()])); } /** * 设置用户名信息 * 模拟用户不需要设置 * 数字用户为终端类型 * 宽带用户为宽带帐号 * @param records */ public void fillUserName(List<CUser> records) { for( CUser user :records){ user.setUser_name(getFillUserName(user)); } } /** * 根据设备号查询用户 * @param deviceType * @param deviceCode * @return */ public List<CUser> queryUserByDevice(String deviceType, String deviceCode) throws JDBCException, ComponentException { List<CUser> user = null; if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB)) user = cUserDao.queryUserByStbId(deviceCode); else if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)) user = cUserDao.queryUserByCardId(deviceCode); else if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)) user = cUserDao.queryUserByModemId(deviceCode); else throw new ComponentException("无效的设备类型" + deviceType); return user; } /** * 更新用户设备信息 * * @param userId * @param deviceType * @param deviceCode * @throws JDBCException * @throws ComponentException */ public void updateDevice(String userId, String deviceType, String deviceCode) throws JDBCException, ComponentException { if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB)) cUserDao.updateDevice(userId, "", null, null); else if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD)) cUserDao.updateDevice(userId, null,"", null); else if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM)) cUserDao.updateDevice(userId, null, null,""); else throw new ComponentException("无效的设备类型" + deviceType); } /** * @param userId * @param doneCode */ public void removeUserPropChange(String userId, Integer doneCode) throws Exception{ cUserPropChangeDao.removeByDoneCode( userId, doneCode,getOptr().getCounty_id()); } /** * 保存用户排斥的资源 * @param userId * @param custId * @param resIds * @throws Exception */ public void saveRejectRes(String userId,String custId,String resIds) throws Exception { cRejectResDao.deleteByUserIdAndCustId(userId, custId); if(StringHelper.isNotEmpty(resIds)){ String[] resIdsArr = resIds.split(","); List<CRejectRes> list = new ArrayList<CRejectRes>(); for(String resId : resIdsArr){ CRejectRes res = new CRejectRes(); res.setUser_id(userId); res.setCust_id(custId); res.setRes_id(resId); list.add(res); } cRejectResDao.save(list.toArray(new CRejectRes[list.size()])); } } /** * 获取用户id */ public String gUserId() throws Exception { return cUserDao.findSequence().toString(); } /** * 部门下的是所有操作员 * @param deptId * @return * @throws JDBCException */ public List<SOptr> getByDeptId(String deptId) throws JDBCException { return sOptrDao.getByDeptId(deptId); } public CUserBroadband queryBandByDeviceId(String deviceCode) throws JDBCException{ return cUserBroadbandDao.queryBandByDeviceId(deviceCode); } public UserDto queryUserByDeviceId(String deviceId) throws JDBCException{ List<CUser> users= new ArrayList<CUser>(); CUser dtv = cUserDtvDao.queryDtvByDeviceId(deviceId); if (dtv!=null) users.add(dtv); CUser broadband = cUserBroadbandDao.queryBandByDeviceId(deviceId); if (broadband!=null) users.add(broadband); fillUserName(users); UserDto userdto = null; if (users.size()>0){ userdto = new UserDto(); BeanUtils.copyProperties(users.get(0), userdto); } return userdto; } /** * @param loginName * @param countyId * @return */ public CUser queryUserByLoginName(String loginName) throws Exception { return cUserDao.queryUserByLoginName(loginName); } /** * @param userId * @return */ public List<CPromotionDto> queryUserPromotion(String userId) throws Exception { return cPromotionDao.queryUserPromotion(userId,getOptr().getCounty_id()); } public List<CPromotionDto> queryPromotionCanCancel(String userId, String prodId) throws Exception { List<CPromotionDto> list = new ArrayList<CPromotionDto>(); List<CPromotionDto> result = new ArrayList<CPromotionDto>(); /* list = cPromotionDao.queryPromotionCanCancel(userId,getOptr().getCounty_id()); Date now = new Date(); Map<String, List<CPromotionDto>> mapKeyByProdId = CollectionHelper.converToMap(list, "user_id"); List<CPromotionDto> list2 = mapKeyByProdId.get(prodId); if(!CollectionHelper.isEmpty(list2)){ CPromotionDto promotion = list2.get(0); if(promotion.getStatus().equals(StatusConstants.ACTIVE)){ String promotionId = promotion.getPromotion_id(); Map<String, List<CPromotionDto>> mapKeyByPromotion = CollectionHelper.converToMap(list, "promotion_id"); List<CPromotionDto> list3 = mapKeyByPromotion.get(promotionId); for(CPromotionDto dto:list3){ Date createDate = dto.getCreate_time(); if(createDate.getYear() == now.getYear() && createDate.getMonth() == now.getMonth()){ result.add(dto); } } } } */ String [] regs = new String [] {"sumPayFee(\"" + prodId + "\"" ,"ACCTITEM_"+prodId ,"acctitem("+prodId ,"(acctitem_id=\""+prodId+"\"" ,"payMonthsOfToday(\""+prodId+"\""}; //查找本身是触发促销的条件的, // if(CollectionHelper.isEmpty(result)){ list = cPromotionDao.queryPromotionCanCancelAsCondition(userId,prodId,getOptr().getCounty_id()); Map<String, List<CPromotionDto>> mapKeyByRuleStr = CollectionHelper.converToMap(list, "promotion_sn");// rule_id的假名 //数目不多,一个嵌套循环问题不大 for(String ruleId:mapKeyByRuleStr.keySet()){ List<CPromotionDto> list3 = mapKeyByRuleStr.get(ruleId); String ruleStr = null; if(CollectionHelper.isNotEmpty(list3)){ ruleStr = list3.get(0).getIs_necessary(); for(String reg:regs){ if(ruleStr.indexOf(reg)>=0){ result.clear(); result.addAll(list3); } } } } // } return result; } /** * @param countyId * @return */ public List<ChangedUser> queryChangedUserInfo(String beginDate, String endDate,String countyId) throws JDBCException { List<ChangedUser> userList = new ArrayList<ChangedUser>(); if(StringHelper.isNotEmpty(beginDate)){ if(StringHelper.isEmpty(endDate)){ endDate = DateHelper.formatNow(); } // List<ChangedUser> addedUsers = cUserDao.queryAddedUsers(beginDate,endDate,countyId); List<ChangedUser> modifiedUsers = cUserDao.queryModifiedUsers(beginDate,endDate,countyId); // List<ChangedUser> deletedUsers = cUserDao.queryDeletedUsers(beginDate,endDate,countyId); // userList.addAll(addedUsers); userList.addAll(modifiedUsers); // userList.addAll(deletedUsers); }/*else{ userList = cUserDao.queryChangedUserInfo(countyId); }*/ return userList; } /** * @param deviceId * @param returnTvRecordCount * @param returnVodRecordCount * @return */ public List<UserBillDto> queryUserBill(String deviceId, Integer returnTvRecordCount, Integer returnVodRecordCount) throws Exception { return cUserDao.queryUserBill(deviceId,returnTvRecordCount,returnVodRecordCount,getOptr().getCounty_id()); } public List<CUser> queryUserByCustNo(String custNo) throws Exception{ CCust cust = cCustDao.queryCustFullInfo("CUST_NO", custNo, "1=1"); List<CUser> userList = queryUserByCustId(cust.getCust_id()); fillUserName(userList); return userList; } public List<CUser> queryUserByUserIds(List<String> userIds) throws Exception{ return cUserDao.queryUserByUserIds(userIds.toArray(new String[userIds.size()])); } public List<CUser> queryAllUserByUserIds(String[] userIds) throws JDBCException { List<CUser> users = cUserDao.queryUserByUserIds(userIds); fillUserName(users); return users; } public List<CUser> queryAllUserHisByUserIds(String[] userIds) throws JDBCException { List<CUser> users = cUserHisDao.queryAllUserHisByUserIds(userIds); fillUserName(users); return users; } public void updateUserStatus(List<CUser> userList, List<CUserPropChange> upcList, List<CDoneCode> dcList, List<CDoneCodeDetail> dcdList) throws Exception { cUserDao.update(userList.toArray(new CUser[userList.size()])); cUserPropChangeDao.save(upcList.toArray(new CUserPropChange[upcList.size()])); cDoneCodeDao.save(dcList.toArray(new CDoneCode[dcList.size()])); cDoneCodeDetailDao.save(dcdList.toArray(new CDoneCodeDetail[dcdList.size()])); } /** * @param doneCode * @param busiCode * @param oldUser * @param newCustId * @param newUserId * @param forceAsZZD 强制将所有的设置为主终端. * @throws Exception */ public void updateUser(Integer doneCode, String busiCode, CUser oldUser, String newCustId, String newUserId,boolean forceAsZZD) throws Exception { // CUser newUser = new CUser(); // BeanUtils.copyProperties(oldUser, newUser); // newUser.setUser_id(newUserId); // newUser.setCust_id(newCustId); // newUser.setUser_name(forceAsZZD?"主终端":oldUser.getUser_name()); // cUserDao.save(newUser); // // List<CUserPropChange> changeList = new ArrayList<CUserPropChange>(); // CUserPropChange change = new CUserPropChange(); // // String oldUserId = oldUser.getUser_id(); // String oldCustId = oldUser.getCust_id(); // String userType = oldUser.getUser_type(); // if(userType.equals(SystemConstants.USER_TYPE_DTV)){ // CUserDtv oldUserDtv = cUserDtvDao.findByKey(oldUserId); // CUserDtv newUserDtv = new CUserDtv(); // BeanUtils.copyProperties(oldUserDtv, newUserDtv); // newUserDtv.setUser_id(newUserId); // // if(!oldUserDtv.getTerminal_type().equals(SystemConstants.USER_TERMINAL_TYPE_ZZD) && forceAsZZD ){// // change = new CUserPropChange(); // change.setDone_code(doneCode); // change.setUser_id(newUserId); // change.setColumn_name("terminal_type"); // change.setOld_value(oldUserDtv.getTerminal_type()); // change.setNew_value(SystemConstants.USER_TERMINAL_TYPE_ZZD); // change.setBusi_code(busiCode); // setBaseInfo(change); // changeList.add(change); // } // if(forceAsZZD){ // newUserDtv.setTerminal_type(SystemConstants.USER_TERMINAL_TYPE_ZZD); // } // cUserDtvDao.save(newUserDtv); // } else if(userType.equals(SystemConstants.USER_TYPE_ATV)){ // CUserAtv oldUserAtv = cUserAtvDao.findByKey(oldUserId); // CUserAtv newUserAtv = new CUserAtv(); // BeanUtils.copyProperties(oldUserAtv, newUserAtv); // newUserAtv.setUser_id(newUserId); // newUserAtv.setTerminal_type(SystemConstants.USER_TERMINAL_TYPE_ZZD); // cUserAtvDao.save(newUserAtv); // } else if(userType.equals(SystemConstants.USER_TYPE_BAND)){ // CUserBroadband oldUserBand = cUserBroadbandDao.findByKey(oldUserId); // CUserBroadband newUserBand = new CUserBroadband(); // BeanUtils.copyProperties(oldUserBand, newUserBand); // newUserBand.setUser_id(newUserId); // cUserBroadbandDao.save(newUserBand); // } // // change.setDone_code(doneCode); // change.setUser_id(newUserId); // change.setColumn_name("user_id"); // change.setOld_value(oldUserId); // change.setNew_value(newUserId); // change.setBusi_code(busiCode); // setBaseInfo(change); // changeList.add(change); // // change = new CUserPropChange(); // change.setDone_code(doneCode); // change.setUser_id(newUserId); // change.setColumn_name("cust_id"); // change.setOld_value(oldCustId); // change.setNew_value(newCustId); // change.setBusi_code(busiCode); // setBaseInfo(change); // changeList.add(change); // // cUserPropChangeDao.save(changeList.toArray(new CUserPropChange[changeList.size()])); // // jUserStopDao.updateByUserId(oldUserId, newUserId); // // cUserDao.updateProdInclude(oldUserId, oldCustId, newUserId, newCustId); // // this.removeUserWithHis(doneCode, oldUser); } public void updateUser(CUser user) throws Exception { cUserDao.update(user); } /** * 加一点说明,以前的要求就是所有的都修改为主终端. * @param doneCode * @param busiCode * @param oldUser * @param newCustId * @param newUserId * @throws Exception */ public void updateUser(Integer doneCode, String busiCode, CUser oldUser, String newCustId, String newUserId) throws Exception { updateUser(doneCode, busiCode, oldUser, newCustId, newUserId,true); } public void renewUser(Integer doneCode, String userId) throws Exception { CUser user = cUserDao.findByKey(userId); CUserPropChange upc = cUserPropChangeDao.queryLastStatus(userId, getOptr().getCounty_id()); //恢复用户状态,取最近状态异动:如果最近状态异动为报停,则新状态为报停,否则均为正常 String newValue = (upc != null && upc.getOld_value().equals(StatusConstants.REQSTOP)) ? upc.getOld_value() : StatusConstants.ACTIVE; List<CUserPropChange> upcList = new ArrayList<CUserPropChange>(); upc = new CUserPropChange(); upc.setUser_id(userId); upc.setDone_code(doneCode); upc.setColumn_name("status"); upc.setOld_value(user.getStatus()); upc.setNew_value(newValue); setBaseInfo(upc); upcList.add(upc); Date date = new Date(); upc = new CUserPropChange(); upc.setUser_id(userId); upc.setDone_code(doneCode); upc.setColumn_name("status_date"); upc.setOld_value(DateHelper.dateToStr(user.getStatus_date())); upc.setNew_value(DateHelper.dateToStr(date)); setBaseInfo(upc); upcList.add(upc); editUser(doneCode, userId, upcList); } /** * @param userId * @return */ public String queryUserLastStatus(String userId) throws Exception { return cUserPropChangeDao.queryUserLastStatus(userId,getOptr().getCounty_id()); } /** * 查询本地区可用的套餐 * @return */ public List<PPromFee> querySelectablePromPay() throws Exception { return pPromFeeDao.querySelectablePromPay(getOptr().getCounty_id()); } /** * 查询套餐缴费的基本信息. * @param promfeeId * @return * @throws Exception */ public PPromFee queryPromFeeSimpleInfo(String promfeeId) throws Exception{ return pPromFeeDao.findByKey(promfeeId); } /** * 查找上月和当月的有效套餐缴费 * @param userId * @param prodId * @return * @throws JDBCException */ public List<PPromFee> queryIsPromFee(String userId,String prodId) throws JDBCException { return pPromFeeDao.queryIsPromFee(userId,prodId); } /** * 查看该产品属进行的套餐缴费列 * @param userId * @param prodSn * @return * @throws Exception */ public List<CPromProdRefund> querySelectPromFee(String userId,String prodSn) throws Exception { return cPromProdRefundDao.querySelectPromFee(userId,prodSn,getOptr().getCounty_id()); } /** * 根据套餐编号查询套餐 * @param promFeeId * @return * @throws Exception */ public List<PPromFeeUser> queryPromFeeUser(String promFeeId) throws Exception{ return pPromFeeUserDao.queryPromFeeUser(promFeeId); } /** * 根据多个套餐编号查询套餐规则用户 * @param promFeeIds * @return * @throws Exception */ public List<PPromFeeUser> queryPromFeeUser(String[] promFeeIds) throws Exception{ return pPromFeeUserDao.queryPromFeeUser(promFeeIds); } /** * 查询多个套餐信息 * @param promFeeIds * @param custId * @param countyId * @return * @throws Exception */ public List<CPromFee> queryPromFee(String[] promFeeIds,String custId,String countyId) throws Exception{ return cPromFeeDao.queryPromFee(promFeeIds,custId,countyId); } /** * 根据套餐编号查套餐信息 * @param promFeeId * @return * @throws Exception */ public List<PromFeeProdDto> queryPromFeeProds(String promFeeId) throws Exception{ return pPromFeeProdDao.queryPromFeeProds(promFeeId); } /** * 根据多个产品编号查询动态资源组信息 * @param ProdIds * @return * @throws Exception */ public List<ResGroupDto> queryGroupByProdIds(String[] ProdIds)throws Exception { return pPromFeeProdDao.queryGroupByProdIds(ProdIds); } /** * 根据多个资源组编号查询资源信息 * @param resGroupId * @return * @throws Exception */ public List<PRes> queryResByGroupId(String[] resGroupId)throws Exception { return pPromFeeProdDao.queryResByGroupId(resGroupId); } /** * 调用存储过程,批量销用户 * @param userIds */ public void batchLogoffUser(Integer doneCode,String remark,List<String> userIds,String isReclaimDevice,String deviceStatus) throws Exception { cUserDao.batchLogoffUser(doneCode,remark,userIds,isReclaimDevice,deviceStatus,getOptr()); } public Pager<UserDto> queryUserInfoToCallCenter(Pager<Map<String ,Object>> p) throws Exception{ Pager<UserDto> pager = cUserDao.queryUserInfoToCallCenter(p,getOptr().getCounty_id()); List<UserDto> userList = pager.getRecords(); for( UserDto user :userList){ if("DTV".equals(user.getUser_type())){ if (StringHelper.isEmpty(user.getUser_name())) user.setUser_name(MemoryDict.getDictName(DictKey.TERMINAL_TYPE,user.getTerminal_type())); }else if("BAND".equals(user.getUser_type())){ user.setUser_name(user.getLogin_name()); }else if("ATV".equals(user.getUser_type())){ if (StringHelper.isEmpty(user.getUser_name())) user.setUser_name("模拟终端"); } } return pager; } public void addUserCfg(CUser user) throws Exception{ CCust cust = cCustDao.findByKey(user.getCust_id()); String year = String.valueOf(DateHelper.getCurrYear()); List<TCustColonyCfg> cfgList = tCustColonyCfgDao.queryCfg(year,true,true, cust.getCust_colony(),cust.getCust_class(), cust.getCounty_id()); boolean key = false; TCustColonyCfg cfg = new TCustColonyCfg(); for(TCustColonyCfg dto:cfgList){ int num = tCustColonyCfgDao.queryUserNum(year, dto.getCust_colony(), dto.getCust_class(), cust.getCounty_id()); if(dto.getUser_num() == 0 || dto.getUser_num()+1> num){ continue; }else{ key = true; cfg = dto; break; } } if(key){ throw new ComponentException(year+"年份的["+cfg.getCust_colony_text()+"]["+cfg.getCust_class_text()+"]的用户开户限额:["+cfg.getUser_num()+"]已满!"); } } public String queryMinUserId(String custId) throws Exception { return cUserDao.queryMinUserId(custId); } public void changeCust(String userId, String toCustId,Integer doneCode ,String busiCode) throws ServicesException{ this.cUserDao.callChangeCust(userId, toCustId, doneCode, busiCode,this.getOptr()); } public void setCUserAtvDao(CUserAtvDao userAtvDao) { cUserAtvDao = userAtvDao; } public void setCUserDtvDao(CUserDtvDao userDtvDao) { cUserDtvDao = userDtvDao; } /** * @param userBroadbandDao the cUserBroadbandDao to set */ public void setCUserBroadbandDao(CUserBroadbandDao userBroadbandDao) { cUserBroadbandDao = userBroadbandDao; } public void setCUserHisDao(CUserHisDao userHisDao) { cUserHisDao = userHisDao; } public void setSOptrDao(SOptrDao optrDao) { sOptrDao = optrDao; } public void setCRejectResDao(CRejectResDao rejectResDao) { cRejectResDao = rejectResDao; } public void setJUserStopDao(JUserStopDao userStopDao){ jUserStopDao = userStopDao; } public void setCPromotionDao(CPromotionDao promotionDao) { cPromotionDao = promotionDao; } public void setCCustDao(CCustDao custDao) { cCustDao = custDao; } public void setPPromFeeDao(PPromFeeDao pPromFeeDao) { this.pPromFeeDao = pPromFeeDao; } public void setPPromFeeUserDao(PPromFeeUserDao pPromFeeUserDao) { this.pPromFeeUserDao = pPromFeeUserDao; } public void setPPromFeeProdDao(PPromFeeProdDao pPromFeeProdDao) { this.pPromFeeProdDao = pPromFeeProdDao; } public void setRDeviceDao(RDeviceDao deviceDao) { rDeviceDao = deviceDao; } public void setCPromFeeDao(CPromFeeDao cPromFeeDao) { this.cPromFeeDao = cPromFeeDao; } public void setTCustColonyCfgDao(TCustColonyCfgDao custColonyCfgDao) { tCustColonyCfgDao = custColonyCfgDao; } public void setCPromProdRefundDao(CPromProdRefundDao promProdRefundDao) { cPromProdRefundDao = promProdRefundDao; } /** * 查找用户数量 * @param custId * @return */ public Integer queryUserCount(String custId) throws Exception { return cUserDao.queryUserCount(custId); } public TDeviceChangeReason queryChangeReasonByType(String reasonType) throws Exception { return tDeviceChangeReasonDao.queryChangeReasonByType(reasonType); } /** * @param optr_id * @return */ public SOptr queryOptrById(String optr_id) throws Exception{ return sOptrDao.findByKey(optr_id); } public List<PSpkgOpenuser> querySpkgUser(String spkgSn) throws Exception { return pSpkgOpenuserDao.querySpkgUser(spkgSn); } public List<PSpkgOpenbusifee> querySpkgOpenFee(String spkgSn) throws Exception { return pSpkgOpenbusifeeDao.querySpkgOpenFee(spkgSn); } public void updateOpenUserDoneCode(String spkgSn, Integer doneCode) throws Exception{ pSpkgOpenuserDao.updateOpenUserDoneCode(spkgSn, doneCode); } /** * ".用户开户和批量用户开户修改 开宽带用户时,自动生成的宽带账号。密码默认 c_cust.password 生成规则 第一个宽带 cust_no+01+@+域名 第二个宽带 cust_no+02+@+域名 域名提取方法跟 cust_no的序列号一致。 OTT、OTT_MOBILE用户 账号生成规则 : 第一个OTT cust_no+61 第二个OTT cust_no+62" */ public int queryMaxNumByLoginName(String custId, String custNo, String userType) throws Exception { List<String> list = cUserDao.queryLoginNameByUserType(custId, userType); List<Integer> loginNameList = new ArrayList<Integer>(); boolean flag = userType.equals(SystemConstants.USER_TYPE_BAND); for(String loginName : list){ if(flag && loginName.indexOf("@") > 0){ loginName = loginName.substring(0, loginName.indexOf("@")); } if(loginName.length() > custNo.length()){ loginName = loginName.substring(custNo.length()); String regex=".*[a-zA-Z]+.*"; Matcher m=Pattern.compile(regex).matcher(loginName); if(!m.matches()) loginNameList.add( Integer.parseInt(loginName) ); } } if(loginNameList.size() == 0) return 0; return Collections.max(loginNameList); } public boolean validAccount(String name) throws Exception{ return cUserDao.validAccount(name); } public void setExpressionUtil(ExpressionUtil expressionUtil) { this.expressionUtil = expressionUtil; } /** * 变更用户名,需要 设备号 和新的用户名. * @param user * @param custId * @return * @throws Exception */ public int updateUserNameByDeviceCode(CUser user, String custId) throws Exception { return cUserDao.updateUserNameByDeviceCode(user,custId); } public List<CUser> queryAllUserAndHisByUserIds(String[] userIds) throws Exception { List<CUser> list = new ArrayList<CUser>(); List<CUser> userList = cUserDao.queryUserByUserIds(userIds); if(userList.size()>0){ list.addAll(userList); } if(list.size()!=userIds.length){ List<String> userHis = new ArrayList<String>(); List<String> userIdList = CollectionHelper.converValueToList(list, "user_id"); for(int i = 0 ;i<userIds.length;i++){ if(!userIdList.contains(userIds[i])){ userHis.add(userIds[i]); } } if(userHis.size()>0){ List<CUser> userHisList = cUserHisDao.queryAllUserHisByUserIds(userIds); if(userHisList.size()>0){ list.addAll(userHisList); } } } return list; } public List<CUser> queryUserByTaskId(String taskId) throws Exception { return cUserDao.queryTaskUser(taskId); } public int countLikeLoginName(String loginNamePrefix) throws Exception { return cUserDao.countLikeLoginName(loginNamePrefix); } }