package com.ifish.serviceImpl; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.*; import com.ifish.dao.PayBillDao; import com.ifish.entity.*; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import com.ifish.dao.DeviceDao; import com.ifish.dao.FactoryListDao; import com.ifish.dao.OperateRecordDao; import com.ifish.enums.BooleanEnum; import com.ifish.enums.RecordTypeEnum; import com.ifish.enums.SortModeEnum; import com.ifish.hibernate.Pagination; import com.ifish.search.SearchFilter; import com.ifish.service.FactoryService; import com.ifish.util.IfishUtil; /** * @ClassName: FactoryServiceImpl * @Description: TODO * @author ggw * */ @Service("factoryService") @Transactional public class FactoryServiceImpl implements FactoryService { @Autowired private DeviceDao deviceDao; @Autowired private FactoryListDao factoryListDao; @Autowired private OperateRecordDao operateRecordDao; @Autowired private PayBillDao payBillDao; @Override public Map getFactoryByVenderCode(String venderCode) { return factoryListDao.getFactoryByVenderCode(venderCode); } @Override public int getDeviceCountByFactory(String factoryCode) { Calendar calendar = Calendar.getInstance(); String year = String.valueOf(calendar.get(Calendar.YEAR)); String month = (calendar.get(Calendar.MONTH) < 10 ? "0" + calendar.get(Calendar.MONTH) : calendar.get(Calendar.MONTH)) + ""; int count = this.deviceDao.getNumber("SELECT count(1) from tbl_device td where td.is_charge = '0' and td.factory_code = '"+ factoryCode +"' and str_to_date(td.authorize_time,'%Y-%m')='" + year + "-" + month + "-00'"); return count; } @Override public int getDeviceCountByFactory(String factoryCode, String billMonth) { String year = billMonth.split("-")[0]; String month = billMonth.split("-")[1]; int count = this.deviceDao.getNumber("SELECT count(1) from tbl_device td where td.is_charge = '0' and td.factory_code = '"+ factoryCode +"' and str_to_date(td.authorize_time,'%Y-%m')='" + year + "-" + month + "-00'"); return count; } @Override public FactoryList get(String id) { return this.factoryListDao.get(id); } @Override public void savePayBill(PayBill payBill) { payBillDao.save(payBill); } @Override public List getFactoryList() { List queryList = new ArrayList(); List factoryLists = this.factoryListDao.findByProperty(queryList.toArray(new Criterion[queryList.size()])); return factoryLists; } @Override public void uploadExcel(String ip,String factoryCode,String brandCode,MultipartFile fileUpload) { try { InputStream is = fileUpload.getInputStream(); Workbook workbook = Workbook.getWorkbook(is); Sheet sheet = workbook.getSheet(0); //行 int rows = sheet.getRows(); List macList = new ArrayList(); for(int i=1;i < rows;i++){ Cell cell = sheet.getCell(0,i); String value = cell.getContents(); macList.add(value); } List hardTypeList = new ArrayList(); for(int i=1;i < rows;i++){ Cell cell = sheet.getCell(1,i); String value = cell.getContents(); hardTypeList.add(value); } //授权数量 int j = 0; for (int i = 0; i < macList.size(); i++) { String macAddress = macList.get(i); Device device = this.deviceDao.findUniqueByProperty(Restrictions.eq("macAddress", macAddress)); if(device!=null){ VenderList venderList = new VenderList(); venderList.setBrandCode(brandCode); FactoryList factoryList = new FactoryList(); factoryList.setFactoryCode(factoryCode); device.setFactoryList(factoryList); device.setVenderList(venderList); //原来未授权 if(device.getIsBlacklist().equals(BooleanEnum.YES.getKey())){ j++; device.setIsBlacklist(BooleanEnum.NO.getKey()); device.setAuthorizeTime(new Date()); } device.getHardwareType().setHardwareType(hardTypeList.get(i)); device.setCreateDate(new Date()); this.deviceDao.update(device); } else{ j++; device = new Device(); device.setMacAddress(macAddress); VenderList venderList = new VenderList(); venderList.setBrandCode(brandCode); FactoryList factoryList = new FactoryList(); factoryList.setFactoryCode(factoryCode); device.setFactoryList(factoryList); device.setVenderList(venderList); device.setIsBlacklist(BooleanEnum.NO.getKey()); device.setAuthorizeTime(new Date()); device.getHardwareType().setHardwareType(hardTypeList.get(i)); device.setCreateDate(new Date()); device.setCreateTime(new Date()); this.deviceDao.save(device); } //分配 OperateRecord operateRecord = new OperateRecord(); operateRecord.setCreateTime(new Date()); operateRecord.setRecordIp(ip); operateRecord.setRecordNumber(macList.size()); operateRecord.setRecordType(RecordTypeEnum.fenpei.getKey()); operateRecord.setFactoryCode(factoryCode); this.operateRecordDao.save(operateRecord); //授权 if(j>0){ OperateRecord operateRecord1 = new OperateRecord(); operateRecord1.setCreateTime(new Date()); operateRecord1.setRecordIp(ip); operateRecord1.setRecordNumber(j); operateRecord1.setRecordType(RecordTypeEnum.shouquan.getKey()); operateRecord1.setFactoryCode(factoryCode); this.operateRecordDao.save(operateRecord1); } } workbook.close(); } catch (Exception e) { throw new RuntimeException(e); } } @Override public Pagination getDeviceByPage(SearchFilter searchFilter) { if(searchFilter!=null){ //查询条件 List queryList = new ArrayList(); //排序条件 List orderList = new ArrayList(); //分页 Integer iDisplayStart = searchFilter.getiDisplayStart(); Integer iDisplayLength = searchFilter.getiDisplayLength(); //mac地址 String sSearch = searchFilter.getsSearch(); if(sSearch!=null && !sSearch.equals("")){ queryList.add(Restrictions.like("macAddress", "%"+sSearch+"%")); } //授权日期 String sSearch1 = searchFilter.getsSearch1(); if(sSearch1!=null && !sSearch1.equals("")){ queryList.add(Restrictions.sqlRestriction("'"+sSearch1+"'=date_format(authorize_time,'%Y-%m-%d')")); } //分配日期 String sSearch2 = searchFilter.getsSearch2(); if(sSearch2!=null && !sSearch2.equals("")){ queryList.add(Restrictions.eq("createDate", IfishUtil.StrToDate(sSearch2))); } //激活日期 String sSearch3 = searchFilter.getsSearch3(); if(sSearch3!=null && !sSearch3.equals("")){ queryList.add(Restrictions.sqlRestriction("'"+sSearch3+"'=date_format(first_activate,'%Y-%m-%d')")); } //分配编号 String sSearch4 = searchFilter.getsSearch4(); if(sSearch4!=null && !sSearch4.equals("")){ queryList.add(Restrictions.eq("createCode", sSearch4)); } //是否黑名单过滤 String selectField = searchFilter.getSelectField(); if(selectField!=null && !selectField.equals("")){ queryList.add(Restrictions.eq("isBlacklist", selectField)); } //鱼缸厂筛选 String selectField1 = searchFilter.getSelectField1(); if(selectField1!=null && !selectField1.equals("")){ queryList.add(Restrictions.eq("venderList.brandCode", selectField1)); } //电子厂筛选 String selectField3 = searchFilter.getSelectField3(); if(selectField3!=null && !selectField3.equals("")){ queryList.add(Restrictions.eq("factoryList.factoryCode", selectField3)); } //硬件型号筛选 String selectField2 = searchFilter.getSelectField2(); if(selectField2!=null && !selectField2.equals("")){ queryList.add(Restrictions.eq("hardwareType.hardwareType", selectField2)); } //排序字段 String sortField = searchFilter.getSortField(); if(sortField!=null && !sortField.equals("")){ //排序方式 String sortMode = searchFilter.getSortMode(); //升序 if(sortMode!=null && SortModeEnum.ASC.getKey().equals(sortMode)){ orderList.add(Order.asc(sortField)); } //降序 else{ orderList.add(Order.desc(sortField)); } } else{ orderList.add(Order.desc("createTime")); } return this.deviceDao.findByCriteria(iDisplayStart,iDisplayLength,orderList,queryList.toArray(new Criterion[queryList.size()])); } else{ return null; } } @Override public Pagination getDeviceByPageNew(SearchFilter searchFilter,Set hardwareTypeSet) { if(searchFilter!=null){ //查询条件 List queryList = new ArrayList(); //排序条件 List orderList = new ArrayList(); //分页 Integer iDisplayStart = searchFilter.getiDisplayStart(); Integer iDisplayLength = searchFilter.getiDisplayLength(); //授权日期 String sSearch1 = searchFilter.getsSearch1(); if(sSearch1!=null && !sSearch1.equals("")){ queryList.add(Restrictions.sqlRestriction("'"+sSearch1+"'=date_format(create_time,'%Y-%m-%d')")); } if (hardwareTypeSet != null && hardwareTypeSet.size() != 0) { queryList.add(Restrictions.in("hardwareType",hardwareTypeSet)); } String selectField1 = searchFilter.getSelectField1(); if(selectField1!=null && !selectField1.equals("")){ queryList.add(Restrictions.eq("isBlacklist", selectField1)); } String selectField2 = searchFilter.getSelectField2(); if(selectField2!=null && !selectField2.equals("")){ if ("1".equals(selectField2)) { queryList.add(Restrictions.sqlRestriction("create_code != ''")); } else { queryList.add(Restrictions.sqlRestriction("create_code = ''")); } } orderList.add(Order.desc("createTime")); return this.deviceDao.findByCriteria(iDisplayStart,iDisplayLength,orderList,queryList.toArray(new Criterion[queryList.size()])); } else{ return null; } } }