package com.ycsoft.business.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ycsoft.beans.core.cust.CCust; import com.ycsoft.beans.core.cust.CCustLinkman; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.prod.PProd; import com.ycsoft.business.commons.pojo.BusiParameter; import com.ycsoft.business.dao.core.user.CUserDao; import com.ycsoft.business.dao.prod.PProdDao; import com.ycsoft.business.dto.core.cust.CustOTTMobile; import com.ycsoft.business.dto.core.prod.OrderProd; import com.ycsoft.business.dto.core.user.UserLoginPwd; import com.ycsoft.business.service.IAccountService; import com.ycsoft.commons.constants.StatusConstants; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.exception.ServicesException; import com.ycsoft.commons.helper.DateHelper; import com.ycsoft.commons.helper.StringHelper; @Service public class AccountService extends OrderService implements IAccountService { @Autowired private CUserDao cUserDao; @Autowired private PProdDao pProdDao; public List<UserLoginPwd> createOttMobile(CustOTTMobile custOtt) throws Exception { Integer doneCode = doneCodeComponent.gDoneCode(); BusiParameter busiParamter = getBusiParam(); String custNamePrefix = custOtt.getCust_name_prefix(); int custNum = custOtt.getCust_number(); //开客户数量 int userCount = userComponent.countLikeLoginName(custNamePrefix) + 1; //前缀开头的账号数 //名称前缀后跟数字以0开头,计算最大数 int userDigit = String.valueOf(userCount + custNum).length(); int zeroNum = String.valueOf(custNum).length(); //需要的最大数和开户数 位数比较 int sumNum = ( (zeroNum > userDigit) ? zeroNum : userDigit ) + 1; List<UserLoginPwd> list = new ArrayList<UserLoginPwd>(); for(int i=0; i < custNum; i++){ UserLoginPwd userLoginPwd = new UserLoginPwd(); //不足补零 String loginName = custNamePrefix + StringHelper.leftWithZero( String.valueOf(userCount), sumNum ); userCount += 1; //后缀跟数字自增1 if(userComponent.queryUserByLoginName(loginName) != null){ // throw new ServicesException("账号已存在!"); custNum += 1; //账号存在,后缀+1继续生成,直到不存在为止 continue; } String password = String.valueOf( 100000 + new Random(System.currentTimeMillis()).nextInt(900000) ); userLoginPwd.setLogin_name(loginName); userLoginPwd.setPassword( password ); list.add(userLoginPwd); CCust cust = new CCust(); cust.setCust_name( loginName ); cust.setCust_type(SystemConstants.CUST_TYPE_RESIDENT); cust.setStatus(StatusConstants.ACTIVE); cust.setAddr_id(custOtt.getAddr_id()); cust.setAddress(custOtt.getAddress()); cust.setNote(custOtt.getNote()); cust.setNet_type("CITY"); cust.setCust_level(SystemConstants.CUST_LEVEL_YBKH); cust.setIs_black(SystemConstants.BOOLEAN_FALSE); cust.setPassword( password ); CCustLinkman linkman = new CCustLinkman(); linkman.setMail_address(custOtt.getAddress()); custComponent.createCust(cust, linkman, SystemConstants.OTT_MOBILE_CUSTCODE); String custId = cust.getCust_id(); acctComponent.createAcct(custId, null, SystemConstants.ACCT_TYPE_PUBLIC, null); String userId = userComponent.gUserId(); CUser user = new CUser(); user.setCust_id(custId); user.setUser_id(userId); user.setUser_type(SystemConstants.USER_TYPE_OTT_MOBILE); user.setAcct_id(acctComponent.gAcctId()); user.setStatus(StatusConstants.ACTIVE); user.setStatus_date(new Date()); user.setOpen_time(new Date()); user.setTerminal_type(SystemConstants.USER_TERMINAL_TYPE_ZZD); user.setIs_rstop_fee(SystemConstants.BOOLEAN_FALSE); user.setArea_id(cust.getArea_id()); user.setCounty_id(cust.getCounty_id()); user.setLogin_name(loginName); user.setPassword(cust.getPassword()); cUserDao.save(user); createUserJob(user, custId, doneCode); OrderProd orderProd = new OrderProd(); orderProd.setCust_id(custId); orderProd.setUser_id(userId); orderProd.setProd_id(custOtt.getProd_id()); orderProd.setTariff_id(custOtt.getTariff_id()); orderProd.setEff_date(DateHelper.parseDate(DateHelper.formatNow(), "yyyy-MM-dd")); orderProd.setExp_date(custOtt.getInvalid_date()); orderProd.setPay_fee(0); orderProd.setTransfer_fee(0); Date effDate = orderProd.getEff_date(); Date expDate = DateHelper.addDate(orderProd.getExp_date(), 1); int diffMonths = DateHelper.getDiffMonth(effDate, expDate); float days = DateHelper.getDiffDays(effDate, DateHelper.addTypeDate(expDate, "MONTH", diffMonths*-1)); float months = (float)diffMonths; float num = days/30f + months; float orderMonths = (float)(Math.round(num*Math.pow(10,2))/Math.pow(10,2)); orderProd.setOrder_months(orderMonths); saveOrderProd(orderProd, busiParamter.getBusiCode(), doneCode); List<String> userIdList = new ArrayList<String>(); userIdList.add(userId); doneCodeComponent.saveDoneCodeDetail(doneCode, custId, userIdList); } doneCodeComponent.saveDoneCode(doneCode, busiParamter.getBusiCode(), custOtt.getAddr_id()); return list; } public List<PProd> queryOTTMobileFreeProd() throws Exception { return pProdDao.queryFeeOrderUserProd(SystemConstants.USER_TYPE_OTT_MOBILE); } }