엑셀업로드 에러 수정정

This commit is contained in:
2026-02-19 17:33:39 +09:00
parent 858cd5b8bc
commit 9d18095cf0
4 changed files with 95 additions and 76 deletions

View File

@@ -1004,26 +1004,28 @@ public class AmaranthApprovalApiClient {
}
/**
* AES128 CBC PKCS5Padding 암호화 (loginId 또는 empSeq)
* 문: 현재날짜(YYYYMMDDHHmmss)▦값 → AES 암호화 → Base64
* Key = API상품연동설정 메뉴에서 확인 가능 (정확히 16바이트)
* AES128 CBC PKCS5Padding 암호화 (empSeq)
* 문: 현재날짜(YYYYMMDDHHmmss)▦값 → AES 암호화 → Base64
* Key = groupSeq 앞 16바이트, IV = Key와 동일
* 타임스탬프는 반드시 한국시간(KST) 사용
*/
private String encryptValue(String value) throws Exception {
// 현재 날짜시간 (YYYYMMDDHHmmss)
String currentDateTime = new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());
// 한국시간(KST) 기준 타임스탬프 생성 (Docker 서버가 UTC일 경우 대비)
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMddHHmmss");
sdf.setTimeZone(java.util.TimeZone.getTimeZone("Asia/Seoul"));
String currentDateTime = sdf.format(new java.util.Date());
// 암호화할 평문: 현재날짜시간▦값 (반드시 특수문자 ▦ 사용)
String plainText = currentDateTime + "\u25A6" + value;
System.out.println("[AES] plainText: " + plainText);
System.out.println("[AES] timestamp(KST): " + currentDateTime);
System.out.println("[AES] AES_KEY: " + AES_KEY + " (길이: " + AES_KEY.length() + ")");
// 문서 샘플코드: Key.getBytes()를 직접 사용 (Key, IV 동일)
byte[] keyData = AES_KEY.getBytes("UTF-8");
// AES128 16바이트 키 필요 - 키가 16바이트가 아니면 조정
if(keyData.length != 16){
System.out.println("[AES] 키 길이가 16바이트가 아님: " + keyData.length + "바이트 → 16바이트로 조정");
// AES-128: 16바이트 키 (groupSeq 앞 16바이트)
if(keyData.length != 16) {
System.out.println("[AES] 키 길이 조정: " + keyData.length + "바이트 → 16바이트");
byte[] key16 = new byte[16];
System.arraycopy(keyData, 0, key16, 0, Math.min(keyData.length, 16));
keyData = key16;

View File

@@ -3975,17 +3975,17 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
</if>
) VALUES
(
#{BOM_REPORT_OBJID},
#{OBJID},
#{PARENT_OBJID},
#{CHILD_OBJID},
#{PARENT_PART_NO},
#{PART_NO},
<!-- (SELECT PART_NO FROM BOM_PART_QTY WHERE 1=1 AND CHILD_OBJID = #{PARENT_OBJID} AND BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}),
#{PART_OBJID}, -->
#{QTY},
#{ITEM_QTY},
#{QTY_TEMP},
#{BOM_REPORT_OBJID},
#{OBJID},
#{PARENT_OBJID},
#{CHILD_OBJID},
#{PARENT_PART_NO},
#{PART_NO},
<!-- (SELECT PART_NO FROM BOM_PART_QTY WHERE 1=1 AND CHILD_OBJID = #{PARENT_OBJID} AND BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}),
#{PART_OBJID}, -->
COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{ITEM_QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{QTY_TEMP}, ''), '0')::NUMERIC,
NOW(),
#{WRITER},
nextval('seq_bom_qty'),
@@ -7545,46 +7545,46 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
,UNIT_LENGTH
,UNIT_QTY
) VALUES (
#{PART_OBJID}::NUMERIC
,#{PART_NO}
,#{PART_NAME}
,#{UNIT}
,#{QTY}
,#{SPEC}
,#{MATERIAL}
,#{THICKNESS}
,#{WIDTH}
,#{HEIGHT}
,#{OUT_DIAMETER}
,#{IN_DIAMETER}
,#{LENGTH}
,#{REMARK}
,'create'
,now()
,#{CONNECTUSERID}
,'1'
,#{PART_TYPE}
,#{PRODUCT_MGMT_OBJID}
,#{SUPPLY_CODE}
,#{MAKER}
,#{CONTRACT_OBJID}
,#{POST_PROCESSING}
,#{HEAT_TREATMENT_HARDNESS}
,#{HEAT_TREATMENT_METHOD}
,#{SURFACE_TREATMENT}
,#{ACCTFG}
,#{ODRFG}
,#{UNIT_DC}
,#{UNITMANG_DC}
,#{UNITCHNG_NB}::NUMERIC
,COALESCE(#{LOT_FG}, '0')
,COALESCE(#{USE_YN}, '1')
,COALESCE(#{QC_FG}, '0')
,COALESCE(#{SETITEM_FG}, '0')
,COALESCE(#{REQ_FG}, '0')
,#{UNIT_LENGTH}
,#{UNIT_QTY}
)
#{PART_OBJID}::NUMERIC
,#{PART_NO}
,#{PART_NAME}
,#{UNIT}
,COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC
,#{SPEC}
,#{MATERIAL}
,NULLIF(#{THICKNESS}, '')
,NULLIF(#{WIDTH}, '')
,NULLIF(#{HEIGHT}, '')
,NULLIF(#{OUT_DIAMETER}, '')
,NULLIF(#{IN_DIAMETER}, '')
,NULLIF(#{LENGTH}, '')
,#{REMARK}
,'create'
,now()
,#{CONNECTUSERID}
,'1'
,#{PART_TYPE}
,#{PRODUCT_MGMT_OBJID}
,#{SUPPLY_CODE}
,#{MAKER}
,#{CONTRACT_OBJID}
,#{POST_PROCESSING}
,#{HEAT_TREATMENT_HARDNESS}
,#{HEAT_TREATMENT_METHOD}
,#{SURFACE_TREATMENT}
,#{ACCTFG}
,#{ODRFG}
,#{UNIT_DC}
,#{UNITMANG_DC}
,COALESCE(NULLIF(#{UNITCHNG_NB}, ''), '0')::NUMERIC
,COALESCE(#{LOT_FG}, '0')
,COALESCE(#{USE_YN}, '1')
,COALESCE(#{QC_FG}, '0')
,COALESCE(#{SETITEM_FG}, '0')
,COALESCE(#{REQ_FG}, '0')
,NULLIF(#{UNIT_LENGTH}, '')
,NULLIF(#{UNIT_QTY}, '')
)
</insert>
<!-- 계약제품, 업체명으로 BOM에 등록된 부품정보 조회 -->

View File

@@ -1787,8 +1787,13 @@ public class ApprovalService {
}
String empSeq = CommonUtils.checkNull(person.getEmpseq());
System.out.println("=== Amaranth SSO - 사용자 정보 ===");
System.out.println("userId: " + person.getUserId());
System.out.println("userName: " + person.getUserName());
System.out.println("empSeq: [" + empSeq + "]");
if(empSeq.isEmpty()){
return "{\"resultCode\":-1,\"resultMsg\":\"empSeq 정보가 없습니다. 관리자에게 문의하세요.\"}";
return "{\"resultCode\":-1,\"resultMsg\":\"empSeq 정보가 없습니다. (userId: " + person.getUserId() + ") 관리자에게 문의하세요.\"}";
}
// 파라미터 추출

View File

@@ -5023,16 +5023,25 @@ public class PartMngService extends BaseService {
insertMap.put("PARENT_PART_NO", PARENT_PART_NO);
insertMap.put("PART_NO", PART_NO);
insertMap.put("PART_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NAME")));
insertMap.put("QTY", CommonUtils.checkNull((String)insertMap.get("QTY")));
insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT")));
insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC")));
insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL")));
insertMap.put("THICKNESS", CommonUtils.checkNull((String)insertMap.get("THICKNESS")));
insertMap.put("WIDTH", CommonUtils.checkNull((String)insertMap.get("WIDTH")));
insertMap.put("HEIGHT", CommonUtils.checkNull((String)insertMap.get("HEIGHT")));
insertMap.put("OUT_DIAMETER", CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER")));
insertMap.put("IN_DIAMETER", CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER")));
insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH")));
String qtyVal = CommonUtils.checkNull((String)insertMap.get("QTY"));
insertMap.put("QTY", StringUtils.isBlank(qtyVal) ? "0" : qtyVal);
insertMap.put("ITEM_QTY", StringUtils.isBlank(qtyVal) ? "0" : qtyVal);
insertMap.put("QTY_TEMP", StringUtils.isBlank(qtyVal) ? "0" : qtyVal);
insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT")));
insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC")));
insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL")));
String thicknessVal = CommonUtils.checkNull((String)insertMap.get("THICKNESS"));
insertMap.put("THICKNESS", StringUtils.isBlank(thicknessVal) ? null : thicknessVal);
String widthVal = CommonUtils.checkNull((String)insertMap.get("WIDTH"));
insertMap.put("WIDTH", StringUtils.isBlank(widthVal) ? null : widthVal);
String heightVal = CommonUtils.checkNull((String)insertMap.get("HEIGHT"));
insertMap.put("HEIGHT", StringUtils.isBlank(heightVal) ? null : heightVal);
String outDiameterVal = CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER"));
insertMap.put("OUT_DIAMETER", StringUtils.isBlank(outDiameterVal) ? null : outDiameterVal);
String inDiameterVal = CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER"));
insertMap.put("IN_DIAMETER", StringUtils.isBlank(inDiameterVal) ? null : inDiameterVal);
String lengthVal = CommonUtils.checkNull((String)insertMap.get("LENGTH"));
insertMap.put("LENGTH", StringUtils.isBlank(lengthVal) ? null : lengthVal);
insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE")));
insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
@@ -5047,7 +5056,8 @@ public class PartMngService extends BaseService {
// ERP 연동 필드
insertMap.put("UNIT_DC", CommonUtils.checkNull((String)insertMap.get("UNIT_DC")));
insertMap.put("UNITMANG_DC", CommonUtils.checkNull((String)insertMap.get("UNITMANG_DC")));
insertMap.put("UNITCHNG_NB", CommonUtils.checkNull((String)insertMap.get("UNITCHNG_NB")));
String unitchngNbVal = CommonUtils.checkNull((String)insertMap.get("UNITCHNG_NB"));
insertMap.put("UNITCHNG_NB", StringUtils.isBlank(unitchngNbVal) ? "0" : unitchngNbVal);
String lotFgVal = CommonUtils.checkNull((String)insertMap.get("LOT_FG"));
insertMap.put("LOT_FG", StringUtils.isBlank(lotFgVal) ? "0" : lotFgVal);
String useYnVal = CommonUtils.checkNull((String)insertMap.get("USE_YN"));
@@ -5058,9 +5068,11 @@ public class PartMngService extends BaseService {
insertMap.put("SETITEM_FG", StringUtils.isBlank(setitemFgVal) ? "0" : setitemFgVal);
String reqFgVal = CommonUtils.checkNull((String)insertMap.get("REQ_FG"));
insertMap.put("REQ_FG", StringUtils.isBlank(reqFgVal) ? "0" : reqFgVal);
// 개당길이, 개당소요량
insertMap.put("UNIT_LENGTH", CommonUtils.checkNull((String)insertMap.get("UNIT_LENGTH")));
insertMap.put("UNIT_QTY", CommonUtils.checkNull((String)insertMap.get("UNIT_QTY")));
// 개당길이, 개당소요량
String unitLengthVal = CommonUtils.checkNull((String)insertMap.get("UNIT_LENGTH"));
insertMap.put("UNIT_LENGTH", StringUtils.isBlank(unitLengthVal) ? null : unitLengthVal);
String unitQtyVal = CommonUtils.checkNull((String)insertMap.get("UNIT_QTY"));
insertMap.put("UNIT_QTY", StringUtils.isBlank(unitQtyVal) ? null : unitQtyVal);
insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장
insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));