|
|
|
|
@@ -603,75 +603,17 @@ public class ContractMgmtService {
|
|
|
|
|
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
|
|
|
|
|
paramMap.put("writer", person.getUserId());
|
|
|
|
|
int cnt = sqlSession.update("contractMgmt.saveContractMgmtInfo", paramMap);
|
|
|
|
|
|
|
|
|
|
//영업 수주 완료시 자동 프로젝트 등록 로직
|
|
|
|
|
String result_cd= CommonUtils.checkNull(paramMap.get("contract_result"));
|
|
|
|
|
String contract_objid= CommonUtils.checkNull(paramMap.get("objId"));
|
|
|
|
|
String category_cd= CommonUtils.checkNull(paramMap.get("category_cd"));
|
|
|
|
|
String target_project_no= CommonUtils.checkNull(paramMap.get("target_project_no_direct"));
|
|
|
|
|
int overhaul_order = Integer.parseInt(CommonUtils.checkNull(paramMap.get("overhaul_order"),"1"));
|
|
|
|
|
int project_cnt= Integer.parseInt(CommonUtils.checkNull(paramMap.get("facility_qty"), "1"));
|
|
|
|
|
double contract_price_currency= Double.parseDouble(CommonUtils.checkNull(paramMap.get("contract_price_currency"), "0").replace(",", ""));
|
|
|
|
|
double contract_price= Double.parseDouble(CommonUtils.checkNull(paramMap.get("contract_price"), "0").replace(",", ""));
|
|
|
|
|
|
|
|
|
|
//수주가와 금액은 대수로 나누어서 등록
|
|
|
|
|
paramMap.put("contract_price_currency", String.valueOf(contract_price_currency/project_cnt));
|
|
|
|
|
paramMap.put("contract_price", String.valueOf(contract_price/project_cnt));
|
|
|
|
|
|
|
|
|
|
if("0000964".equals(result_cd)){
|
|
|
|
|
resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
System.out.println("resultList:::"+resultList);
|
|
|
|
|
//resultList = sqlSession.selectOne("contractMgmt.getProjectCnt", paramMap);
|
|
|
|
|
if(null==resultList){
|
|
|
|
|
|
|
|
|
|
for (int i=0; i<project_cnt; i++){
|
|
|
|
|
|
|
|
|
|
paramMap.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
paramMap.put("is_temp", '1');
|
|
|
|
|
paramMap.put("facility_qty", '1');
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
paramMap.put("overhaul_project_no", target_project_no);
|
|
|
|
|
paramMap.put("overhaul_order", overhaul_order+i);
|
|
|
|
|
}else{
|
|
|
|
|
}
|
|
|
|
|
//프로젝트 등록
|
|
|
|
|
cnt = sqlSession.update("project.createProject", paramMap);
|
|
|
|
|
//프로젝트 TASK 등록
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectTask", paramMap);
|
|
|
|
|
//프로젝트 SETUP_TASK 등록
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectSetupTask", paramMap);
|
|
|
|
|
|
|
|
|
|
//project_no - unit 폴더 생성
|
|
|
|
|
//paramMap.put("OBJID", paramMap.get("OBJID"));
|
|
|
|
|
Map<String,Object> projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", paramMap);
|
|
|
|
|
|
|
|
|
|
paramMap.put("contract_objid", paramMap.get("objId"));
|
|
|
|
|
paramMap.put("customer_product", paramMap.get("mechanical_type"));
|
|
|
|
|
List<Map<String,Object>> taskUnitList = (ArrayList)sqlSession.selectList("project.getWbsTaskListByProject", paramMap);
|
|
|
|
|
if(CommonUtils.isNotEmpty(taskUnitList) && !taskUnitList.isEmpty()){
|
|
|
|
|
String projectNo = (String)projectInfo.get("project_no");
|
|
|
|
|
String filepath = Constants.FILE_STORAGE+"\\PART_DATA\\";
|
|
|
|
|
for (Map<String, Object> map : taskUnitList) {
|
|
|
|
|
File file = new File(filepath+File.separator+projectNo+File.separator+CommonUtils.checkNull((String)map.get("unit_no"))+"-"+CommonUtils.checkNull((String)map.get("task_name")));
|
|
|
|
|
if(!file.exists()){
|
|
|
|
|
file.mkdirs();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
// 프로젝트 생성은 수주확정(updateOrderStatus)에서 처리
|
|
|
|
|
// 프로젝트가 이미 존재하는 경우에는 수량/납기 등 업데이트 반영
|
|
|
|
|
resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
if(resultList != null) {
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(cnt > 0){
|
|
|
|
|
//계약완료 일시 메일
|
|
|
|
|
if("0000964".equals(CommonUtils.checkNull(paramMap.get("contract_result")))){
|
|
|
|
|
commonService.SendMail(paramMap,"CONTRACT_COMP",CommonUtils.checkNull(paramMap.get("pm_user_id")));
|
|
|
|
|
//그냥 등록일때 메일
|
|
|
|
|
}else{
|
|
|
|
|
if("regist".equals(CommonUtils.checkNull(paramMap.get("actionType")))){
|
|
|
|
|
if("regist".equals(CommonUtils.checkNull(paramMap.get("actionType")))){
|
|
|
|
|
commonService.SendMail(paramMap,"CONTRACT_REG",CommonUtils.checkNull(paramMap.get("")));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
resultMap.put("result", true);
|
|
|
|
|
@@ -2792,39 +2734,23 @@ private String encodeImageToBase64(String imagePath) {
|
|
|
|
|
|
|
|
|
|
// 합계만 별도 업데이트 (기본 정보는 이미 saveEstimateAndOrderInfo에서 저장됨)
|
|
|
|
|
sqlSession.update("contractMgmt.updateOrderTotalAmounts", paramMap);
|
|
|
|
|
|
|
|
|
|
// 4. 프로젝트 생성 로직 (수주 또는 수주(FCST)인 경우)
|
|
|
|
|
String result_cd = CommonUtils.checkNull(paramMap.get("contract_result"));
|
|
|
|
|
String category_cd = CommonUtils.checkNull(paramMap.get("category_cd"));
|
|
|
|
|
String target_project_no = CommonUtils.checkNull(paramMap.get("target_project_no_direct"));
|
|
|
|
|
|
|
|
|
|
// 수주(0000964) 또는 수주(FCST)(0000968)인 경우 프로젝트 생성
|
|
|
|
|
if("0000964".equals(result_cd) || "0000968".equals(result_cd)){
|
|
|
|
|
// CONTRACT_OBJID로 프로젝트 존재 여부 확인
|
|
|
|
|
Map resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
boolean hasProject = (resultList != null);
|
|
|
|
|
|
|
|
|
|
// 제품구분 확인 (DB에서 조회)
|
|
|
|
|
|
|
|
|
|
// 프로젝트 생성은 수주확정(updateOrderStatus)에서 처리
|
|
|
|
|
// 프로젝트가 이미 존재하는 경우에는 수량/납기 등 업데이트 반영
|
|
|
|
|
String contract_objid_for_project = CommonUtils.checkNull(paramMap.get("objId"));
|
|
|
|
|
Map projectCheckResult = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
if(projectCheckResult != null) {
|
|
|
|
|
Map<String, Object> contractInfo = (Map<String, Object>) sqlSession.selectOne("contractMgmt.getContractBasicInfo", paramMap);
|
|
|
|
|
contractInfo = CommonUtils.toUpperCaseMapKey(contractInfo);
|
|
|
|
|
|
|
|
|
|
String product_cd = contractInfo != null ? CommonUtils.checkNull(contractInfo.get("PRODUCT")) : "";
|
|
|
|
|
boolean isMachine = "0000928".equals(product_cd);
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("제품구분: Machine(0000928) - 품목별 수량만큼 프로젝트 생성");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 품목별로 프로젝트 생성 또는 업데이트 (같은 트랜잭션의 sqlSession 사용)
|
|
|
|
|
paramMap.put("contractObjId", contract_objid);
|
|
|
|
|
List contractItemsRaw = sqlSession.selectList("contractMgmt.getContractItems", paramMap);
|
|
|
|
|
List<Map<String, Object>> contractItems = CommonUtils.toUpperCaseMapKey(contractItemsRaw);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
paramMap.put("contractObjId", contract_objid_for_project);
|
|
|
|
|
List contractItemsRaw = sqlSession.selectList("contractMgmt.getContractItems", paramMap);
|
|
|
|
|
List<Map<String, Object>> contractItems = CommonUtils.toUpperCaseMapKey(contractItemsRaw);
|
|
|
|
|
|
|
|
|
|
if(contractItems != null && !contractItems.isEmpty()) {
|
|
|
|
|
System.out.println("품목 개수: " + contractItems.size() + "개 - 프로젝트 " + (hasProject ? "업데이트" : "생성") + " 시작" + (isMachine ? " (Machine - 수량별 생성)" : ""));
|
|
|
|
|
|
|
|
|
|
for(Map item : contractItems) {
|
|
|
|
|
// 수량 가져오기 (소수점 형태 "2.00"도 처리)
|
|
|
|
|
Object quantityObj = item.get("ORDER_QUANTITY") != null ? item.get("ORDER_QUANTITY") : item.get("QUANTITY");
|
|
|
|
|
int itemQuantity = 1;
|
|
|
|
|
try {
|
|
|
|
|
@@ -2832,109 +2758,22 @@ private String encodeImageToBase64(String imagePath) {
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
itemQuantity = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Machine인 경우 수량만큼 반복, 아니면 1번만 실행
|
|
|
|
|
int loopCount = (isMachine && !hasProject) ? itemQuantity : 1;
|
|
|
|
|
|
|
|
|
|
for(int q = 0; q < loopCount; q++) {
|
|
|
|
|
if(!hasProject) {
|
|
|
|
|
// 프로젝트가 없으면 모든 품목에 대해 생성
|
|
|
|
|
Map<String, Object> projectParam = new HashMap<String, Object>();
|
|
|
|
|
projectParam.putAll(paramMap); // 기본 정보 복사
|
|
|
|
|
|
|
|
|
|
// 품목별 정보 설정
|
|
|
|
|
projectParam.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
projectParam.put("is_temp", '1');
|
|
|
|
|
projectParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
projectParam.put("contract_item_objid", String.valueOf(item.get("OBJID")));
|
|
|
|
|
projectParam.put("part_no", item.get("PART_NO"));
|
|
|
|
|
projectParam.put("part_name", item.get("PART_NAME"));
|
|
|
|
|
// Machine인 경우 각 프로젝트의 수량은 1, 아니면 원래 수량
|
|
|
|
|
projectParam.put("quantity", isMachine ? "1" : String.valueOf(itemQuantity));
|
|
|
|
|
projectParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
projectParam.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("프로젝트 생성 [" + (q+1) + "/" + loopCount + "] - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: 1");
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("프로젝트 생성 - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: " + itemQuantity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 프로젝트 등록
|
|
|
|
|
cnt = sqlSession.update("project.createProject", projectParam);
|
|
|
|
|
// WBS 자동생성 주석처리
|
|
|
|
|
// // 프로젝트 TASK 등록
|
|
|
|
|
// cnt = sqlSession.insert("contractMgmt.insertProjectTask", projectParam);
|
|
|
|
|
// // 프로젝트 SETUP_TASK 등록
|
|
|
|
|
// cnt = sqlSession.insert("contractMgmt.insertProjectSetupTask", projectParam);
|
|
|
|
|
|
|
|
|
|
// 동일 품번 M-BOM 자동 복사 제거 - 수주 시점에는 총생산수량 미확정이므로
|
|
|
|
|
// M-BOM관리에서 생산계획 입력 후 수동 복사하도록 변경
|
|
|
|
|
// if(!isMachine) {
|
|
|
|
|
// copyMbomIfSamePartNoExists(sqlSession,
|
|
|
|
|
// (String)projectParam.get("OBJID"),
|
|
|
|
|
// CommonUtils.checkNull(item.get("PART_NO")),
|
|
|
|
|
// CommonUtils.checkNull(item.get("PART_NAME")),
|
|
|
|
|
// person.getUserId(),
|
|
|
|
|
// itemQuantity);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// WBS 폴더 생성 주석처리
|
|
|
|
|
// // project_no - unit 폴더 생성
|
|
|
|
|
// Map<String,Object> projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", projectParam);
|
|
|
|
|
//
|
|
|
|
|
// projectParam.put("contract_objid", contract_objid);
|
|
|
|
|
// projectParam.put("customer_product", projectParam.get("mechanical_type"));
|
|
|
|
|
// List<Map<String,Object>> taskUnitList = (ArrayList)sqlSession.selectList("project.getWbsTaskListByProject", projectParam);
|
|
|
|
|
// if(CommonUtils.isNotEmpty(taskUnitList) && !taskUnitList.isEmpty()){
|
|
|
|
|
// String projectNo = (String)projectInfo.get("project_no");
|
|
|
|
|
// String filepath = Constants.FILE_STORAGE+"\\PART_DATA\\";
|
|
|
|
|
// for (Map<String, Object> map : taskUnitList) {
|
|
|
|
|
// File file = new File(filepath+File.separator+projectNo+File.separator+CommonUtils.checkNull((String)map.get("unit_no"))+"-"+CommonUtils.checkNull((String)map.get("task_name")));
|
|
|
|
|
// if(!file.exists()){
|
|
|
|
|
// file.mkdirs();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
} else {
|
|
|
|
|
// 프로젝트가 있으면 모든 품목 업데이트 (수량, 금액 등만)
|
|
|
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
|
|
|
updateParam.putAll(paramMap);
|
|
|
|
|
updateParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
// Machine인 경우 수량은 변경하지 않음 (프로젝트별 1로 유지)
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
updateParam.remove("quantity");
|
|
|
|
|
} else {
|
|
|
|
|
updateParam.put("quantity", String.valueOf(itemQuantity));
|
|
|
|
|
}
|
|
|
|
|
updateParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
System.out.println("프로젝트 업데이트 - PART_OBJID: " + item.get("PART_OBJID") + (isMachine ? ", 수량: 변경안함(Machine)" : ", 수량: " + itemQuantity));
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", updateParam);
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
|
|
|
updateParam.putAll(paramMap);
|
|
|
|
|
updateParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
updateParam.remove("quantity");
|
|
|
|
|
} else {
|
|
|
|
|
updateParam.put("quantity", String.valueOf(itemQuantity));
|
|
|
|
|
}
|
|
|
|
|
updateParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", updateParam);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("품목이 없습니다 - 기존 방식으로 프로젝트 생성");
|
|
|
|
|
// 품목이 없는 경우 기존 방식대로 처리
|
|
|
|
|
if(!hasProject){
|
|
|
|
|
paramMap.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
paramMap.put("is_temp", '1');
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
paramMap.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
cnt = sqlSession.update("project.createProject", paramMap);
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectTask", paramMap);
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectSetupTask", paramMap);
|
|
|
|
|
}else{
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sqlSession.commit();
|
|
|
|
|
resultMap.put("result", "true");
|
|
|
|
|
resultMap.put("msg", "저장되었습니다.");
|
|
|
|
|
@@ -3018,48 +2857,23 @@ private String encodeImageToBase64(String imagePath) {
|
|
|
|
|
|
|
|
|
|
// 기본 수주 정보 및 합계 업데이트
|
|
|
|
|
int cnt = sqlSession.update("contractMgmt.updateOrderInfo", paramMap);
|
|
|
|
|
|
|
|
|
|
//영업 수주 완료시 자동 프로젝트 등록 로직
|
|
|
|
|
String result_cd= CommonUtils.checkNull(paramMap.get("contract_result"));
|
|
|
|
|
|
|
|
|
|
String category_cd= CommonUtils.checkNull(paramMap.get("category_cd"));
|
|
|
|
|
String target_project_no= CommonUtils.checkNull(paramMap.get("target_project_no_direct"));
|
|
|
|
|
//int overhaul_order = Integer.parseInt(CommonUtils.checkNull(paramMap.get("overhaul_order"),"1"));
|
|
|
|
|
//int project_cnt= Integer.parseInt(CommonUtils.checkNull(paramMap.get("facility_qty"), "1"));
|
|
|
|
|
//long contract_price_currency= Long.parseLong(CommonUtils.checkNull(paramMap.get("contract_price_currency"), "0"));
|
|
|
|
|
//long contract_price= Long.parseLong(CommonUtils.checkNull(paramMap.get("contract_price"), "0"));
|
|
|
|
|
|
|
|
|
|
//수주가와 금액은 대수로 나누어서 등록
|
|
|
|
|
//paramMap.put("contract_price_currency", contract_price_currency/project_cnt + "");
|
|
|
|
|
//paramMap.put("contract_price", contract_price/project_cnt + "");
|
|
|
|
|
|
|
|
|
|
if("0000964".equals(result_cd) || "0000968".equals(result_cd)){
|
|
|
|
|
// CONTRACT_OBJID로 프로젝트 존재 여부 확인 (한 번만 체크)
|
|
|
|
|
resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
boolean hasProject = (resultList != null);
|
|
|
|
|
|
|
|
|
|
// 제품구분 확인 (DB에서 조회)
|
|
|
|
|
|
|
|
|
|
// 프로젝트 생성은 수주확정(updateOrderStatus)에서 처리
|
|
|
|
|
// 프로젝트가 이미 존재하는 경우에는 수량/납기 등 업데이트 반영
|
|
|
|
|
resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
if(resultList != null) {
|
|
|
|
|
// 제품구분 확인
|
|
|
|
|
Map<String, Object> contractInfo = (Map<String, Object>) sqlSession.selectOne("contractMgmt.getContractBasicInfo", paramMap);
|
|
|
|
|
// MyBatis resultType="map"은 소문자로 반환되므로 대문자로 변환
|
|
|
|
|
contractInfo = CommonUtils.toUpperCaseMapKey(contractInfo);
|
|
|
|
|
|
|
|
|
|
String product_cd = contractInfo != null ? CommonUtils.checkNull(contractInfo.get("PRODUCT")) : "";
|
|
|
|
|
boolean isMachine = "0000928".equals(product_cd);
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("제품구분: Machine(0000928) - 품목별 수량만큼 프로젝트 생성");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 품목별로 프로젝트 생성 또는 업데이트 (같은 트랜잭션의 sqlSession 사용)
|
|
|
|
|
|
|
|
|
|
paramMap.put("contractObjId", contract_objid);
|
|
|
|
|
List contractItemsRaw2 = sqlSession.selectList("contractMgmt.getContractItems", paramMap);
|
|
|
|
|
List<Map<String, Object>> contractItems = CommonUtils.toUpperCaseMapKey(contractItemsRaw2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(contractItems != null && !contractItems.isEmpty()) {
|
|
|
|
|
System.out.println("품목 개수: " + contractItems.size() + "개 - 프로젝트 " + (hasProject ? "업데이트" : "생성") + " 시작" + (isMachine ? " (Machine - 수량별 생성)" : ""));
|
|
|
|
|
|
|
|
|
|
for(Map item : contractItems) {
|
|
|
|
|
// 수량 가져오기 (소수점 형태 "2.00"도 처리)
|
|
|
|
|
Object quantityObj = item.get("ORDER_QUANTITY") != null ? item.get("ORDER_QUANTITY") : item.get("QUANTITY");
|
|
|
|
|
int itemQuantity = 1;
|
|
|
|
|
try {
|
|
|
|
|
@@ -3067,120 +2881,22 @@ private String encodeImageToBase64(String imagePath) {
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
itemQuantity = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Machine인 경우 수량만큼 반복, 아니면 1번만 실행
|
|
|
|
|
int loopCount = (isMachine && !hasProject) ? itemQuantity : 1;
|
|
|
|
|
|
|
|
|
|
for(int q = 0; q < loopCount; q++) {
|
|
|
|
|
if(!hasProject) {
|
|
|
|
|
// 프로젝트가 없으면 모든 품목에 대해 생성
|
|
|
|
|
Map<String, Object> projectParam = new HashMap<String, Object>();
|
|
|
|
|
projectParam.putAll(paramMap); // 기본 정보 복사
|
|
|
|
|
|
|
|
|
|
// 품목별 정보 설정
|
|
|
|
|
projectParam.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
projectParam.put("is_temp", '1');
|
|
|
|
|
projectParam.put("contract_item_objid", String.valueOf(item.get("OBJID")));
|
|
|
|
|
System.out.println("CONTRACT_ITEM_OBJID 매핑: " + item.get("OBJID") + " (type: " + (item.get("OBJID") != null ? item.get("OBJID").getClass().getName() : "null") + ")");
|
|
|
|
|
projectParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
projectParam.put("part_no", item.get("PART_NO"));
|
|
|
|
|
projectParam.put("part_name", item.get("PART_NAME"));
|
|
|
|
|
// Machine인 경우 각 프로젝트의 수량은 1, 아니면 원래 수량
|
|
|
|
|
projectParam.put("quantity", isMachine ? "1" : String.valueOf(itemQuantity));
|
|
|
|
|
projectParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
projectParam.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("프로젝트 생성 [" + (q+1) + "/" + loopCount + "] - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: 1");
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("프로젝트 생성 - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: " + itemQuantity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 프로젝트 등록
|
|
|
|
|
cnt = sqlSession.update("project.createProject", projectParam);
|
|
|
|
|
// WBS 자동생성 주석처리
|
|
|
|
|
// // 프로젝트 TASK 등록
|
|
|
|
|
// cnt = sqlSession.insert("contractMgmt.insertProjectTask", projectParam);
|
|
|
|
|
// // 프로젝트 SETUP_TASK 등록
|
|
|
|
|
// cnt = sqlSession.insert("contractMgmt.insertProjectSetupTask", projectParam);
|
|
|
|
|
|
|
|
|
|
// 동일 품번 M-BOM 자동 복사 제거 - 수주 시점에는 총생산수량 미확정이므로
|
|
|
|
|
// M-BOM관리에서 생산계획 입력 후 수동 복사하도록 변경
|
|
|
|
|
// if(!isMachine) {
|
|
|
|
|
// copyMbomIfSamePartNoExists(sqlSession,
|
|
|
|
|
// (String)projectParam.get("OBJID"),
|
|
|
|
|
// CommonUtils.checkNull(item.get("PART_NO")),
|
|
|
|
|
// CommonUtils.checkNull(item.get("PART_NAME")),
|
|
|
|
|
// person.getUserId(),
|
|
|
|
|
// itemQuantity);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// WBS 폴더 생성 주석처리
|
|
|
|
|
// // project_no - unit 폴더 생성
|
|
|
|
|
// Map<String,Object> projectInfo = (Map)sqlSession.selectOne("project.getProjectMngInfo", projectParam);
|
|
|
|
|
//
|
|
|
|
|
// projectParam.put("contract_objid", contract_objid);
|
|
|
|
|
// projectParam.put("customer_product", projectParam.get("mechanical_type"));
|
|
|
|
|
// List<Map<String,Object>> taskUnitList = (ArrayList)sqlSession.selectList("project.getWbsTaskListByProject", projectParam);
|
|
|
|
|
// if(CommonUtils.isNotEmpty(taskUnitList) && !taskUnitList.isEmpty()){
|
|
|
|
|
// String projectNo = (String)projectInfo.get("project_no");
|
|
|
|
|
// String filepath = Constants.FILE_STORAGE+"\\PART_DATA\\";
|
|
|
|
|
// for (Map<String, Object> map : taskUnitList) {
|
|
|
|
|
// File file = new File(filepath+File.separator+projectNo+File.separator+CommonUtils.checkNull((String)map.get("unit_no"))+"-"+CommonUtils.checkNull((String)map.get("task_name")));
|
|
|
|
|
// if(!file.exists()){
|
|
|
|
|
// file.mkdirs();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
} else {
|
|
|
|
|
// 프로젝트가 있으면 모든 품목 업데이트 (수량, 금액 등만)
|
|
|
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
|
|
|
updateParam.putAll(paramMap);
|
|
|
|
|
updateParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
// Machine인 경우 수량은 변경하지 않음 (프로젝트별 1로 유지)
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
updateParam.remove("quantity");
|
|
|
|
|
} else {
|
|
|
|
|
updateParam.put("quantity", String.valueOf(itemQuantity));
|
|
|
|
|
}
|
|
|
|
|
updateParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
System.out.println("프로젝트 업데이트 - PART_OBJID: " + item.get("PART_OBJID") + (isMachine ? ", 수량: 변경안함(Machine)" : ", 수량: " + itemQuantity));
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", updateParam);
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
|
|
|
updateParam.putAll(paramMap);
|
|
|
|
|
updateParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
updateParam.remove("quantity");
|
|
|
|
|
} else {
|
|
|
|
|
updateParam.put("quantity", String.valueOf(itemQuantity));
|
|
|
|
|
}
|
|
|
|
|
updateParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", updateParam);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("품목이 없습니다 - 기존 방식으로 프로젝트 생성");
|
|
|
|
|
// 품목이 없는 경우 기존 방식대로 처리
|
|
|
|
|
if(!hasProject){
|
|
|
|
|
paramMap.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
paramMap.put("is_temp", '1');
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
paramMap.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
cnt = sqlSession.update("project.createProject", paramMap);
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectTask", paramMap);
|
|
|
|
|
cnt = sqlSession.insert("contractMgmt.insertProjectSetupTask", paramMap);
|
|
|
|
|
}else{
|
|
|
|
|
} else {
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// if(cnt > 0){
|
|
|
|
|
//계약완료 일시 메일
|
|
|
|
|
// if("0000964".equals(CommonUtils.checkNull(paramMap.get("contract_result")))){
|
|
|
|
|
// commonService.SendMail(paramMap,"CONTRACT_COMP",CommonUtils.checkNull(paramMap.get("pm_user_id")));
|
|
|
|
|
//그냥 등록일때 메일
|
|
|
|
|
// }else{
|
|
|
|
|
// if("regist".equals(CommonUtils.checkNull(paramMap.get("actionType")))){
|
|
|
|
|
// commonService.SendMail(paramMap,"CONTRACT_REG",CommonUtils.checkNull(paramMap.get("")));
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
resultMap.put("result", true);
|
|
|
|
|
resultMap.put("msg", Message.SAVE_SUCCESS);
|
|
|
|
|
sqlSession.commit();
|
|
|
|
|
@@ -3205,21 +2921,122 @@ private String encodeImageToBase64(String imagePath) {
|
|
|
|
|
SqlSession sqlSession = null;
|
|
|
|
|
try {
|
|
|
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 수주상태 업데이트
|
|
|
|
|
sqlSession.update("contractMgmt.updateOrderStatusOnly", paramMap);
|
|
|
|
|
|
|
|
|
|
// 수주(0000964) 또는 수주(FCST)(0000968)인 경우 프로젝트 생성 로직 실행
|
|
|
|
|
|
|
|
|
|
String contract_result = CommonUtils.checkNull(paramMap.get("contract_result"));
|
|
|
|
|
if("0000964".equals(contract_result)) {
|
|
|
|
|
// 프로젝트가 없으면 생성
|
|
|
|
|
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
|
|
|
|
|
|
|
|
|
// 수주(0000964) 또는 수주(FCST)(0000968)인 경우 프로젝트 생성 로직 실행
|
|
|
|
|
if("0000964".equals(contract_result) || "0000968".equals(contract_result)){
|
|
|
|
|
|
|
|
|
|
// CONTRACT_OBJID로 프로젝트 존재 여부 확인
|
|
|
|
|
Map resultList = sqlSession.selectOne("contractMgmt.getProjectListBycontractObjid", paramMap);
|
|
|
|
|
if(resultList == null) {
|
|
|
|
|
// 프로젝트 생성 로직은 기존 saveOrderInfo와 동일하게 처리
|
|
|
|
|
System.out.println("수주 확정으로 변경 - 프로젝트 생성 필요시 saveOrderInfo 호출 권장");
|
|
|
|
|
boolean hasProject = (resultList != null);
|
|
|
|
|
|
|
|
|
|
// 계약 기본 정보 조회 (제품구분, 주문유형 등)
|
|
|
|
|
Map<String, Object> contractInfo = (Map<String, Object>) sqlSession.selectOne("contractMgmt.getContractBasicInfo", paramMap);
|
|
|
|
|
contractInfo = CommonUtils.toUpperCaseMapKey(contractInfo);
|
|
|
|
|
|
|
|
|
|
String product_cd = contractInfo != null ? CommonUtils.checkNull(contractInfo.get("PRODUCT")) : "";
|
|
|
|
|
String category_cd = contractInfo != null ? CommonUtils.checkNull(contractInfo.get("CATEGORY_CD")) : "";
|
|
|
|
|
boolean isMachine = "0000928".equals(product_cd);
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("[수주확정] 제품구분: Machine(0000928) - 품목별 수량만큼 프로젝트 생성");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 품목별로 프로젝트 생성 또는 업데이트
|
|
|
|
|
paramMap.put("contractObjId", objId);
|
|
|
|
|
List contractItemsRaw = sqlSession.selectList("contractMgmt.getContractItems", paramMap);
|
|
|
|
|
List<Map<String, Object>> contractItems = CommonUtils.toUpperCaseMapKey(contractItemsRaw);
|
|
|
|
|
|
|
|
|
|
if(contractItems != null && !contractItems.isEmpty()) {
|
|
|
|
|
System.out.println("[수주확정] 품목 개수: " + contractItems.size() + "개 - 프로젝트 " + (hasProject ? "업데이트" : "생성") + " 시작" + (isMachine ? " (Machine - 수량별 생성)" : ""));
|
|
|
|
|
|
|
|
|
|
for(Map item : contractItems) {
|
|
|
|
|
// 수량 가져오기 (소수점 형태 "2.00"도 처리)
|
|
|
|
|
Object quantityObj = item.get("ORDER_QUANTITY") != null ? item.get("ORDER_QUANTITY") : item.get("QUANTITY");
|
|
|
|
|
int itemQuantity = 1;
|
|
|
|
|
try {
|
|
|
|
|
itemQuantity = (int) Double.parseDouble(String.valueOf(quantityObj).replaceAll("[^0-9.]", ""));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
itemQuantity = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Machine인 경우 수량만큼 반복, 아니면 1번만 실행
|
|
|
|
|
int loopCount = (isMachine && !hasProject) ? itemQuantity : 1;
|
|
|
|
|
|
|
|
|
|
for(int q = 0; q < loopCount; q++) {
|
|
|
|
|
if(!hasProject) {
|
|
|
|
|
// 프로젝트가 없으면 모든 품목에 대해 생성
|
|
|
|
|
Map<String, Object> projectParam = new HashMap<String, Object>();
|
|
|
|
|
projectParam.putAll(paramMap);
|
|
|
|
|
|
|
|
|
|
// 품목별 정보 설정
|
|
|
|
|
projectParam.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
projectParam.put("is_temp", '1');
|
|
|
|
|
projectParam.put("contract_item_objid", String.valueOf(item.get("OBJID")));
|
|
|
|
|
projectParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
projectParam.put("part_no", item.get("PART_NO"));
|
|
|
|
|
projectParam.put("part_name", item.get("PART_NAME"));
|
|
|
|
|
// Machine인 경우 각 프로젝트의 수량은 1, 아니면 원래 수량
|
|
|
|
|
projectParam.put("quantity", isMachine ? "1" : String.valueOf(itemQuantity));
|
|
|
|
|
projectParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
// 오버홀/개조인 경우
|
|
|
|
|
String target_project_no = CommonUtils.checkNull(paramMap.get("target_project_no_direct"));
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
projectParam.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
System.out.println("[수주확정] 프로젝트 생성 [" + (q+1) + "/" + loopCount + "] - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: 1");
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("[수주확정] 프로젝트 생성 - PART_OBJID: " + item.get("PART_OBJID") + ", 품번: " + item.get("PART_NO") + ", 품명: " + item.get("PART_NAME") + ", 수량: " + itemQuantity);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 프로젝트 등록
|
|
|
|
|
sqlSession.update("project.createProject", projectParam);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 프로젝트가 있으면 모든 품목 업데이트 (수량, 금액 등만)
|
|
|
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
|
|
|
updateParam.putAll(paramMap);
|
|
|
|
|
updateParam.put("part_objid", item.get("PART_OBJID"));
|
|
|
|
|
// Machine인 경우 수량은 변경하지 않음 (프로젝트별 1로 유지)
|
|
|
|
|
if(isMachine) {
|
|
|
|
|
updateParam.remove("quantity");
|
|
|
|
|
} else {
|
|
|
|
|
updateParam.put("quantity", String.valueOf(itemQuantity));
|
|
|
|
|
}
|
|
|
|
|
updateParam.put("due_date", item.get("DUE_DATE"));
|
|
|
|
|
|
|
|
|
|
System.out.println("[수주확정] 프로젝트 업데이트 - PART_OBJID: " + item.get("PART_OBJID") + (isMachine ? ", 수량: 변경안함(Machine)" : ", 수량: " + itemQuantity));
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", updateParam);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
System.out.println("[수주확정] 품목이 없습니다 - 기존 방식으로 프로젝트 생성");
|
|
|
|
|
// 품목이 없는 경우 기존 방식대로 처리
|
|
|
|
|
if(!hasProject){
|
|
|
|
|
paramMap.put("OBJID", CommonUtils.createObjId());
|
|
|
|
|
paramMap.put("is_temp", '1');
|
|
|
|
|
String target_project_no = CommonUtils.checkNull(paramMap.get("target_project_no_direct"));
|
|
|
|
|
if("0000170".equals(category_cd) || "0000171".equals(category_cd)){
|
|
|
|
|
paramMap.put("overhaul_project_no", target_project_no);
|
|
|
|
|
}
|
|
|
|
|
sqlSession.update("project.createProject", paramMap);
|
|
|
|
|
sqlSession.insert("contractMgmt.insertProjectTask", paramMap);
|
|
|
|
|
sqlSession.insert("contractMgmt.insertProjectSetupTask", paramMap);
|
|
|
|
|
} else {
|
|
|
|
|
sqlSession.update("project.ModifyProjectByContract", paramMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sqlSession.commit();
|
|
|
|
|
} catch(Exception e) {
|
|
|
|
|
if(sqlSession != null) sqlSession.rollback();
|
|
|
|
|
|