|
|
@@ -2,6 +2,7 @@ package com.style24.scm.biz.service;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -74,8 +75,6 @@ public class TssGoodsService {
|
|
|
@Autowired
|
|
|
private TssRendererService rendererService;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
@Autowired
|
|
|
private ObjectMapper mapper;
|
|
|
|
|
|
@@ -83,6 +82,8 @@ public class TssGoodsService {
|
|
|
|
|
|
private static final String UPDATE_NO_PATTERN = "X";
|
|
|
|
|
|
+ private static final String SELF_GOOODS_AFTER = "STY";
|
|
|
+
|
|
|
/**
|
|
|
* 상품 목록 건수
|
|
|
*
|
|
|
@@ -143,8 +144,8 @@ public class TssGoodsService {
|
|
|
Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch); // map형식으로 조회
|
|
|
if (dataList != null && !dataList.isEmpty()) {
|
|
|
for (GagaMap gagaMap : dataList) {
|
|
|
- if (!StringUtils.isEmpty(gagaMap.get("SYS_IMG_NM").toString()) ) {
|
|
|
- gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString());
|
|
|
+ if (!StringUtils.isEmpty(gagaMap.get("SYS_IMG_NM").toString())) {
|
|
|
+ gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -374,7 +375,7 @@ public class TssGoodsService {
|
|
|
for (GoodsDesc tmpGoodsDesc : goodsDescList) {
|
|
|
goodsDescSb.append(tmpGoodsDesc.getGoodsDesc());
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
goodsDescSb.append("");
|
|
|
}
|
|
|
return goodsDescSb.toString();
|
|
|
@@ -560,7 +561,7 @@ public class TssGoodsService {
|
|
|
}
|
|
|
goodsPriceRes.setApplyStdt(GagaDateUtil.getTodayDateTime()); //yyyymmddhhmiss
|
|
|
int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) + 4;
|
|
|
- goodsPriceRes.setApplyEddt(toYear +"1231235959"); //yyyymmddhhmiss
|
|
|
+ goodsPriceRes.setApplyEddt(toYear + "1231235959"); //yyyymmddhhmiss
|
|
|
goodsPriceRes.setCfrmYn("N");
|
|
|
goodsPriceRes.setApplyYn("N");
|
|
|
goodsPriceRes.setRegNo(goods.getRegNo());
|
|
|
@@ -655,11 +656,11 @@ public class TssGoodsService {
|
|
|
goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
|
|
|
goodsOrderGrade.setRegNo(TssSession.getInfo().getUserNo());
|
|
|
goodsDao.deleteGoodsCustGrade(goodsOrderGrade);
|
|
|
- for(String custGrade : goods.getGoodsOrderGrade()) {
|
|
|
+ for (String custGrade : goods.getGoodsOrderGrade()) {
|
|
|
goodsOrderGrade.setCustGrade(custGrade);
|
|
|
goodsDao.createGoodsCustGrade(goodsOrderGrade);
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
Goods goodsOrderGrade = new Goods();
|
|
|
goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
|
|
|
goodsOrderGrade.setRegNo(TssSession.getInfo().getUserNo());
|
|
|
@@ -837,7 +838,7 @@ public class TssGoodsService {
|
|
|
goodsStock.setOptCd2(goods.getOptCd2()[index]);
|
|
|
goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
|
|
|
goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
|
|
|
- goodsStock.setDispOrd(goods.getDispOrd()[index]);
|
|
|
+ goodsStock.setDispOrd(Integer.parseInt(goods.getDispOrd()[index]));
|
|
|
goodsStock.setDispYn(goods.getDispYn()[index]);
|
|
|
goodsStock.setRegNo(goods.getRegNo());
|
|
|
goodsStock.setUpdNo(goods.getUpdNo());
|
|
|
@@ -1056,7 +1057,7 @@ public class TssGoodsService {
|
|
|
* @since 2020. 12. 23
|
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
|
- public void saveGoodsImageList(Collection<GoodsImg> goodsImgList){
|
|
|
+ public void saveGoodsImageList(Collection<GoodsImg> goodsImgList) {
|
|
|
int index = 0;
|
|
|
for (GoodsImg goodsImg : goodsImgList) {
|
|
|
// 상품이미지 전체 삭제
|
|
|
@@ -1099,7 +1100,7 @@ public class TssGoodsService {
|
|
|
* @since 2021. 01. 12
|
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
|
- public String createExceluploadSelfGoods(GagaMap gagaMap, String procJob) {
|
|
|
+ public String createExceluploadSelfGoods(GagaMap gagaMap, String procJob) {
|
|
|
|
|
|
GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
|
|
|
|
|
|
@@ -1111,7 +1112,7 @@ public class TssGoodsService {
|
|
|
return goods.getGoodsStat(); //continue
|
|
|
}
|
|
|
|
|
|
- // 상품고시정보
|
|
|
+ // 상품고시정보 - 항목및 기본값
|
|
|
Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goods);
|
|
|
if (goodsNotiList == null || goodsNotiList.isEmpty()) {
|
|
|
goods.setGoodsRegMsg("품목의 고시정보 없음");
|
|
|
@@ -1139,20 +1140,26 @@ public class TssGoodsService {
|
|
|
if (goodsWmsSizeList == null || goodsWmsSizeList.isEmpty()) {
|
|
|
goods.setGoodsRegMsg("WMS 상품 사이즈 정보 없음");
|
|
|
goods.setGoodsStat("G008_20");
|
|
|
- }else{
|
|
|
- this.createSelfGoodsSize(goods, goodsWmsSizeList); // 자사 상품사이즈 정보 자장
|
|
|
+ } else {
|
|
|
+ this.createSelfGoodsSize(goods, goodsWmsSizeList); // 자사 상품사이즈 정보 저장
|
|
|
}
|
|
|
|
|
|
+ // 상품 색상 , 사이즈 옵션 정보 조회
|
|
|
GoodsMass goodsColorSize = goodsDao.getGoodsColorSize(goods);
|
|
|
if (goodsColorSize != null && !StringUtils.isEmpty(goodsColorSize.getMainColorCd())) {
|
|
|
goodsColorSize.setUpdNo(TssSession.getInfo().getUserNo());
|
|
|
goodsDao.updateGoodsMainColorCd(goodsColorSize); // 대표색상 설정
|
|
|
}
|
|
|
|
|
|
+ int index = 0;
|
|
|
// 자사 상품 등록시 고시정보 처리
|
|
|
for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
|
|
|
+ if (!StringUtils.isEmpty(gagaMap.getString("niContent" + (index + 1)))) {
|
|
|
+ goodsNotiInfo.setNiContent(gagaMap.getString("niContent" + (index + 1)));
|
|
|
+ }
|
|
|
+
|
|
|
if ("G005_003".equals(goodsNotiInfo.getNiItemCd())) { // 색상
|
|
|
- if (!StringUtils.isEmpty(goodsColorSize.getOpt1Str() )) {
|
|
|
+ if (!StringUtils.isEmpty(goodsColorSize.getOpt1Str())) {
|
|
|
goodsNotiInfo.setNiContent(goodsColorSize.getOpt1Str());
|
|
|
}
|
|
|
} else if ("G005_004".equals(goodsNotiInfo.getNiItemCd())) { //치수
|
|
|
@@ -1169,17 +1176,28 @@ public class TssGoodsService {
|
|
|
}
|
|
|
} else if ("G005_097".equals(goodsNotiInfo.getNiItemCd())) { //수입여부
|
|
|
if (!StringUtils.isEmpty(goods.getOriginNm()) &&
|
|
|
- (goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
|
|
|
+ (goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
|
|
|
goodsNotiInfo.setNiContent("N");
|
|
|
} else {
|
|
|
goodsNotiInfo.setNiContent("Y");
|
|
|
}
|
|
|
+ } else if ("G005_099".equals(goodsNotiInfo.getNiItemCd())) { //종류
|
|
|
+ if (!StringUtils.isEmpty(goods.getItemkindNm())) {
|
|
|
+ goodsNotiInfo.setNiContent(goods.getItemkindNm());
|
|
|
+ }
|
|
|
}
|
|
|
+ index++;
|
|
|
}
|
|
|
|
|
|
+ log.info("[goodsNotiList goodsNotiList goodsNotiList ]={}", goodsNotiList);
|
|
|
//고시항목 필수값 확인
|
|
|
goods = this.getGoodsNotiCheck(goods, goodsNotiList, gagaMap, procJob);
|
|
|
|
|
|
+ //고시 필수 항목 미입력으로 상품 상태 변경
|
|
|
+ if ("G008_20".equals(goods.getGoodsStat())) {
|
|
|
+ goodsDao.updateGoodsStatOnly(goods);
|
|
|
+ }
|
|
|
+
|
|
|
this.createGoodsNoti(gagaMap, goodsNotiList); // 상품고시정보 저장
|
|
|
|
|
|
// 사용자 검색어를 검색어에 적용
|
|
|
@@ -1219,8 +1237,8 @@ public class TssGoodsService {
|
|
|
private Goods createSelfGoodsInfo(GoodsMass goodsMass, String procJob) {
|
|
|
|
|
|
Goods goods = new Goods();
|
|
|
- goods.setGoodsStat("G008_40"); // 상품상태
|
|
|
- goods.setGoodsRegMsg("승인대기");
|
|
|
+ goods.setGoodsStat("G008_20"); // 상품상태
|
|
|
+ goods.setGoodsRegMsg("이미지 등록 필");
|
|
|
|
|
|
// 품번정보 확인 (FRJ 는 11, 그외는 10)
|
|
|
if (StringUtils.isEmpty(goodsMass.getGoodsNum()) || goodsMass.getGoodsNum().length() < 10 || goodsMass.getGoodsNum().length() > 11) {
|
|
|
@@ -1239,16 +1257,6 @@ public class TssGoodsService {
|
|
|
return goods;
|
|
|
}
|
|
|
|
|
|
- if ("createSelfGoods".equals(procJob)) {
|
|
|
- if (!StringUtils.isEmpty(goodsMass.getSupplyCompCd())) {
|
|
|
- throw new IllegalStateException("입점상품은 입점상품등록으로 작업해 주세요.");
|
|
|
- }
|
|
|
- } else {
|
|
|
- if ("S0001".equals(goodsMass.getSupplyCompCd()) || "S0002".equals(goodsMass.getSupplyCompCd())) {
|
|
|
- throw new IllegalStateException("자사상품은 자사상등록으로 작업해 주세요.");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// wms 상품 정보 확인
|
|
|
WmsGoods wmsGoodsInfo = goodsDao.getWmsGoodsInfo(goods);
|
|
|
if (wmsGoodsInfo == null) {
|
|
|
@@ -1306,7 +1314,6 @@ public class TssGoodsService {
|
|
|
|
|
|
goodsMass.setSupplyCompCd(supplyCompCd); // 업체 코드
|
|
|
|
|
|
-
|
|
|
// 상품명
|
|
|
if (StringUtils.isEmpty(goodsMass.getGoodsNm())) {
|
|
|
goods.setGoodsRegMsg("상품명 오류");
|
|
|
@@ -1332,9 +1339,10 @@ public class TssGoodsService {
|
|
|
goods.setGoodsStat("10");
|
|
|
return goods;
|
|
|
}
|
|
|
+ goods.setItemkindNm(getItemkindList.iterator().next().getItemkindLeafNm()); //LEAF품목명
|
|
|
|
|
|
// 스타일 년도
|
|
|
- if (StringUtils.isEmpty(goodsMass.getStyleYear()) || goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getStyleYear()) || goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
|
|
|
goods.setGoodsRegMsg("스타일 년도 오류");
|
|
|
goods.setGoodsStat("10");
|
|
|
return goods;
|
|
|
@@ -1430,18 +1438,18 @@ public class TssGoodsService {
|
|
|
int costPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getCostPrice(), ",", "").trim());
|
|
|
// 원가
|
|
|
goods.setCostPrice(costPrice);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
goods.setCostPrice(0);
|
|
|
}
|
|
|
|
|
|
// 정상이월
|
|
|
- if (StringUtils.isEmpty(goodsMass.getSexGb())) {
|
|
|
- goods.setGoodsRegMsg("성별 오류");
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getFormalGb())) {
|
|
|
+ goods.setGoodsRegMsg("정상이월 오류");
|
|
|
goods.setGoodsStat("10");
|
|
|
return goods;
|
|
|
}
|
|
|
goods.setFormalGb(goodsMass.getFormalGb());
|
|
|
- commonCode.setCdGb("G009"); // 정상이월구분
|
|
|
+ commonCode.setCdGb("G009"); //정상이월
|
|
|
commonCode.setCd(goods.getFormalGb());
|
|
|
Collection<CommonCode> formalGbList = rendererService.getCommonCodeList(commonCode);
|
|
|
if (formalGbList == null || formalGbList.isEmpty()) {
|
|
|
@@ -1517,7 +1525,7 @@ public class TssGoodsService {
|
|
|
goodsMass.setRegSuccYn("Y");
|
|
|
goodsMass.setRegFailRsn(goods.getGoodsRegMsg());
|
|
|
goodsMass.setRegNo(TssSession.getInfo().getUserNo());
|
|
|
- //model은 string 테이블은 number 형이라 ,,,
|
|
|
+ //model은 string 테이블은 number 형이라 ,,,
|
|
|
if (StringUtils.isEmpty(goodsMass.getListPrice())) {
|
|
|
goodsMass.setListPrice("0");
|
|
|
}
|
|
|
@@ -1547,13 +1555,14 @@ public class TssGoodsService {
|
|
|
* @since 2021. 01. 12
|
|
|
*/
|
|
|
private Goods getGoodsNotiCheck(Goods goods, Collection<GoodsNotiInfo> goodsNotiList, GagaMap excelMap, String procJob) {
|
|
|
-
|
|
|
+ log.info("[getGoodsNotiCheck goodsNotiList] =>{}", goodsNotiList);
|
|
|
// 고시항목 필수값 입력 확인
|
|
|
int index = 0;
|
|
|
|
|
|
if ("createSelfGoods".equals(procJob)) {
|
|
|
for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
|
|
|
if ("Y".equals(goodsNotiInfo.getReqYn()) && StringUtils.isEmpty(goodsNotiInfo.getNiContent())) {
|
|
|
+ log.info("[goodsNotiInfo] =>{}", goodsNotiInfo);
|
|
|
goods.setGoodsRegMsg("고시항목 오류");
|
|
|
goods.setGoodsStat("G008_20");
|
|
|
return goods;
|
|
|
@@ -1623,4 +1632,554 @@ public class TssGoodsService {
|
|
|
index++;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품대량등록 엑셀 저장 - 입점상품
|
|
|
+ *
|
|
|
+ * @param ecxelGoodsList, excelFilename, procJob(자사:createSelfGoods, 입점:createGoods)
|
|
|
+ * @return
|
|
|
+ * @author eskim
|
|
|
+ * @since 2021. 01. 19
|
|
|
+ */
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public String createExceluploadGoods(GagaMap gagaMap, String procJob) {
|
|
|
+
|
|
|
+ GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
|
|
|
+
|
|
|
+ // 상품기본정보
|
|
|
+ Goods goods = this.createGoodsInfo(goodsMass, procJob);
|
|
|
+
|
|
|
+ if ("10".equals(goods.getGoodsStat())) { // 정보 오류
|
|
|
+ this.setGoodsRegResult(goods, goodsMass, procJob);
|
|
|
+ return goods.getGoodsStat(); //continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //상품코드 생성
|
|
|
+ goods.setGoodsCd(this.getGoodsCodeSeq("E", goods.getBrandCd())); // 입점상품 상품코드 생성
|
|
|
+
|
|
|
+ // 상품고시정보 - 항목및 기본값
|
|
|
+ Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goods);
|
|
|
+ if (goodsNotiList == null || goodsNotiList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("품목의 고시정보 없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ this.setGoodsRegResult(goods, goodsMass, procJob);
|
|
|
+ return goods.getGoodsStat();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 할인율
|
|
|
+ goods.setDcRate((int)(this.getDcRate(goods.getListPrice(), goods.getCurrPrice())));
|
|
|
+
|
|
|
+ Collection<Option> stockList = new ArrayList<>();
|
|
|
+ // 입점상품 사이즈 작업
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getOptStr())) {
|
|
|
+ goods.setGoodsRegMsg("옵션 정보 없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ this.setGoodsRegResult(goods, goodsMass, procJob);
|
|
|
+ return goods.getGoodsStat();
|
|
|
+ }
|
|
|
+
|
|
|
+ //옵션1[필수]^옵션2[선택]^추가금액^안전재고[필수]^판매재고[필수] |
|
|
|
+ //검정^90^0^0^10|검정^95^0^0^8|검정^100^0^0^5|파랑^90^0^0^15|파랑^95^0^0^5|파랑^100^0^0^1|파랑^105^0^0^7
|
|
|
+
|
|
|
+ String[] arrSizeCd = GagaStringUtil.cutTokenToArray(goodsMass.getOptStr().trim(), "|");
|
|
|
+ for (int i = 0; i < arrSizeCd.length; i++) {
|
|
|
+ String[] arrOptCd = GagaStringUtil.cutTokenToArray(arrSizeCd[i], "^");
|
|
|
+ if (arrOptCd.length != 5 ) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 옵션구분자[^] 갯수 상이 ");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 옵션1 - 필수
|
|
|
+ if (StringUtils.isEmpty(arrOptCd[0])) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 옵션1 정보없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 추가금액 - 필수
|
|
|
+ if (StringUtils.isEmpty(arrOptCd[2])) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액 정보없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!arrOptCd[2].trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액이 숫자 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 안전재고 - 필수
|
|
|
+ if (StringUtils.isEmpty(arrOptCd[3])) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 정보없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!arrOptCd[3].trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 숫자 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 판매재고 - 필수
|
|
|
+ if (StringUtils.isEmpty(arrOptCd[4])) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 정보없음");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (!arrOptCd[4].trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 숫자 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ Option goodsStock = new Option();
|
|
|
+ goodsStock.setGoodsCd(goods.getGoodsCd());
|
|
|
+ goodsStock.setOptCd(goods.getGoodsCd() + "-" + (i+1));
|
|
|
+ goodsStock.setOptCd1(arrOptCd[0].trim());
|
|
|
+ goodsStock.setOptCd2(arrOptCd[1].trim());
|
|
|
+ goodsStock.setAddPrice(Integer.parseInt(arrOptCd[2]));
|
|
|
+ goodsStock.setBaseStockQty(Integer.parseInt(arrOptCd[3]));
|
|
|
+ goodsStock.setCurrStockQty(Integer.parseInt(arrOptCd[4]));
|
|
|
+ goodsStock.setSoldoutYn("N");
|
|
|
+ goodsStock.setDispOrd(i + 1);
|
|
|
+ goodsStock.setDispYn("Y");
|
|
|
+ goodsStock.setRegNo(goods.getRegNo());
|
|
|
+ goodsStock.setUpdNo(goods.getUpdNo());
|
|
|
+
|
|
|
+ stockList.add(goodsStock);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("10".equals(goods.getGoodsStat())) { // 정보 오류
|
|
|
+ this.setGoodsRegResult(goods, goodsMass, procJob);
|
|
|
+ return goods.getGoodsStat(); //continue
|
|
|
+ }
|
|
|
+
|
|
|
+ goodsDao.createGoods(goods); // 상품기본 저장
|
|
|
+ goodsDao.createGoodsSmmary(goods); // 상품통계 생성
|
|
|
+
|
|
|
+ this.createGoodsSize(goods, stockList); // 입점 상품사이즈 정보 자장
|
|
|
+
|
|
|
+ goodsMass.setGoodsCd(goods.getGoodsCd());
|
|
|
+
|
|
|
+ int index = 0;
|
|
|
+ // 상품 등록시 고시정보 처리
|
|
|
+ for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
|
|
|
+ if (!StringUtils.isEmpty(gagaMap.getString("niContent" + (index + 1)))) {
|
|
|
+ goodsNotiInfo.setNiContent(gagaMap.getString("niContent" + (index + 1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("G005_006".equals(goodsNotiInfo.getNiItemCd())) { //제조국
|
|
|
+ if (!StringUtils.isEmpty(goods.getOriginNm())) {
|
|
|
+ goodsNotiInfo.setNiContent(goods.getOriginNm());
|
|
|
+ }
|
|
|
+ } else if ("G005_009".equals(goodsNotiInfo.getNiItemCd())) { //제조년월
|
|
|
+ if (!StringUtils.isEmpty(goods.getMakeYmd())) {
|
|
|
+ goodsNotiInfo.setNiContent(goods.getMakeYmd());
|
|
|
+ }
|
|
|
+ } else if ("G005_097".equals(goodsNotiInfo.getNiItemCd())) { //수입여부
|
|
|
+ if (!StringUtils.isEmpty(goods.getOriginNm()) &&
|
|
|
+ (goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
|
|
|
+ goodsNotiInfo.setNiContent("N");
|
|
|
+ } else {
|
|
|
+ goodsNotiInfo.setNiContent("Y");
|
|
|
+ }
|
|
|
+ } else if ("G005_099".equals(goodsNotiInfo.getNiItemCd())) { //종류
|
|
|
+ if (!StringUtils.isEmpty(goods.getItemkindNm())) {
|
|
|
+ goodsNotiInfo.setNiContent(goods.getItemkindNm());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("[goodsNotiList goodsNotiList goodsNotiList ]={}", goodsNotiList);
|
|
|
+ //고시항목 필수값 확인
|
|
|
+ goods = this.getGoodsNotiCheck(goods, goodsNotiList, gagaMap, procJob);
|
|
|
+
|
|
|
+ //고시 필수 항목 미입력으로 상품 상태 변경
|
|
|
+ if ("G008_20".equals(goods.getGoodsStat())) {
|
|
|
+ goodsDao.updateGoodsStatOnly(goods);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.createGoodsNoti(gagaMap, goodsNotiList); // 상품고시정보 저장
|
|
|
+
|
|
|
+ // 사용자 검색어를 검색어에 적용
|
|
|
+ String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
|
|
|
+ if (!StringUtils.isEmpty(goods.getGoodsSnm1())) {
|
|
|
+ String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
|
|
|
+ StringBuilder tempGoodsSnm = new StringBuilder();
|
|
|
+ for (String loopGoodsSnm : arrGoodsSnm) {
|
|
|
+ if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
|
|
|
+ tempGoodsSnm.append(loopGoodsSnm).append(";");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ goods.setGoodsSnm(tempGoodsSnm.toString() + goodsSnm);
|
|
|
+
|
|
|
+ } else if (!goodsSnm.equals(goods.getGoodsSnm())) {
|
|
|
+ goods.setGoodsSnm(goodsSnm);
|
|
|
+ }
|
|
|
+
|
|
|
+ goodsDao.updateGoodsSnm(goods);
|
|
|
+
|
|
|
+ goodsDao.createCategoryGoods(goods);
|
|
|
+
|
|
|
+ this.setGoodsRegResult(goods, goodsMass, procJob);
|
|
|
+
|
|
|
+ return goods.getGoodsStat();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품등록 - 상품기본정보 - 입점상품
|
|
|
+ *
|
|
|
+ * @param goodsMass
|
|
|
+ * @param excelFilename
|
|
|
+ * @author eskim
|
|
|
+ * @since 2021. 01. 19
|
|
|
+ */
|
|
|
+ private Goods createGoodsInfo(GoodsMass goodsMass, String procJob) {
|
|
|
+
|
|
|
+ Goods goods = new Goods();
|
|
|
+ goods.setGoodsStat("G008_20"); // 상품상태
|
|
|
+ goods.setGoodsRegMsg("이미지 등록 필");
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getSupplyGoodsCd())) {
|
|
|
+ goods.setGoodsRegMsg("공급업체 상품코드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setSupplyGoodsCd(goodsMass.getSupplyGoodsCd());
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getSupplyCompCd())) {
|
|
|
+ goods.setGoodsRegMsg("공급업체 코드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setSupplyCompCd(goodsMass.getSupplyCompCd());
|
|
|
+
|
|
|
+ // 상품코드 중복여부 확인 - 입점업체코드+입점상품코드
|
|
|
+ Goods goodsDup = goodsDao.getGoods(goods);
|
|
|
+ if (goodsDup != null) {
|
|
|
+ goods.setGoodsRegMsg("상품코드 중복등록요청");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 브랜드
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getBrandCd())) {
|
|
|
+ goods.setGoodsRegMsg("브랜드코드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setBrandCd(goodsMass.getBrandCd()); // 브랜드 코드
|
|
|
+ // 브랜드 확인
|
|
|
+ Brand brand = new Brand();
|
|
|
+ brand.setBrandCd(goods.getBrandCd());
|
|
|
+ Collection<Brand> brandList = businessService.getBrandList(brand);
|
|
|
+ if (brandList == null || brandList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("브랜드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ float pntPrate = 0.0f;
|
|
|
+ float pntMrate = 0.0f;
|
|
|
+ float sellFeeRate = 0.0f;
|
|
|
+ String delvFeeCd = "";
|
|
|
+ String supplyCompCd = "";
|
|
|
+ for (Brand tmpBrand : brandList) {
|
|
|
+ if ("G009_10".equals(goods.getFormalGb())) {
|
|
|
+ pntPrate = tmpBrand.getPntPrate10();
|
|
|
+ pntMrate = tmpBrand.getPntMrate10();
|
|
|
+ } else {
|
|
|
+ pntPrate = tmpBrand.getPntPrate20();
|
|
|
+ pntMrate = tmpBrand.getPntMrate20();
|
|
|
+ }
|
|
|
+ delvFeeCd = tmpBrand.getDelvFeeCd(); //배송비정책 코드
|
|
|
+ supplyCompCd = tmpBrand.getSupplyCompCd(); //업체코드
|
|
|
+ sellFeeRate = tmpBrand.getSellFeeRate(); //판매수수료율
|
|
|
+ }
|
|
|
+ goods.setPntPrate(pntPrate); // 포인트적립율(PC)
|
|
|
+ goods.setPntMrate(pntMrate); // 포인트적립율(MOBILE)
|
|
|
+ goods.setSupplyCompCd(supplyCompCd); // 업체코드
|
|
|
+ goods.setDelvFeeCd(delvFeeCd); // 배송비정책 코드
|
|
|
+ goods.setSellFeeRate(sellFeeRate); // 판매수수료율
|
|
|
+
|
|
|
+ goodsMass.setSupplyCompCd(supplyCompCd); // 업체 코드
|
|
|
+
|
|
|
+ // 상품명
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getGoodsNm())) {
|
|
|
+ goods.setGoodsRegMsg("상품명 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setGoodsNm(goodsMass.getGoodsNm().replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", ""));
|
|
|
+
|
|
|
+ if (!StringUtils.isEmpty(goodsMass.getGoodsTnm())) {
|
|
|
+ goods.setGoodsTnm(goodsMass.getGoodsTnm().replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", "")); // 상품 타이틀
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(goodsMass.getGoodsSnm1())) {
|
|
|
+ goods.setGoodsSnm1(goodsMass.getGoodsSnm1().replaceAll("(\\r\\n|\\r|\\n|\\n\\r|\\s)", "")); // 상품 사용자 검색어
|
|
|
+ }
|
|
|
+
|
|
|
+ // 품목코드
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getItemkindCd())) {
|
|
|
+ goods.setGoodsRegMsg("품목코드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setItemkindCd(goodsMass.getItemkindCd());
|
|
|
+
|
|
|
+ Itemkind itemkind = new Itemkind();
|
|
|
+ itemkind.setItemkindCd(goodsMass.getItemkindCd());
|
|
|
+ itemkind.setUseYn("Y");
|
|
|
+ Collection<Itemkind> getItemkindList = goodsDao.getItemkindList(itemkind);
|
|
|
+ if (getItemkindList == null || getItemkindList.size() == 0) {
|
|
|
+ goods.setGoodsRegMsg("품목코드 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setItemkindNm(getItemkindList.iterator().next().getItemkindLeafNm()); //LEAF품목명
|
|
|
+
|
|
|
+ // 스타일 년도
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getStyleYear()) || goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("스타일 년도 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setStyleYear(goodsMass.getStyleYear());
|
|
|
+
|
|
|
+ // 시즌
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getSeasonCd())) {
|
|
|
+ goods.setGoodsRegMsg("시즌 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setSeasonCd(goodsMass.getSeasonCd()); // 시즌
|
|
|
+
|
|
|
+ CommonCode commonCode = new CommonCode();
|
|
|
+ commonCode.setUseYn("Y");
|
|
|
+ commonCode.setCdGb("G006"); // 시즌
|
|
|
+ commonCode.setCd(goods.getSeasonCd());
|
|
|
+ Collection<CommonCode> styleYearList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (styleYearList == null || styleYearList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("시즌 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 성별
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getSexGb())) {
|
|
|
+ goods.setGoodsRegMsg("성별 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setSexGb(goodsMass.getSexGb()); // 성별
|
|
|
+ commonCode.setCdGb("G007"); // 성별
|
|
|
+ commonCode.setCd(goods.getSexGb());
|
|
|
+ Collection<CommonCode> sexGbList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (sexGbList == null || sexGbList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("성별 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 정상가
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getListPrice())) {
|
|
|
+ goods.setGoodsRegMsg("정상가 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ if (!GagaStringUtil.replace(goodsMass.getListPrice(), ",", "").trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("정상가 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 판매가
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getCurrPrice())) {
|
|
|
+ goods.setGoodsRegMsg("판매가 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ if (!GagaStringUtil.replace(goodsMass.getCurrPrice(), ",", "").trim().matches(NUMBER_PATTERN)) {
|
|
|
+ goods.setGoodsRegMsg("판매가 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ int listPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getListPrice(), ",", "").trim());
|
|
|
+ int currPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getCurrPrice(), ",", "").trim());
|
|
|
+
|
|
|
+ if (currPrice > listPrice) {
|
|
|
+ goods.setGoodsRegMsg("판매가 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 정상가
|
|
|
+ goods.setListPrice(listPrice);
|
|
|
+ // 판매가
|
|
|
+ goods.setCurrPrice(currPrice);
|
|
|
+ // 원가
|
|
|
+ goods.setCostPrice(0);
|
|
|
+
|
|
|
+ // 상품구분
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getGoodsGb())) {
|
|
|
+ goods.setGoodsRegMsg("상품구분 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setGoodsGb(goodsMass.getGoodsGb());
|
|
|
+ commonCode.setCdGb("G073"); //상품구분
|
|
|
+ commonCode.setCd(goods.getGoodsGb());
|
|
|
+ Collection<CommonCode> goodsGbList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (goodsGbList == null || goodsGbList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("상품구분 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 정상이월
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getFormalGb())) {
|
|
|
+ goods.setGoodsRegMsg("정상이월 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setFormalGb(goodsMass.getFormalGb());
|
|
|
+ commonCode.setCdGb("G009"); //정상이월
|
|
|
+ commonCode.setCd(goods.getFormalGb());
|
|
|
+ Collection<CommonCode> formalGbList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (formalGbList == null || formalGbList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("정상이월구분 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 원산지 / 제조국
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getOriginCd())) {
|
|
|
+ goods.setGoodsRegMsg("원산지 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setOriginCd(goodsMass.getOriginCd());
|
|
|
+
|
|
|
+ commonCode.setCdGb("G076"); // 원산지
|
|
|
+ commonCode.setCd(goods.getOriginCd());
|
|
|
+ Collection<CommonCode> originCdList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (originCdList == null || originCdList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("원산지 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setOriginNm(originCdList.iterator().next().getCdNm()); //고시정보 적용용
|
|
|
+
|
|
|
+ // 과세구분
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getTaxGb())) {
|
|
|
+ goods.setGoodsRegMsg("과세구분 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setTaxGb(goodsMass.getTaxGb());
|
|
|
+ if (!"10".equals(goodsMass.getTaxGb()) && !"20".equals(goodsMass.getTaxGb())) {
|
|
|
+ goods.setGoodsRegMsg("과세구분 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ //상품연령
|
|
|
+ if (!StringUtils.isEmpty(goodsMass.getAgeGrpCd())) {
|
|
|
+ goods.setAgeGrpCd(goodsMass.getAgeGrpCd());
|
|
|
+
|
|
|
+ commonCode.setCdGb("G023"); // 상품연령
|
|
|
+ commonCode.setCd(goods.getAgeGrpCd());
|
|
|
+ Collection<CommonCode> ageGrpCdList = rendererService.getCommonCodeList(commonCode);
|
|
|
+ if (ageGrpCdList == null || ageGrpCdList.isEmpty()) {
|
|
|
+ goods.setGoodsRegMsg("상품연령 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //성인용품여부
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getAdultYn())) {
|
|
|
+ goods.setGoodsRegMsg("성인용품여부 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setAdultYn(goodsMass.getAdultYn());
|
|
|
+ if (!"Y".equals(goodsMass.getAdultYn()) && !"N".equals(goodsMass.getAdultYn())) {
|
|
|
+ goods.setGoodsRegMsg("성인용품여부 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 제조년월
|
|
|
+ if (StringUtils.isEmpty(goodsMass.getMakeYmd())) {
|
|
|
+ goods.setGoodsRegMsg("제조년월일 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+ goods.setMakeYmd(goodsMass.getMakeYmd());
|
|
|
+
|
|
|
+ SimpleDateFormat dateFormatParser = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ dateFormatParser.setLenient(false);
|
|
|
+ try {
|
|
|
+ dateFormatParser.parse(goodsMass.getMakeYmd());
|
|
|
+ } catch (Exception e) {
|
|
|
+ goods.setGoodsRegMsg("제조년월일 오류");
|
|
|
+ goods.setGoodsStat("10");
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+ goods.setGoodsType("G056_N"); //상품타입
|
|
|
+ goods.setDistributionGb("G065_20"); //유통구분
|
|
|
+ goods.setSelfGoodsYn("N"); // 자사상품여부
|
|
|
+ goods.setSelfMallYn("Y"); //자사몰 노출여부
|
|
|
+ goods.setErpStockLinkYn("N"); // ERP재고연동여부
|
|
|
+
|
|
|
+ goods.setRegNo(TssSession.getInfo().getUserNo());
|
|
|
+ goods.setUpdNo(TssSession.getInfo().getUserNo());
|
|
|
+
|
|
|
+ return goods;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품 코드 생성
|
|
|
+ *
|
|
|
+ * @param goodsType - 상품타입
|
|
|
+ * @param goodsCdAfter - 상품시퀀스 앞에 붙는명
|
|
|
+ * @return
|
|
|
+ * @author eskim
|
|
|
+ * @since 2020. 10. 30
|
|
|
+ */
|
|
|
+ public String getGoodsCodeSeq(String goodsType, String goodsCdAfter) {
|
|
|
+
|
|
|
+ //상품코드 12자리
|
|
|
+ String goodsCd = "";
|
|
|
+ Goods goods = new Goods();
|
|
|
+ goodsDao.createGoodsSequence(goods);
|
|
|
+ String goodsSeq = GagaStringUtil.getLPadding(Integer.toString(goods.getGoodsSq()), 8, "0");
|
|
|
+ if ("S".equals(goodsType) || "D".equals(goodsType)) {
|
|
|
+ goodsCd = SELF_GOOODS_AFTER + goodsCdAfter + goodsSeq;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ goodsCd = goodsCdAfter + goodsSeq; // 입점 : 브랜드코드
|
|
|
+ }
|
|
|
+ return goodsCd;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 상품등록 - 상품재고정보 (입점)
|
|
|
+ *
|
|
|
+ * @param goods
|
|
|
+ * @param excelMap
|
|
|
+ * @return TsaGoods
|
|
|
+ * @author eskim
|
|
|
+ * @since 2021. 01. 19
|
|
|
+ */
|
|
|
+ private void createGoodsSize(Goods goods, Collection<Option> stockist) {
|
|
|
+
|
|
|
+ for (Option stock : stockist) {
|
|
|
+ goodsDao.saveStock(stock);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|