1-maintainWmsItemPage.wf.xml
<?xml version="1.0" encoding="UTF-8"?> <page id="maintainWmsItemPage"> <main> <process id="boxTypeProcess"> <tablePopup id="importItems" title="importItems" process="boxTypeProcess.import" enableType="none" containId="false" pageId="editImportItemsPage"> <enableExpression/> </tablePopup> </process> </main> <detail/> </page
2-editImportItemsPage.xml
<?xml version="1.0" encoding="UTF-8"?> <pages> <editPage id="editImportItemsPage" title="editImportItemsPage"> <workflow/> <initListeners/> <inputUIs> <file id="omsOrder.importFile" title="filePath" row="1" col="1" span="1" readOnly="false" required="true" reserve="false" forceOverride="true" focusUI="false" inVisible="false" showImage="false" fileSize="22577152"> <visibleExpression/> <hql/> <eventListeners/> </file> </inputUIs> </editPage> </pages>
3-editImportItemsPage.wf.xml
<?xml version="1.0" encoding="UTF-8"?> <page id="editImportItemsPage"> <main> <process id="boxTypeProcess"> <formCommit id="importItems" title="importItems" process="boxTypeProcess.import" enableType="none" multiMapping="false" download="false" closeTransactional="true" confirmMessage="confirm" visibleType="none"> <enableExpression/> <mappings> <mapping id="omsOrder.importFile" className="file"> <entries/> </mapping> </mappings> <actions> <action managerName="noTransactionManager" methodName="importItem" parameter="omsOrder.importFile"/> </actions> <forwards> <forward name="refreshParent" newEnabled="true" editEnabled="true"/> </forwards> </formCommit> </process> </main> <detail/> </page>
NoTransactionManagerImp.java
/**
* @author yc min
*/
public class NoTransactionManagerImp extends DefaultBaseManager
implements NoTransactionManager{
/**
* 导入物料信息
* @param file
*/
public void importItem(File file) {
// 判断文件是否存在
if (file == null) {
throw new BusinessException("操作失败,未找对应文件!");
}
// 验证文件格式
String name = file.getName();
String suffix = name.substring(name.lastIndexOf(".") + 1,
name.lastIndexOf(".") + 5);
if (!suffix.equals("xlsx")) {
throw new BusinessException("操作失败,导入文件格式错误!");
}
FileInputStream fileInput = null;
XSSFWorkbook xwb = null;
try {
fileInput = new FileInputStream(file);
xwb = new XSSFWorkbook(fileInput);
XSSFSheet sheet = xwb.getSheetAt(0);
createItem(sheet);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fileInput != null){
fileInput.close();
fileInput = null;
}
} catch (IOException e) {
e.printStackTrace();
}
if(xwb != null){
xwb = null;
}
}
}
/**
* 创建物料
* @param sheet
*/
@SuppressWarnings("unchecked")
private void createItem(XSSFSheet sheet) {
StringBuffer bufferLog = new StringBuffer();
WmsLotRule wmsLotRule = null;
//获取批次规则
List<WmsLotRule> list = (List<WmsLotRule>)commonDao.
findByQuery("FROM WmsLotRule rule"
+ " WHERE rule.status = :status", "status", BaseStatus.ENABLED);
if(list.isEmpty() || list.size() > 1){
bufferLog.append("操作失败,未找到唯一的批次规则!\n");
}else{
wmsLotRule = list.get(0);
}
Map<String,WmsOrganization> sups =
new HashMap<String, WmsOrganization>();
Map<String,WmsItemType> itemType =
new HashMap<String, WmsItemType>();
Map<String,WmsSimilarCode> similars =
new HashMap<String, WmsSimilarCode>();
List<Object[]> items = new ArrayList<Object[]>();
String secondUnit = "箱";
for(int i = 2; i <= sheet.getLastRowNum()+1; i ++){
try {
XSSFRow row = sheet.getRow(i-1);
if(row == null){
continue;
}
WmsItem item = null;
String itemCode = getValue(row.getCell(0));
if(StringUtils.isEmpty(itemCode)){
bufferLog.append(
"操作失败,["+i+"]行,物料编码不能为空!\n");
continue;
}else{
if(StringUtils.isEmpty(itemCode)){
bufferLog.append(
"操作失败,["+i+"]行,物料编码不能为空!\n");
}
item = (WmsItem) commonDao.findByQueryUniqueResult
("FROM WmsItem item WHERE item.code =:itemCode",
new String[]{"itemCode"}, new Object[]{itemCode});
if(item == null){
item = EntityFactory.getEntity(WmsItem.class);
}
}
String name = getValue(row.getCell(1));
String packageBoxType = getValue(row.getCell(20));
if(StringUtils.isEmpty(name)){
bufferLog.append(
"操作失败,["+i+"]行,物料名称不能为空!\n");
}
String ename = getValue(row.getCell(2));
String type = getValue(row.getCell(3));
String typeValue = "";
if(!StringUtils.isEmpty(type)){
if("A".equals(type)){
typeValue = WmsItemCategory.A;
}else if("C".equals(type)){
typeValue = WmsItemCategory.C;
}else if("I".equals(type)){
typeValue = WmsItemCategory.I;
}else{
typeValue = WmsItemCategory.HOMEMADE;
}
}
String itemTypeCode1 = getValue(row.getCell(4));
String itemTypeCode2 = getValue(row.getCell(5));
WmsItemType itemType1 = null;
WmsItemType itemType2 = null;
if(StringUtils.isEmpty(itemTypeCode1)
&& StringUtils.isEmpty(itemTypeCode2)){
bufferLog.append(
"操作失败,["+i+"]行套分类、散件分类不能同时为空!");
}
if(StringUtils.isNotEmpty(itemTypeCode1)){
if(itemType.containsKey(itemTypeCode1)){
itemType1 = itemType.get(itemTypeCode1);
}else{
itemType1 = (WmsItemType) commonDao.
findByQueryUniqueResult("FROM WmsItemType itmeType"
+ " WHERE itmeType.code=:code",
"code", itemTypeCode1);
itemType.put(itemTypeCode1, itemType1);
}
if(itemType1 == null){
bufferLog.append("操作失败,["+i+"]
行散件物料分类["+itemTypeCode1+"]不存在!\n");
}
}
if(StringUtils.isNotEmpty(itemTypeCode2)){
if(itemType.containsKey(itemTypeCode2)){
itemType2 = itemType.get(itemTypeCode2);
}else{
itemType2 = (WmsItemType) commonDao.
findByQueryUniqueResult("FROM WmsItemType itmeType"
+ " WHERE itmeType.code=:code",
"code", itemTypeCode2);
itemType.put(itemTypeCode2, itemType2);
}
if(itemType2 == null){
bufferLog.append("操作失败,["+i+"]
行台套物料分类["+itemTypeCode2+"]不存在!\n");
}
}
String beBom = getValue(row.getCell(6));
boolean beBomFlag = false;
if(StringUtils.isEmpty(beBom)){
bufferLog.append(
"操作失败,["+i+"]行是否套件不能为空!\n");
}else{
beBomFlag = beBom.equals("是")?Boolean.TRUE : Boolean.FALSE;
}
String leftRightPart = getValue(row.getCell(7));
String similarCode = getValue(row.getCell(8));
WmsSimilarCode similar = null;
if(!StringUtils.isEmpty(similarCode)){
if(similars.containsKey(similarCode)){
similar = similars.get(similarCode);
}else{
similar = (WmsSimilarCode)commonDao.
findByQueryUniqueResult(
"FROM WmsSimilarCode similarCode"
+ " WHERE similarCode.code=:code",
"code", similarCode);
similars.put(similarCode, similar);
}
if(similar == null){
bufferLog.append("操作失败,["+i+"]
行相似编码["+similarCode+"]不存在!\n");
}
}
String highConcern = getValue(row.getCell(9));
String highClaims = getValue(row.getCell(10));
String highValue = getValue(row.getCell(11));
String supplierCode = getValue(row.getCell(16));
WmsOrganization supplier = null;
if(StringUtils.isEmpty(supplierCode)){
bufferLog.append("操作失败,
["+i+"]行供应商编码不能为空!\n");
System.out.println(row.getCell(0));
}else{
if(!sups.containsKey(supplierCode)){
supplier = (WmsOrganization)commonDao.
findByQueryUniqueResult(
"FROM WmsOrganization supplier"
+ " WHERE supplier.code=:code"
+ " AND supplier.beSupplier = true",
"code", supplierCode);
sups.put(supplierCode, supplier);
}else{
supplier = sups.get(supplierCode);
}
if(supplier == null){
bufferLog.append("操作失败,["+i+"]
行供应商编码["+supplierCode+"]不存在\n");
}
}
boolean beLawCheck = false;
if(row.getCell(17) != null){
beLawCheck = getValue(row.getCell(17)).
equals("是") ? Boolean.TRUE : Boolean.FALSE;
}
boolean beOutPackage = false;
if(row.getCell(18) != null){
beOutPackage = getValue(row.getCell(18)).
equals("是") ? Boolean.TRUE : Boolean.FALSE;
}
String unit = getValue(row.getCell(12));
if(StringUtils.isEmpty(unit)){
bufferLog.append("操作失败,
["+i+"]行单位名称不能为空!\n");
}
String weightStr = getValue(row.getCell(15));
double weight = 0.0;
if(StringUtils.isEmpty(weightStr)){
bufferLog.append("操作失败,
["+i+"]行物料单重不能为空!\n");
}else{
weight = getNumbericValue(row.getCell(15));
}
String convertFigureStr = getValue(row.getCell(14));
int convertFigure = 0;
if(StringUtils.isEmpty(convertFigureStr)){
bufferLog.append("操作失败,
["+i+"]行标装数量不能为空!\n");
}else{
convertFigure =
Integer.valueOf(getValue(row.getCell(14)));
}
String supplierOutStr =getValue(row.getCell(19));
WmsOrganization supplierOut = null;
if (!StringUtils.isEmpty(supplierOutStr)) {
if(sups.containsKey(supplierOutStr)){
supplierOut = sups.get(supplierOutStr);
}else{
String hql = "FROM WmsOrganization "+
" supplier WHERE 1=1"+
" AND supplier.beSupplier = true"
+ " AND (supplier.code =:code"
+" OR supplier.name =:name) ";
supplierOut = (WmsOrganization)
this.commonDao.findByQueryUniqueResult(hql,
new String[]{"code","name"},
new Object[]{supplierOutStr,supplierOutStr});
sups.put(supplierOutStr, supplierOut);
}
if (supplierOut == null) {
bufferLog.append("操作失败["+i+"]行委外供应商
【"+ supplierOutStr +"】在系统中未维护!\n");
}
}
Integer containTime = null;
if(!StringUtils.isEmpty(getValue(row.getCell(21)))){
try{
containTime =
Integer.valueOf(getValue(row.getCell(21)));
}catch(Exception e){
bufferLog.append("操作失败,["+i+"]行物料容忍度
【"+ row.getCell(21) +"】是数字!\n");
}
}
boolean beScreening = false;
if(row.getCell(22) != null){
beScreening = getValue(row.getCell(22)).
equals("是") ? Boolean.TRUE : Boolean.FALSE;
}
boolean beAntirust = false;
if(row.getCell(23) != null){
beAntirust = getValue(row.getCell(23)).
equals("是") ? Boolean.TRUE : Boolean.FALSE;
}
boolean beShockproof = false;
if(row.getCell(24) != null){
beShockproof = getValue(row.getCell(24)).
equals("是") ? Boolean.TRUE : Boolean.FALSE;
}
int rustDay = 0;
if(!StringUtils.isEmpty(getValue(row.getCell(25)))){
try{
rustDay = Integer.valueOf(getValue(row.getCell(25)));
}catch(Exception e){
bufferLog.append("操作失败,["+i+"]行防锈周期
【"+ row.getCell(25) +"】是数字!\n");
}
}
WmsPackageUnit pu1 =null;
if(item.isNew()){
pu1 = EntityFactory.getEntity(WmsPackageUnit.class);
}else{
pu1 = (WmsPackageUnit) commonDao.
findByQueryUniqueResult("FROM WmsPackageUnit p"
+ " WHERE p.item.code =:code AND p.lineNo = 1",
new String[]{"code"}, new Object[]{itemCode});
if(pu1==null){
pu1 = EntityFactory.getEntity(WmsPackageUnit.class);
}
}
WmsPackageUnit pu2 = null;
if(!secondUnit.endsWith(unit)){
if(item.isNew()){
pu2 = EntityFactory.getEntity(WmsPackageUnit.class);
}else{
pu2 = (WmsPackageUnit) commonDao.
findByQueryUniqueResult("FROM WmsPackageUnit p"
+ " WHERE p.item.code =:code AND p.lineNo = 2 ",
new String[]{"code"}, new Object[]{itemCode});
if(pu2==null){
pu2 = EntityFactory.getEntity(WmsPackageUnit.class);
}
}
}
if(bufferLog.length() == 0){
Object[] obj = new Object[]{item,
itemCode,name,ename,typeValue,
itemType1,itemType2,beBomFlag,leftRightPart,
similar,highConcern,highClaims,highValue,
supplier,beLawCheck,beOutPackage,wmsLotRule,
supplierOut,containTime,beScreening,beAntirust,
beShockproof,rustDay,packageBoxType,pu1,unit,weight,
pu2,secondUnit,convertFigure
};
items.add(obj);
}
} catch (Exception e) {
bufferLog.append("操作失败,["+i+"]行格式错误,请检查!\n");
}
}
sups.clear();itemType.clear();similars.clear();
if(bufferLog.length() > 0){
ExceptionLog log = new ExceptionLog(
UserHolder.getUser(), "maintainWmsItemPage.xml",
"importItem", bufferLog.toString());
commonDao.store(log);
}else{
WmsItemManager wmsItemManager = (WmsItemManager)
applicationContext.getBean("wmsItemManager");
int PAGE_NUMBER = 100;
int size = items.size();
int j = MyUtils.getSize(size, PAGE_NUMBER);
for(int k=0 ; k<j ; k++){
int toIndex = MyUtils.getIndex(k, size, PAGE_NUMBER);
List<Object[]> ret = MyUtils.getListObj(
items, k, toIndex, PAGE_NUMBER);
Object[] obj = new Object[]{
ret
};
wmsItemManager.createItem(obj);
System.out.println("total:"+j+",going:"+(k+1));
}
}
}
private Double getNumbericValue(XSSFCell cell){
Double value = 0D;
if(cell == null){
return value;
}
try {
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
value = cell.getNumericCellValue();
}
} catch (Exception e) {
value = 0D;
}
return value;
}
/**
*按照字符方式获取Excel表中的值
* @param cell
* @return
*/
private String getValue(XSSFCell cell){
String value = "";
if(cell == null){
return value;
}
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
DecimalFormat df = new DecimalFormat("0");
value = df.format(cell.getNumericCellValue());
}else if(cell.getCellType() == Cell.CELL_TYPE_STRING){
value = cell.getStringCellValue();
}else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
return value;
}
return value.trim();
}
}
DefaultWmsItemManager.java
@SuppressWarnings("unchecked")
public class DefaultWmsItemManager extends
DefaultBaseManager implements WmsItemManager {
public void createItem(Object[] obj){
List<Object[]> items = (List<Object[]>) obj[0];
for(Object[] excel : items){
WmsItem item = (WmsItem) excel[0];
if(item.isNew()){
item.setCode(excel[1].toString());
}
item.setName(excel[2].toString());
item.setEname(excel[3].toString());
item.setType(excel[4].toString());
item.setItemType1((WmsItemType)excel[5]);
item.setItemType2((WmsItemType)excel[6]);
item.setBeBOM(Boolean.valueOf(excel[7].toString()));
item.setLeftRightPart(excel[8].toString());
item.setSimilarCode((WmsSimilarCode)excel[9]);
item.setHighConcern(excel[10].toString());
item.setHighClaims(excel[11].toString());
item.setHighValue(excel[12].toString());
item.setSupplier((WmsOrganization)excel[13]);
item.setBeLawCheck(Boolean.valueOf(excel[14].toString()));
item.setBeOutPackage(Boolean.valueOf(excel[15].toString()));
item.setLotRule((WmsLotRule)excel[16]);
item.setSupplierOut((WmsOrganization)excel[17]);
item.setContainTime(excel[18]==null?0:
Integer.valueOf(excel[18].toString()));
item.setBeScreening(Boolean.valueOf(excel[19].toString()));
item.setBeAntirust(Boolean.valueOf(excel[20].toString()));
item.setBeShockproof(Boolean.valueOf(excel[21].toString()));
item.setRustDay(excel[22]==null?0:
Integer.valueOf(excel[22].toString()));
//设置箱型
item.setPackageBoxType(excel[23].toString());
item.setStatus(BaseStatus.ENABLED);
commonDao.store(item);
WmsPackageUnit pu1 = (WmsPackageUnit) excel[24];
pu1.setLineNo(1);
pu1.setUnit(excel[25].toString());
pu1.setConvertFigure(1);
pu1.setWeight(Double.valueOf(excel[26].toString()));
pu1.setItem(item);
commonDao.store(pu1);
WmsPackageUnit pu2 = (WmsPackageUnit) excel[27];
if(pu2!=null){
pu2.setLineNo(2);
pu2.setUnit(excel[28].toString());
pu2.setConvertFigure(Integer.valueOf(excel[29].toString()));
pu2.setItem(item);
commonDao.store(pu2);
}
}
}
}
MyUtils.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**yc min*/
public class MyUtils {
private static Log log = LogFactory.getLog(MyUtils.class);
public static SimpleDateFormat yy =
new SimpleDateFormat("yyyyMMdd");
/**####*/
public static String spilt4 = "####";
public static int getSize(int size,int PAGE_NUMBER){
int j = size / PAGE_NUMBER;
if((size % PAGE_NUMBER) > 0){
j += 1;
}
return j;
}
public static int getIndex(int k,int size,int PAGE_NUMBER){
int toIndex = ((k + 1) * PAGE_NUMBER);
if(toIndex > size){
toIndex = size;
}
return toIndex;
}
public static List<Object> getList(
List<Object> list,int k,int toIdnex,int PAGE_NUMBER){
List<Object> ret = list.subList((k * PAGE_NUMBER), toIdnex);
return ret;
}
public static List<Object[]> getListObj(
List<Object[]> list,int k,int toIndex,int PAGE_NUMBER){
List<Object[]> ret = list.subList((k * PAGE_NUMBER), toIndex);
return ret;
}
/**return string(yyyyMMdd)*/
public static String formatDateYYToStr(Date date) {
try {
return yy.format(date);
} catch (Exception e) {
log.debug("MyUtils.formatDateYYToStr():" + e.getMessage());
return null;
}
}
}