|
@ -0,0 +1,155 @@
|
|
|
package com.yihu.iot.service.device;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import com.yihu.base.fastdfs.FastDFSHelper;
|
|
|
import com.yihu.base.mysql.query.BaseJpaService;
|
|
|
import com.yihu.iot.dao.device.IotDeviceDao;
|
|
|
import com.yihu.iot.dao.device.IotDeviceImportRecordDao;
|
|
|
import com.yihu.jw.iot.device.IotDeviceDO;
|
|
|
import com.yihu.jw.iot.device.IotDeviceImportRecordDO;
|
|
|
import com.yihu.jw.iot.device.IotOrderPurchaseDO;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* @author yeshijie on 2018/1/19.
|
|
|
*/
|
|
|
@Service
|
|
|
public class IotDeviceImportRecordService extends BaseJpaService<IotDeviceImportRecordDO,IotDeviceImportRecordDao> {
|
|
|
private Logger logger = LoggerFactory.getLogger(IotDeviceImportRecordService.class);
|
|
|
@Autowired
|
|
|
private IotDeviceImportRecordDao iotDeviceImportRecordDao;
|
|
|
@Autowired
|
|
|
private IotDeviceDao iotDeviceDao;
|
|
|
@Autowired
|
|
|
private FastDFSHelper fastDFSHelper;
|
|
|
|
|
|
@Async
|
|
|
public void importDevice(IotOrderPurchaseDO purchaseDO, HSSFWorkbook wb, IotDeviceImportRecordDO recordDO){
|
|
|
List<IotDeviceDO> deviceDOList = new ArrayList<IotDeviceDO>();
|
|
|
Integer associatedNum = iotDeviceDao.countByPurchaseId(purchaseDO.getId());
|
|
|
Long unAssociatedNum = purchaseDO.getPurchaseNum()-associatedNum;//未关联数量
|
|
|
Integer count = 0;
|
|
|
HSSFSheet sheet = wb.getSheetAt(0);
|
|
|
for(int i = sheet.getFirstRowNum();i<=sheet.getLastRowNum();i++){
|
|
|
HSSFRow row = sheet.getRow(i);
|
|
|
try{
|
|
|
if(i==sheet.getFirstRowNum()){
|
|
|
HSSFCell cell = row.createCell(3);
|
|
|
cell.setCellValue("导入结果");
|
|
|
continue;
|
|
|
}
|
|
|
String errorMsg = null;
|
|
|
if(unAssociatedNum<=count){
|
|
|
errorMsg = "入库SN码数量超过采购量";
|
|
|
continue;
|
|
|
}
|
|
|
String sn = getStringCellValue(row,0);
|
|
|
String hos = getStringCellValue(row,1);
|
|
|
String sim = getStringCellValue(row,2);
|
|
|
|
|
|
//分割字符串--思明区莲前街道社区卫生服务中心(3502030400)
|
|
|
String[] ho = hos.split("\\(");
|
|
|
String hospital = ho.length>1?ho[1].replace("\\)",""):null;
|
|
|
String hospitalName = ho.length>1?ho[0]:null;
|
|
|
//验证
|
|
|
if(StringUtils.isBlank(sn)){
|
|
|
errorMsg = "sn码不能为空";
|
|
|
HSSFCell cell = row.createCell(3);
|
|
|
cell.setCellValue(errorMsg);
|
|
|
continue;
|
|
|
}
|
|
|
IotDeviceDO device = iotDeviceDao.findByDeviceSn(sn);
|
|
|
// if(iotDeviceDao.findByDeviceSn(sn)!=null){
|
|
|
// errorMsg = "SN码重复,并不允许新增";
|
|
|
// HSSFCell cell = row.createCell(3);
|
|
|
// cell.setCellValue(errorMsg);
|
|
|
// continue;
|
|
|
// }
|
|
|
if(StringUtils.isNotBlank(sim)&&iotDeviceDao.findByDeviceSn(sim)!=null){
|
|
|
errorMsg = "SIM卡号重复,并不允许新增";
|
|
|
HSSFCell cell = row.createCell(3);
|
|
|
cell.setCellValue(errorMsg);
|
|
|
continue;
|
|
|
}
|
|
|
if(device==null){
|
|
|
device = new IotDeviceDO();
|
|
|
}
|
|
|
device = new IotDeviceDO();
|
|
|
device.setDel(1);
|
|
|
device.setOrderNo(purchaseDO.getOrderNo());
|
|
|
device.setProductId(purchaseDO.getProductId());
|
|
|
device.setSaasId(getCode());
|
|
|
device.setStatus(IotDeviceDO.DeviceStatus.normal.getValue());
|
|
|
device.setDeviceSn(sn);
|
|
|
device.setDeviceSource(IotDeviceDO.DeviceSource.purchaese.getValue());
|
|
|
device.setHospital(hospital);
|
|
|
device.setHospitalName(hospitalName);
|
|
|
// device.setIsComposite(1);
|
|
|
// device.setIsPlatform(0);
|
|
|
device.setManufacturerId(purchaseDO.getManufacturerId());
|
|
|
device.setManufacturerName(purchaseDO.getManufacturerName());
|
|
|
device.setName(purchaseDO.getDeviceName());
|
|
|
device.setSimNo(sim);
|
|
|
device.setSupplierId(purchaseDO.getSupplierId());
|
|
|
device.setSupplierName(purchaseDO.getSupplierName());
|
|
|
|
|
|
deviceDOList.add(device);
|
|
|
HSSFCell cell = row.createCell(3);
|
|
|
cell.setCellValue("新增成功");
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
HSSFCell cell = row.createCell(3);
|
|
|
cell.setCellValue("新增失败:"+e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
//保存结果
|
|
|
iotDeviceDao.save(deviceDOList);
|
|
|
recordDO.setStatus(IotDeviceImportRecordDO.DeviceImportRecordStatus.complete.getValue());
|
|
|
ByteArrayOutputStream os = null;
|
|
|
try{
|
|
|
//结果上传到fastDFS
|
|
|
os = new ByteArrayOutputStream();
|
|
|
wb.write(os);
|
|
|
ObjectNode node = fastDFSHelper.uploadByByte(os.toByteArray(),"xls","");
|
|
|
|
|
|
recordDO.setResultUrl(node.get("fid").toString().replaceAll("\"", ""));
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}finally {
|
|
|
//关闭流
|
|
|
try {
|
|
|
os.close();
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
iotDeviceImportRecordDao.save(recordDO);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取cell的值
|
|
|
* @param row
|
|
|
* @param num
|
|
|
* @return
|
|
|
*/
|
|
|
private String getStringCellValue(HSSFRow row,Integer num){
|
|
|
HSSFCell cel = row.createCell(num);
|
|
|
if(cel == null){
|
|
|
return null;
|
|
|
}
|
|
|
return cel.getStringCellValue();
|
|
|
}
|
|
|
}
|