Merge branch 'refs/heads/dev'

dev
Jonguk. Lim 2 years ago
commit 065336312d

@ -40,6 +40,8 @@ public interface BizNimsMapper extends AbstractMapper {
//------------------------------------------------------------------------------------------------------
// NIMS BIZ
//------------------------------------------------------------------------------------------------------
int insertDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto);
int updateDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto);
int insertDsuseMgt(final BizNimsRequest.DsuseMgt dto);
int insertDsuseMgtDtl(final BizNimsRequest.DsuseMgtDtl dto);
List<BizNimsResponse.DsuseMgtRes> selectDsuseMgts(final BizNimsRequest.DsuseMgtInq dto);

@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@ -38,68 +39,163 @@ import lombok.experimental.SuperBuilder;
* </pre>
*/
public class BizNimsRequest {
/**
* request
* request
*/
@Schema(name = "DsuseMgt", description = "마약류 폐기 관리 마스터 DTO")
@Data
@Schema(name = "DsuseMgtReceipt", description = "마약류 폐기 관리 신청서 접수 DTO")
@Getter
//@Setter
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@EqualsAndHashCode(callSuper = false)
public static class DsuseMgt2 extends AuditDto {
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class DsuseMgtReceipt extends AuditDto {
/**
* ID
*/
@Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ")
private String dscdmngId;
/**
* ID
*/
@Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ")
@NotEmpty(message = "사용자 ID는 필수 입니다")
private String userId;
/**
* <pre>
*
*
* > > >
* =>
* YYYYMMDD
* - ADDS11
* 01-
* 06-
* 07-
* 11-
* 21-
* 99-
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "원사용자보고식별번호", example = " ")
private String orgUsrRptIdNo;
@Schema(title = "폐기관리진행상태", example = "01")
@NotEmpty(message = "폐기관리진행상태는 필수 입니다")
private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode();
/**
*
*/
@Schema(title = "마약류취급자식별번호", example = "H00008333")
@NotEmpty(message = "마약류취급자식별번호는 필수 입니다")
private String bsshCd;
/**
*
*/
@Schema(requiredMode = REQUIRED, title = "수불상세보고수", example = "1")
@Positive(message="폐기보고 제품 건수(제품수불상세보고수)를 입력해 주세요(ex. 1)")
private Integer rndDtlRptCnt;
/**
* <pre>
*
* update
*
* 01-, 02-,, 03-
* 04- , 05- , 07-, 08-
* 09-, 12-
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "사용자보고식별번호", example = " ")
private String usrRptIdNo;
@Schema(title = "폐기 사유 코드", example = "03")
@NotEmpty(message = "폐기 사유 코드는 필수 입니다")
private String dsusePrvCd;
}
/**
* request
*/
@Schema(name = "DsuseMgtRslt", description = "마약류 폐기 관리 통보 및 결과 처리 DTO")
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@EqualsAndHashCode(callSuper = false)
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class DsuseMgtRslt extends AuditDto {
/**
* ID
*/
@Schema(requiredMode = REQUIRED, title = "폐기 관리 ID", example = " ")
private String dscdmngId;
/**
*
* ID
*/
@JsonProperty(value = "BSSH_CD", required = true)
private String bsshCd;
@Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ")
@NotEmpty(message = "사용자 ID는 필수 입니다")
private String userId;
/**
* <pre>
*
*
* - ADDS11
* 01-
* 02-
* 11-()
* 21-
* 22-
* 31-
* 41-
* 99-
* 06-
* 07-
* 11-
* 21-
* 99-
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "진행 상태 코드", example = " ", allowableValues = {"01", "02", "11", "21", "22", "31", "41", "99"})
@Pattern(regexp = "01|02|11|22|31|41|99", message = "진행 상태 코드는 필수 입니다")
@Schema(title = "폐기관리진행상태", example = "01")
@NotEmpty(message = "폐기관리진행상태는 필수 입니다")
private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode();
/**
* <pre>
* - ()
* </pre>
*/
@Schema(title = "취급일자", example = " ")
@Pattern(regexp = Constants.DATE_REGX, message = "취급일자를 정확히 입력해 주세요(yyyyMMdd)")
private String hdrDe;
/**
*
*/
@Schema(title = "보고일자", example = " ")
@Pattern(regexp = Constants.DATE_REGX, message = "보고일자를 정확히 입력해 주세요(yyyyMMdd)")
private String rptDe;
/**
* <pre>
*
* 1-, 2-, 4-//
* </pre>
*/
@Schema(title = "폐기 구분 코드", example = " ")
@NotEmpty(message = "폐기 구분 코드는 필수 입니다")
private String dsuseSeCd;
/**
* <pre>
*
* 1-, 2-, 3- , 4-, 5-
* 6-, 7-, 8-(,), 9-
* </pre>
*/
@Schema(title = "폐기 방법 코드", example = " ")
@NotEmpty(message = "폐기 방법 코드는 필수 입니다")
private String dsuseMthCd;
/**
*
*/
@Schema(title = "폐기 장소", example = " ")
@NotEmpty(message = "폐기 장소는 필수 입니다")
private String dsuseLoc;
/**
* <pre>
*
* </pre>
*/
@Schema(title = "폐기일자", example = " ")
@Pattern(regexp = Constants.DATE_REGX, message = "폐기일자를 정확히 입력해 주세요(yyyyMMdd)")
private String dsuseDe;
}
/**
@ -128,16 +224,13 @@ public class BizNimsRequest {
/**
* <pre>
*
*
* - ADDS11
* 01-
* 02-
* 11-()
* 21-
* 22-
* 31-
* 41-
* 99-
* 06-
* 07-
* 11-
* 21-
* 99-
* </pre>
*/
@Schema(title = "폐기관리진행상태", example = " ")
@ -158,7 +251,7 @@ public class BizNimsRequest {
private Integer rndDtlRptCnt;
/**
*
* - ()
*/
@Schema(title = "취급일자", example = " ")
@Pattern(regexp = Constants.DATE_REGX, message = "취급일자를 정확히 입력해 주세요(yyyyMMdd)")
@ -262,6 +355,66 @@ public class BizNimsRequest {
List<DsuseMgtDtl> dsuseMgtDtls = new ArrayList<>();
}
/**
* request
*/
@Schema(name = "DsuseMgt", description = "마약류 폐기 관리 마스터 DTO")
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@EqualsAndHashCode(callSuper = false)
public static class DsuseMgt2 extends AuditDto {
@Schema(requiredMode = AUTO, title = "폐기 관리 ID", example = " ")
private String dscdmngId;
@Schema(requiredMode = REQUIRED, title = "사용자 ID", example = " ")
@NotEmpty(message = "사용자 ID는 필수 입니다")
private String userId;
/**
* <pre>
*
*
* > > >
* =>
* YYYYMMDD
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "원사용자보고식별번호", example = " ")
private String orgUsrRptIdNo;
/**
* <pre>
*
* update
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "사용자보고식별번호", example = " ")
private String usrRptIdNo;
/**
*
*/
@JsonProperty(value = "BSSH_CD", required = true)
private String bsshCd;
/**
* <pre>
* - ADDS11
* 01-
* 06-
* 07-
* 11-
* 21-
* 99-
* </pre>
*/
@Schema(requiredMode = REQUIRED, title = "진행 상태 코드", example = " ", allowableValues = {"01", "02", "11", "21", "22", "31", "41", "99"})
@Pattern(regexp = "01|02|11|22|31|41|99", message = "진행 상태 코드는 필수 입니다")
private String prgrsSttsCd = Constants.PRGRS_STTS_CD.RECEIPT.getCode();
}
/**
* request
*/
@ -288,59 +441,63 @@ public class BizNimsRequest {
/**
* _ - 13
*/
@Schema(title = "제품코드", example = " ")
@Schema(requiredMode = REQUIRED, title = "제품코드", example = "8806718050823")
@Pattern(regexp = "[0-9a-zA-Z]{13}", message = "제품코드는 13자리 입니다")
private String prductCd;
/**
*
*/
@Schema(title = "제품명", example = " ")
@Schema(requiredMode = REQUIRED, title = "제품명", example = "아쿠아폴주20밀리리터(프로포폴) (20㎖)")
@NotEmpty(message = "제품명은 필수 입니다")
private String prductNm;
/**
* : 1 ~
*/
@Schema(title = "최소유통단위수량", example = " ")
@Schema(requiredMode = REQUIRED, title = "최소유통단위수량", example = "1")
@Positive(message="최소유통단위 수량을 입력해 주세요(ex. 1)")
private Integer minDistbQy;
/**
* : 0 ~
*/
@Schema(title = "낱개단위수량", example = " ")
@Schema(requiredMode = REQUIRED, title = "낱개단위수량", example = "0")
@PositiveOrZero(message = "낱개단위 수량은 필수 입니다(ex. 0)")
private Integer pceQy;
/**
* - 20
*/
@Schema(title = "제품번호", example = " ")
@Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제조번호는 필수 입니다")
@Schema(requiredMode = REQUIRED, title = "제품제조번호", example = "A1111")
@Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제품제조번호는 필수 입니다")
private String mnfNo;
/**
* - yyyyMMdd
*/
@Schema(title = "제품유효기간", example = " ")
@Schema(requiredMode = REQUIRED, title = "제품유효기간", example = "20300303")
@Pattern(regexp = Constants.DATE_REGX, message = "제품 유효 기간을 정확히 입력해 주세요(yyyyMMdd)")
private String prdValidDe;
/**
* - 20
*/
@Schema(title = "제조일련번호", example = " ")
@Schema(requiredMode = REQUIRED, title = "제조일련번호", example = "A11111111")
@Pattern(regexp = "[0-9a-zA-Z]{1,20}", message = "제조 일련번호는 필수 입니다")
private String mnfSeq;
/**
*
*/
@Schema(title = "폐기수량", example = " ")
@Schema(requiredMode = REQUIRED, title = "폐기수량", example = "2")
@Positive(message = "폐기 수량은 0보다 커야 합니다")
private Integer dsuseQy;
// @Schema(title = "폐기제품이미지", example = " ")
// //@NotEmpty(message = "폐기제품이미지는 필수 입니다")
// private MultipartFile dsusePrdImgFile;
/**
*
*/

@ -2,6 +2,8 @@ package cokr.xit.adds.biz.nims.service;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
import cokr.xit.adds.biz.nims.model.BizNimsRequest;
import cokr.xit.adds.biz.nims.model.BizNimsResponse;
import cokr.xit.adds.inf.nims.model.NimsApiDto;
@ -54,6 +56,8 @@ public interface BizNimsService {
//------------------------------------------------------------------------------------------------------
// NIMS BIZ
//------------------------------------------------------------------------------------------------------
BizNimsRequest.DsuseMgtReceipt saveDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto, final List<BizNimsRequest.DsuseMgtDtl> dtls, List<MultipartFile> files);
BizNimsRequest.DsuseMgtRslt saveDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto, List<MultipartFile> files);
BizNimsRequest.DsuseMgt saveDsuseMgt(final BizNimsRequest.DsuseMgt dto);
List<BizNimsResponse.DsuseMgtRes> getDsuseMgts(final BizNimsRequest.DsuseMgtInq dto);
void modifyPrgsSttsOfDsuseMgt(final BizNimsRequest.DsuseMgt dto);

@ -1,5 +1,9 @@
package cokr.xit.adds.biz.nims.service.bean;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -8,9 +12,11 @@ import java.util.Map;
import javax.validation.Validation;
import javax.validation.Validator;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import cokr.xit.adds.biz.nims.dao.BizNimsMapper;
import cokr.xit.adds.biz.nims.model.BizNimsRequest;
@ -28,6 +34,7 @@ import cokr.xit.adds.inf.nims.service.InfNimsService;
import cokr.xit.foundation.component.AbstractServiceBean;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
/**
* <pre>
@ -48,6 +55,18 @@ import lombok.extern.slf4j.Slf4j;
@RequiredArgsConstructor
@Service
public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsService {
/**
*
*/
@Value("${app.file.rpt.path:}")
private String rptPath;
/**
*
*/
@Value("${app.file.img.path:d:/data/adds-api/img}")
private String dsuseImgPath;
/**
*
*/
@ -201,7 +220,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
*/
@Override
public List<NimsApiDto.DsuseRptInfo> saveDsuseRptInfo(NimsApiRequest.DsuseRptInfoReq reqDto) {
List<NimsApiDto.DsuseRptInfo> rsltList = new ArrayList<>();
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
while(true) {
NimsApiResult.Response<NimsApiDto.DsuseRptInfo> rslt = infNimsService.getDsuseRptInfo(reqDto);
@ -209,7 +228,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
if(isEmpty(curList)) break;
rsltList.addAll(curList);
nimsList.addAll(curList);
if(rslt.isEndYn()) break;
reqDto.setPg(String.valueOf(Integer.parseInt(reqDto.getPg()) + 1));
@ -218,7 +237,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
// FIXME: 미완료 보고관리-보고정보 매핑 처리
// 미완료(종료)된 폐기 관리 목록 조회
List<BizNimsResponse.DsuseMgtRes> dsuseMgts = getDsuseMgts(BizNimsRequest.DsuseMgtInq.builder()
.prgrsSttsCd(Constants.PRGRS_STTS_CD.END.getCode())
.prgrsSttsCd(Constants.PRGRS_STTS_CD.COMPLETE.getCode())
.build());
//////////////////////////////////////////////////////////////////////////////
@ -243,19 +262,19 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
// 결과 return 작업 대상, 대상 데이타 List
List<NimsApiDto.DsuseRptInfo> rtnTmplist = new ArrayList<>();
List<NimsApiDto.DsuseRptInfo> rtnlist = new ArrayList<>();
for (NimsApiDto.DsuseRptInfo dto : rsltList) {
for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
Map<String, String> map = new HashMap<>();
map.put("usrRptIdNo", dto.getUsrRptIdNo());
map.put("usrRptIdNo", nimsDto.getUsrRptIdNo());
NimsApiDto.DsuseRptInfo infoDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(map);
if(isEmpty(infoDto)){
workList.add(dto);
workList.add(nimsDto);
}else{
// FIXME: API 적용 필요
// API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상
//if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){
if("Y".equals(infoDto.getUseYn())){
rtnTmplist.add(dto);
rtnlist.add(dto);
rtnTmplist.add(nimsDto);
rtnlist.add(nimsDto);
}
};
}
@ -265,18 +284,15 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
// 신규가 아닌 경우 skip
if(!"0".equals(dto.getRptTyCd())) continue;
dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo());
dto.setRgtr(Constants.NIMS_API_USER_ID);
// 폐기 보고 정보 데이타 생성
createDsuseRpt(dto, true);
createDsuseRpt(dto);
rtnTmplist.add(dto);
rtnlist.add(dto);
// FIXME : 폐기 관리 데이타 매핑
// FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우?
List<BizNimsResponse.DsuseMgtRes> newList = dto.mappingNewDsuseRptInfo(dsuseMgts);
List<BizNimsResponse.DsuseMgtRes> newList = dto.mappingNewDsuseRptInfos(dsuseMgts);
if(newList.size() > 1){
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]");
}
@ -307,7 +323,7 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
updateDsuseRptAndDsuseMgt(dto);
// 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성)
createDsuseRpt(dto, false);
createDsuseRpt(dto);
// FIXME : API 적용 필요
// 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace
@ -340,6 +356,79 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
//------------------------------------------------------------------------------------------------------
// NIMS BIZ
//------------------------------------------------------------------------------------------------------
/**
* <pre>
*
* @param dto BizNimsRequest.DsuseMgtReceipt
* @return BizNimsRequest.DsuseMgt
* </pre>
*/
public BizNimsRequest.DsuseMgtReceipt saveDsuseMgtReceipt(final BizNimsRequest.DsuseMgtReceipt dto, final List<BizNimsRequest.DsuseMgtDtl> dtls, final List<MultipartFile> files) {
ApiUtil.validate(dto, null, validator);
if(dto.getRndDtlRptCnt() != dtls.size()) throw ApiCustomException.create("폐기물 보고수 오류[폐기물 갯수 확인]");
ApiUtil.validate(dtls, null, validator);
dto.setRgtr(dto.getUserId());
if(files.size() != dtls.size()) throw ApiCustomException.create("폐기물 파일 갯수 오류[파일 갯수 확인]");
if(bizNimsMapper.insertDsuseMgtReceipt(dto) == 1){
int dtlCnt = 0;
for (BizNimsRequest.DsuseMgtDtl d : dtls) {
d.setDscdmngId(dto.getDscdmngId());
d.setDscdmngSn(StringUtils.leftPad(dtlCnt + 1 + "", 3, "0"));
d.setRgtr(dto.getUserId());
dtlCnt = dtlCnt + bizNimsMapper.insertDsuseMgtDtl(d);
// FIXME : file upload
// files[dtlCnt].transferTo(new File("path"));
//d.setDsusePrdImgFile(null);
}
if(dtls.size() != dtlCnt) throw ApiCustomException.create("폐기 관리 상세 등록 실패");
} else {
throw ApiCustomException.create("폐기 관리 마스터 등록 실패");
}
return dto;
}
/**
* <pre>
* []
* @param dto BizNimsRequest.DsuseMgtReceipt
* @return BizNimsRequest.DsuseMgt
* </pre>
*/
public BizNimsRequest.DsuseMgtRslt saveDsuseMgtRslt(final BizNimsRequest.DsuseMgtRslt dto, final List<MultipartFile> files) {
ApiUtil.validate(dto, null, validator);
dto.setRgtr(dto.getUserId());
if(bizNimsMapper.updateDsuseMgtRslt(dto) == 1){
int dtlCnt = 0;
String dirPath = dsuseImgPath + Constants.FILE_DLMTR + dto.getDscdmngId();
File f = new File(dirPath);
if(!f.exists()) f.mkdirs();
for (MultipartFile mf : files) {
val name = mf.getOriginalFilename();
val ext = name.substring(name.lastIndexOf("."));
val filename = name.substring(0, name.lastIndexOf("."));
Path path = Paths.get(dirPath + Constants.FILE_DLMTR, name);
// FIXME : file upload
try {
mf.transferTo(path);
//FileCopyUtils.copy(mf.getInputStream(), Files.newOutputStream(path));
} catch (IOException e) {
throw ApiCustomException.create(String.format("폐기 통보[결과] 처리:파일 업로드 실패[%s]", e.getMessage()));
}
//d.setDsusePrdImgFile(null);
}
} else {
throw ApiCustomException.create("폐기 관리 정보 변경[통보(결과) 처리] 실패");
}
return dto;
}
/**
* <pre>
@ -395,163 +484,168 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
return resList;
}
/**
* <pre>
* saveDsuseRptInfo -
* 0. GET
* 1. GET - NIMS API
* 2. (DB ) return List(DB "Y")
* 3. ( '0') (DB ) & return List
* -> ( '0') -> ('2') ('1')
* 4. , (DB ) & return List
* -> 0)
* 1) =
* tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 'N' update
* 2) FIXME -
* -> / clear
* -> -> update
* 3) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl
* -> tb_dsuse_rpt_info 'N'
* 5. return List NIMS
* 6. return List -
* 7. FIXME :
* 8. sort return
* @param reqDto
* @return
* </pre>
*/
// FIXME: API 적용 필요 - nims API 확정후
// FIXME: saveDsuseRptInfo() 메소드를 활용할 수 있도록 구성
@Override
public List<NimsApiDto.DsuseRptInfo> getDsuseMgtMapping(BizNimsRequest.DsuseMgt reqDto) {
// 0. GET 폐기관리 데이타 정보
BizNimsResponse.DsuseMgtRes dsuseMgtDto = getDsuseMgts(
BizNimsRequest.DsuseMgtInq.builder()
.dscdmngIds(List.of(reqDto.getDscdmngId()))
.prgrsSttsCd(null)
.build())
.get(0);
NimsApiRequest.DsuseRptInfoReq rptDto = NimsApiRequest.DsuseRptInfoReq.builder()
.fg("1")
.pg("1")
.fg2("2")
.se("AAR")
.fg3("1")
.fg3("1") // 조회기준일자 : 1-보고일자, 2-취급일자
.sdt("20220101")
.edt("20220131")
.bc(reqDto.getBsshCd())
.fg4(ofCd)
.build();
List<NimsApiDto.DsuseRptInfo> rsltList = new ArrayList<>();
// 1. GET 폐기보고 데이타 목록 - NIMS API 호출
List<NimsApiDto.DsuseRptInfo> nimsList = new ArrayList<>();
while(true) {
NimsApiResult.Response<NimsApiDto.DsuseRptInfo> rslt = infNimsService.getDsuseRptInfo(rptDto);
List<NimsApiDto.DsuseRptInfo> curList = rslt.getResultOrThrow();
if(isEmpty(curList)) break;
rsltList.addAll(curList);
nimsList.addAll(curList);
if(rslt.isEndYn()) break;
rptDto.setPg(String.valueOf(Integer.parseInt(rptDto.getPg()) + 1));
}
// GET 보고관리정보
BizNimsResponse.DsuseMgtRes dsuseMgt = getDsuseMgts(
BizNimsRequest.DsuseMgtInq.builder()
.dscdmngIds(List.of(reqDto.getDscdmngId()))
.prgrsSttsCd(null)
.build())
.get(0);
//////////////////////////////////////////////////////////////////////////////
// FIXME : 테스트를 위한 코드
//////////////////////////////////////////////////////////////////////////////
// for (NimsApiDto.DsuseRptInfo dto : rsltList) {
// // 폐기 관리 데이타 매핑
// for(BizNimsResponse.DsuseMgtResponse mgtDto: dsuseMgts){
// // 폐기 신청서 접수 상태 데이타만 처리
// if(Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())){
// dto.mappingDsuseRptInfo(mgtDto);
// };
// }
// }
// if(true) return null;
//////////////////////////////////////////////////////////////////////////////
// 0. 폐기보고 API 호출 결과 목록에서 기 조회(저장)한 데이타 대상 에서 제외 (usrRptIdNo가 DB에 저장된 경우)
// 작업대상 데이타 List
List<NimsApiDto.DsuseRptInfo> workList = new ArrayList<>();
// 신규 작업대상 데이타 List
List<NimsApiDto.DsuseRptInfo> newList = new ArrayList<>();
// 결과 return 작업 대상, 대상 데이타 List
List<NimsApiDto.DsuseRptInfo> rtnTmplist = new ArrayList<>();
List<NimsApiDto.DsuseRptInfo> rtnlist = new ArrayList<>();
for (NimsApiDto.DsuseRptInfo dto : rsltList) {
List<NimsApiDto.DsuseRptInfo> rtnList = new ArrayList<>();
// 2. 신규 작업 대상(DB에 저장되지 않은 데이타) 및 결과 return 대상 List(DB데이타중 사용여부 "Y") 선별
for (NimsApiDto.DsuseRptInfo nimsDto : nimsList) {
Map<String, String> map = new HashMap<>();
map.put("usrRptIdNo", dto.getUsrRptIdNo());
map.put("usrRptIdNo", nimsDto.getUsrRptIdNo());
NimsApiDto.DsuseRptInfo infoDto = bizNimsMapper.selectDsuseRptInfoByUsrRptIdNo(map);
// 기조회(저장)한 데이타가 아니면 대상에 추가(usrRptIdNo가 DB에 저장되지 않은 경우)
if(isEmpty(infoDto)){
newList.add(nimsDto);
// 기조회(저장)한 데이타 && 마지막 데이타(사용여부 'Y')인 경우는 return 대상에 추가
// 사용자보고번호가 참조사용자보고번호로 들어오는 변경 및 취소건에 의해
// return 대상에서 제외될 수 있슴
}else{
// FIXME: API 적용 필요
// FIXME: API 연계 데이타 확인후 확정 필요
// API 조회 반영된 사용여부가 'Y', 처리상태코드가 미완료인 경우는 return 대상
//if("Y".equals(infoDto.getUseYn()) && !"".equals(infoDto.getStatus())){
if("Y".equals(infoDto.getUseYn())){
rtnTmplist.add(dto);
rtnlist.add(dto);
//rtnTmplist.add(nimsDto);
rtnList.add(nimsDto);
}
};
}
// 1. 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
for (NimsApiDto.DsuseRptInfo dto : workList) {
// 3. 신규 작업 대상중 신규(보고구분 '0')인 데이타 처리(DB 데이타 생성) & 결과 return 대상 List에 추가
// -> 신규(보고구분 '0')인 데이타 먼저 처리해야, 변경('2') 및 취소('1') 데이타 처리 가능
// 신규(rptTyCd : 0) 저장 - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
for (NimsApiDto.DsuseRptInfo dto : newList) {
// 신규가 아닌 경우 skip
if(!"0".equals(dto.getRptTyCd())) continue;
dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo());
dto.setRgtr(Constants.NIMS_API_USER_ID);
// 폐기 보고 정보 데이타 생성
createDsuseRpt(dto, true);
rtnTmplist.add(dto);
rtnlist.add(dto);
createDsuseRpt(dto);
// return List에 추가
rtnList.add(dto);
// FIXME : 폐기 관리 데이타 매핑
// FIXME: 폐기 관리 데이타 폐기보고 매핑 대상 조회인 경우?
List<BizNimsResponse.DsuseMgtRes> newList = List.of();////dto.mappingNewDsuseRptInfo(dsuseMgts);
if(newList.size() > 1){
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]");
BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) {
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
}
}
if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
};
}
// 2. 신규 외의 경우(rptTyCd : 1 - 취소, 2 - 변경)
// 4. 신규 작업 대상중 취소,변경(보고구분 '1', '2')인 처리(DB 데이타 생성) & 결과 return 대상 List에 추가
String errMsg = null;
for (NimsApiDto.DsuseRptInfo dto : workList) {
dto.setRgtr(Constants.NIMS_API_USER_ID);
for (NimsApiDto.DsuseRptInfo dto : newList) {
// 신규인 경우 skip
if("0".equals(dto.getRptTyCd())) continue;
// 2-1. refUsrRptIdNo 필수 체크
// 4-0) 참조사용자보고식별번호 필수 체크
if(isEmpty(dto.getRefUsrRptIdNo())){
throw ApiCustomException.create("데이타 오류[취소 및 변경인 경우 참조사용자식별번호(REF_USR_RPT_ID_NO) 필수]");
}
// 2-2. 폐기보고정보, 폐기관리 변경
// 1) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
// 2) tb_dsuse_mgt 변경
// 조건 : 사용자보고식별번호 = 참조사용자보고식별번호
// => usr_rpt_id_no -> refUsrRptIdNo update
// => 취소인 경우 use_yn = 'N' update
// 폐기관리 및 폐기보고 정보 변경
// 4-1) 사용자보고식별번호 = 참조사용자보고식별번호 인 데이타
// tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 사용여부 'N' update
// 4-2) 폐기 관리 테이블에 사용자보고식별번호 반영
// -> 취소인 경우는 사용자/원사용자 식별번호 clear
// -> 변경인 경우는 사용자보고식별번호 -> 참조사용자보고식별번호 update
updateDsuseRptAndDsuseMgt(dto);
// 2-3. tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성 (취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성)
createDsuseRpt(dto, false);
// 4-3) tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 생성
// -> 취소인 경우는 tb_dsuse_rpt_info의 사용 여부 'N'으로 생성
createDsuseRpt(dto);
// FIXME : API 적용 필요
// 결과 return 대상 데이타 List에서 조회한 변경 대상이 있는 경우 replace
// 결과 return 대상 데이타 List에서 조회한 취소 대상이 있는 경우 삭제
for(NimsApiDto.DsuseRptInfo d : rtnTmplist){
// FIXME : API 적용후 확인 필요
// 5. 결과 return 대상 데이타 List에서 NIMS 변경 데이타인 경우 대상에서 제외
for(NimsApiDto.DsuseRptInfo d : rtnList){
if(d.getOrgUsrRptIdNo().equals(dto.getOrgUsrRptIdNo())
&& d.getUsrRptIdNo().equals(dto.getRefUsrRptIdNo())){
rtnlist.remove(d);
if(dto.getRptTyCd().equals("2")){
rtnlist.add(dto);
}
rtnList.remove(d);
};
}
// 6. return List에 현재 데이타 추가 - 변경인 경우만 추가
if(dto.getRptTyCd().equals("2")){
rtnList.add(dto);
}
// FIXME : 폐기 관리 데이타 매핑
List<BizNimsResponse.DsuseMgtRes> newList = List.of(); ////dto.mappingDsuseRptInfo(dsuseMgts);
if(newList.size() > 1){
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 중복]");
// 7. FIXME : 폐기 관리 데이타 매핑
BizNimsResponse.DsuseMgtRes dsuseMgtRes = dto.mappingNewDsuseRptInfo(dsuseMgtDto);
if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
if (bizNimsMapper.updateMappingDsuseMgt(dsuseMgtDto) == 1) {
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
}
}
if(bizNimsMapper.updateMappingDsuseMgt(newList.get(0)) == 1){
throw ApiCustomException.create("폐기 관리 데이타 매핑 오류[폐기 관리 데이타 매핑 실패]");
};
}
// return dtos;
return workList;
// FIXME: API연계 데이타 확인후 매핑될 데이타가 최상단에 오도록 정렬기준 재정의 필요
rtnList.sort((a, b) -> a.getUsrRptIdNo().compareTo(b.getUsrRptIdNo()));
return rtnList;
}
@Override
@ -671,52 +765,28 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
/**
* <pre>
* tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl
* => tb_dsuse_rpt_info 'N'
* 0) set
* 1) set
* 2)
* - tb_dsuse_rpt_info 'N'
*
*
* 1. (rptTyCd : 0) -
* 2. (rptTyCd : 1, 2) -
* => =
* => ((rptTyCd : 0) )
* =>
* @param dto NimsApiDto.DsuseRptInfo
* @param isNew boolean
* </pre>
*/
private void createDsuseRpt(NimsApiDto.DsuseRptInfo dto, boolean isNew) {
private void createDsuseRpt(NimsApiDto.DsuseRptInfo dto) {
dto.setRgtr(Constants.NIMS_API_USER_ID);
dto.setRptTyCdNm(Constants.RPT_TY_CD.getName(dto.getRptTyCd()));
dto.setDsuseSeCdNm(Constants.DSUSE_SE_CD.getName(dto.getDsuseSeCd()));
dto.setDsusePrvCdNm(Constants.DSUSE_PRV_CD.getName(dto.getDsusePrvCd()));
dto.setDsuseMthCdNm(Constants.DSUSE_MTH_CD.getName(dto.getDsuseMthCd()));
// FIXME : 폐기 관리 테이블에 사용자보고식별번호 반영
// 원 사용자 식별 번호 set - 변경/취소 인 경우
// 신규인 경우는 사용자보고식별번호로 설정
if(!isNew){
String refUsrRptIdNo = dto.getRefUsrRptIdNo();
// 참조사용자보고식별번호로 원사용자보고식별번호조회
while(true) {
Map<String, String> map = bizNimsMapper.recusiveRefUsrRptIdNo(refUsrRptIdNo);
if(map == null) throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 데이타 누락]");
if(!isEmpty(map.get("refUsrRptIdNo"))){
refUsrRptIdNo = map.get("refUsrRptIdNo");
continue;
}
if("0".equals(map.get("rptTyCd"))){
dto.setOrgUsrRptIdNo(map.get("usrRptIdNo"));
break;
} else {
throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 신규보고 데이타 누락]");
}
}
// 신규가 아닌 경우 : 원사용자보고식별번호 조회 & set
if("0".equals(dto.getRptTyCd())){
dto.setOrgUsrRptIdNo(dto.getUsrRptIdNo());
}else{
setOrgUsrRptIdNo(dto);
}
// FIXME : 폐기 관리 테이블에 사용자보고식별번호 반영
if (bizNimsMapper.insertDsuseRptInfo(dto) == 1) {
//취소인 경우 상세 데이타 등록 skip
@ -736,15 +806,53 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
/**
* <pre>
* tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 'N' update
* tb_dsuse_mgt
* : =
* => usr_rpt_id_no -> refUsrRptIdNo update
* => use_yn = 'N' update
* (rptTyCd : 1, 2)
*
* => =
* => ((rptTyCd : 0) )
* =>
* @param dto NIMS (NimsApiDto.DsuseRptInfo)
* </pre>
*/
private void setOrgUsrRptIdNo(NimsApiDto.DsuseRptInfo dto) {
// 원 사용자 식별 번호 set - 변경/취소 인 경우
// 신규인 경우는 사용자보고식별번호로 설정
String refUsrRptIdNo = dto.getRefUsrRptIdNo();
// 참조사용자보고식별번호로 원사용자보고식별번호조회
while(true) {
Map<String, String> map = bizNimsMapper.recusiveRefUsrRptIdNo(refUsrRptIdNo);
if(map == null) throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 데이타 누락]");
if(!isEmpty(map.get("refUsrRptIdNo"))){
refUsrRptIdNo = map.get("refUsrRptIdNo");
continue;
}
if("0".equals(map.get("rptTyCd"))){
dto.setOrgUsrRptIdNo(map.get("usrRptIdNo"));
break;
} else {
throw ApiCustomException.create("데이타 오류[참조사용자로 사용자보고식별번호 조회 실패 - 신규보고 데이타 누락]");
}
}
}
/**
* <pre>
* - tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl
* =
* => tb_dsuse_rpt_info, tb_dsuse_rpt_info_dtl 'N' update
* - tb_dsuse_mgt
*
* => / clear
* => -> update
* @param dto NimsApiDto.DsuseRptInfo
* </pre>
*/
private void updateDsuseRptAndDsuseMgt(NimsApiDto.DsuseRptInfo dto) {
dto.setRgtr(Constants.NIMS_API_USER_ID);
String errMsg;
if ("1".equals(dto.getRptTyCd())) errMsg = "취소";
else errMsg = "변경";
@ -765,9 +873,9 @@ public class BizNimsServiceBean extends AbstractServiceBean implements BizNimsSe
if(cnt == 0) throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg));
// 변경인 경우 상세 데이타 건수와 일치 하지 않는 경우 오류 처리
if ("2".equals(dto.getRptTyCd()) && dto.getRndDtlRptCnt() != cnt) {
throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg));
}
// if ("2".equals(dto.getRptTyCd()) && dto.getRndDtlRptCnt() != cnt) {
// throw ApiCustomException.create(String.format("폐기 정보 상세 %s 실패", errMsg));
// }
} else {
throw ApiCustomException.create(String.format("폐기 정보 %s 실패", errMsg));

@ -2,6 +2,7 @@ package cokr.xit.adds.biz.nims.web;
import java.util.List;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.core.type.TypeReference;
import cokr.xit.adds.biz.nims.model.BizNimsRequest;
import cokr.xit.adds.biz.nims.model.BizNimsResponse;
import cokr.xit.adds.biz.nims.service.BizNimsService;
@ -19,6 +22,7 @@ import cokr.xit.adds.core.model.ApiBaseResponse;
import cokr.xit.adds.core.util.XingUtils;
import cokr.xit.adds.inf.nims.model.NimsApiDto;
import cokr.xit.adds.inf.nims.model.NimsApiRequest;
import cokr.xit.foundation.data.JSON;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.ExampleObject;
@ -93,6 +97,44 @@ public class BizNimsController {
//------------------------------------------------------------------------------------------------------
// NIMS BIZ
//------------------------------------------------------------------------------------------------------
/**
*
* @param dsuseMgtJsonStr JSON String
* @param dsuseMgtDtlsJsonStr JSON String
* @param dsusePrdImgFiles
* @return return
*/
@Operation(summary = "사고 마약류 폐기 관리 폐기 신청서 접수", description = "사고 마약류 폐기 관리 폐기 신청서 접수<br><br>폐기관리 신청서 접수 데이타 생성후 생성 정보 return")
@PostMapping(value = "/saveDsuseMgtReceipt")
public ApiBaseResponse<BizNimsRequest.DsuseMgtReceipt> saveDsuseMgtReceipt(
@RequestParam("dsuseMgtJsonStr") String dsuseMgtJsonStr,
@RequestParam("dsuseMgtDtlsJsonStr") String dsuseMgtDtlsJsonStr,
@RequestParam(value = "dsusePrdImgFiles") List<MultipartFile> dsusePrdImgFiles
) {
JSON json = new JSON();
BizNimsRequest.DsuseMgtReceipt receiptDto = json.parse(dsuseMgtJsonStr, new TypeReference<>() {});
List<BizNimsRequest.DsuseMgtDtl> dsuseMgtDtls = json.parse(dsuseMgtDtlsJsonStr, new TypeReference<>() {});
return ApiBaseResponse.of(bizNimsService.saveDsuseMgtReceipt(receiptDto, dsuseMgtDtls, dsusePrdImgFiles));
}
/**
* []
* @param dsuseMgtRsltJsonStr [] JSON String
* @param dsuseDsuseImgFiles
* @return [] return
*/
@Operation(summary = "사고 마약류 폐기 관리 폐기 신청서 접수", description = "사고 마약류 폐기 관리 폐기 신청서 접수<br><br>폐기관리 신청서 접수 데이타 생성후 생성 정보 return")
@PostMapping(value = "/saveDsuseMgtRslt")
public ApiBaseResponse<BizNimsRequest.DsuseMgtRslt> saveDsuseMgtRslt(
@RequestParam("dsuseMgtRsltJsonStr") String dsuseMgtRsltJsonStr,
@RequestParam(value = "dsuseDsuseImgFiles") List<MultipartFile> dsuseDsuseImgFiles
) {
JSON json = new JSON();
BizNimsRequest.DsuseMgtRslt rsltDto = json.parse(dsuseMgtRsltJsonStr, new TypeReference<>() {});
return ApiBaseResponse.of(bizNimsService.saveDsuseMgtRslt(rsltDto, dsuseDsuseImgFiles));
}
@Operation(summary = "사고 마약류 폐기 관리 생성", description = "사고 마약류 폐기 관리 생성<br><br>폐기관리 데이타 생성후 폐기보고 정보 return")
@io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = {
@Content(mediaType = "application/json", examples = {
@ -187,7 +229,7 @@ public class BizNimsController {
}
@Operation(summary = "barcode 이미지 제품 제조 정보 조회", description = "barcode 이미지 제품 제조 정보 조회<br><br>barcode 이미지를 통한 제품 제조 정보 조회")
@PostMapping(value = "/getProductInfoByQrcodeImg", consumes = { "multipart/form-data" })
@PostMapping(value = "/getProductInfoByQrcodeImg", consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
//@PostMapping(value = "/api/biz/nims/v1/getQrcode")
public ApiBaseResponse<NimsApiDto.ProductInfoKd> getProductInfoByQrcodeImg(
@RequestParam("uploadFiles")

@ -25,6 +25,7 @@ import lombok.Getter;
public class Constants {
public static final String API_URL_PATTERNS = "/*";
public static final Charset CHARSET_UTF8 = StandardCharsets.UTF_8;
public static final String FILE_DLMTR = System.getProperty("os.name").contains("Window") ? "\\" : "/";
public static final String DATE_REGX = "^[12]\\d{3}((0[1-9])|(1[0-2]))(0[1-9]|[12]\\d|3[01])$";
public static final String CUR_DATE_REGX = "^20([2-9][0-9])((0[1-9])|(1[0-2]))(0[1-9]|[12][0-9]|3[01])$";
@ -140,10 +141,11 @@ public class Constants {
}
}
/**
/**
* <pre>
* - ADDS05
* 1:, 2:, 3:, 4:, 5:, 6:, 7:, 8:, 9:
* 1:, 2:, 3:, 4:, 5:,
* 6:, 7:, 8:, 9:
* </pre>
*/
@Getter
@ -183,27 +185,22 @@ public class Constants {
* <pre>
* - ADDS11
* 01-
* 02-
* 11-()
* 21-
* 22-
* 31-
* 41-
* 99-
* 06-
* 07-
* 11-
* 21-
* 99-
* </pre>
*/
@Getter
public enum PRGRS_STTS_CD {
// 폐기보고신청서의 데이타 입력 생성 - 폐기관리 데이타 생성
RECEIPT("01", "폐기신청서접수"),
NOTICE_WRITE("06", "폐기결과통보서작성"),
REPORT_WRITE("07", "폐기내역서작성"),
// 폐기보고 데이타 매핑 완료
MAPPING("02", "폐기보고매핑"),
ACCEPT("11", "민원수령처리(전자결재)"),
NOTICE_WRITE("21", "폐기결과통보서작성"),
REPORT_WRITE("22", "폐기결과보고서작성"),
DRAFT("31", "기안 및 발송"),
REPORT("41", "폐기보고"),
END("99", "종료")
MAPPING("11", "폐기보고확인"),
COMPLETE("99", "폐기보고완료")
;
private final String code;

@ -117,7 +117,7 @@ public class TraceLoggerAspect {
HttpServletRequest request = attributes != null? attributes.getRequest(): null;
//traceApiLogging(JsonUtils.toObjByObj(pjp.getArgs()[0], JSONObject.class), request);
traceApiLogging(json.parse(json.stringify(pjp.getArgs()[0]), new TypeReference<JSONObject>() {}), request);
traceApiLogging(json.parse(json.stringify(pjp.getArgs()[0]), new TypeReference<>() {}), request);
Object result = pjp.proceed();
//noinspection rawtypes

@ -47,7 +47,7 @@ public class CustomExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ApiBaseResponse<?>> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
final String message = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), message, HttpStatus.BAD_REQUEST);
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), message, HttpStatus.OK);
}
@ -58,7 +58,7 @@ public class CustomExceptionHandler {
*/
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<ApiBaseResponse<?>> illegalArgumentException(IllegalArgumentException ex) {
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST);
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK);
}
/**
@ -68,7 +68,7 @@ public class CustomExceptionHandler {
*/
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<ApiBaseResponse<?>> handle(NullPointerException ex) {
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST);
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK);
}
/**
@ -83,7 +83,7 @@ public class CustomExceptionHandler {
return makeEntity(ResultCode.UNAUTHORIZED.getStatusCode(), ex.getMessage(), HttpStatus.UNAUTHORIZED);
}
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.BAD_REQUEST);
return makeEntity(ResultCode.BAD_REQUEST.getStatusCode(), ex.getMessage(), HttpStatus.OK);
}
/**
@ -100,7 +100,7 @@ public class CustomExceptionHandler {
return makeEntity(
ResultCode.INTERNAL_SERVER_ERROR.getStatusCode(),
"Does not support request method '" + req.getMethod() + "'",
HttpStatus.INTERNAL_SERVER_ERROR
HttpStatus.OK
);
}
@ -124,7 +124,7 @@ public class CustomExceptionHandler {
sb.append(fieldError.getDefaultMessage());
sb.append(", ");
}
return makeEntity(ResultCode.INVALID_DATA.getStatusCode(), sb.toString(), HttpStatus.valueOf(ResultCode.INVALID_DATA.getStatusCode()));
return makeEntity(ResultCode.INVALID_DATA.getStatusCode(), sb.toString(), HttpStatus.OK);
} else if (ex instanceof HttpMessageNotReadableException) {
resultCode = ResultCode.INVALID_DATA;
@ -139,7 +139,7 @@ public class CustomExceptionHandler {
resultCode = ResultCode.INTERNAL_SERVER_ERROR;
}
return makeEntity(resultCode.getStatusCode(), resultCode.getMessage(), HttpStatus.valueOf(resultCode.getStatusCode()));
return makeEntity(resultCode.getStatusCode(), resultCode.getMessage(), HttpStatus.OK);
}
/**
@ -152,7 +152,7 @@ public class CustomExceptionHandler {
if (Objects.equals(ex.getCode(), ResultCode.NO_CONTENT.getStatusCode())){
return new ResponseEntity<>(
ApiBaseResponse.builder()
.success(true)
.success(false)
.code(ex.getCode())
.message(ex.getMessage())
.build(),
@ -160,7 +160,7 @@ public class CustomExceptionHandler {
HttpStatus.OK
);
}
return makeEntity(ex.getCode(), ex.getMessage(), HttpStatus.BAD_REQUEST);
return makeEntity(ex.getCode(), ex.getMessage(), HttpStatus.OK);
}
private ResponseEntity<ApiBaseResponse<?>> makeEntity(final Integer code, final String message, final HttpStatus status) {

@ -148,7 +148,7 @@
// */
// public static Map<String, Object> toMap(final String str) {
// try {
// return ObjectUtils.isNotEmpty(str)? OM.readValue(str, new TypeReference<Map<String, Object>>(){}) : null;
// return ObjectUtils.isNotEmpty(str)? OM.readValue(str, new TypeReference<>(){}) : null;
// } catch (JsonProcessingException e) {
// throw ApiCustomException.create(e.getLocalizedMessage());
// }

@ -77,7 +77,7 @@ public class InfIrosServiceBean extends AbstractServiceBean implements InfIrosSe
String rslt = ApiUtil.callIrosApi(irosUrl + drugPrdtMcpnDtlInq, params);
IrosResponse<DrugPrdtMcpnDtl> result = null;
try {
result = json.parse(rslt, new TypeReference<IrosResponse<DrugPrdtMcpnDtl>>() {});
result = json.parse(rslt, new TypeReference<>() {});
} catch (Exception e) {
if(!isEmpty(e.getCause())){

@ -43,6 +43,7 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import cokr.xit.adds.biz.nims.service.BizNimsService;
import cokr.xit.adds.core.Constants;
import cokr.xit.adds.core.spring.exception.ApiCustomException;
import cokr.xit.adds.core.util.DateUtils;
import cokr.xit.adds.inf.mois.model.MoisExchangeRequest;
@ -110,7 +111,6 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
private final BizNimsService bizNimsService;
private static final String delimiter = System.getProperty("os.name").contains("Window") ? "\\" : "/";
private static final String bodyText =
"""
1. .
@ -170,7 +170,8 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
public void saveResultExchange() {
File dirPath = new File(dataRootPath + receiveTemp);
List<File> files = listFilesUsingDirectoryStream(dataRootPath + receiveTemp);
files.sort((a, b) -> b.getName().compareTo(a.getName()));
// 올림차순 정렬
files.sort((a, b) -> a.getName().compareTo(b.getName()));
List<Map<String, String>> rcvTgtFiles = new ArrayList<>();
List<PackDto.MoisPackRes> dtoList = new ArrayList<>();
@ -183,9 +184,9 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
log.info("srcPath : {}", srcPath);
log.info("srcFileNam : {}", srcFileName);
rcvTgtFiles.add(Map.of(
"inFolder", srcPath + delimiter + srcFileName,
"inFolder", srcPath + Constants.FILE_DLMTR + srcFileName,
"outFolder",
dataRootPath + receiveDir + srcPath.substring(srcPath.lastIndexOf(delimiter) + 1) + delimiter,
dataRootPath + receiveDir + srcPath.substring(srcPath.lastIndexOf(Constants.FILE_DLMTR) + 1) + Constants.FILE_DLMTR,
"delFolder", srcPath
));
@ -210,7 +211,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
}
} catch (Exception e) {
for(Map<String, String> m : rcvTgtFiles) {
String[] items = m.get("inFolder").split(delimiter);
String[] items = m.get("inFolder").split(Constants.FILE_DLMTR);
String fileName = items[items.length-1];
String inFile = m.get("outFolder")+fileName;
String outFile = m.get("inFolder").replace(fileName, "");
@ -328,7 +329,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
//transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
DOMSource source = new DOMSource(doc);
try(FileOutputStream fio = new FileOutputStream(new File(path + delimiter + "exchange.xml"));) {
try(FileOutputStream fio = new FileOutputStream(new File(path + Constants.FILE_DLMTR + "exchange.xml"));) {
StreamResult result = new StreamResult(fio);
transformer.transform(source, result);
}catch (SecurityException | IOException e) {
@ -410,7 +411,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
sb.append("sender_systemname=").append(header.getSenderSystemname()).append("\n");
sb.append("administrative_num=").append(header.getAdministrativeNum()).append("\n");
try(PrintWriter fw = new PrintWriter(dirPath+ delimiter + "header.inf", "euc-kr");){
try(PrintWriter fw = new PrintWriter(dirPath+ Constants.FILE_DLMTR + "header.inf", "euc-kr");){
fw.write(sb.toString());
fw.flush();
} catch (FileNotFoundException | UnsupportedEncodingException e) {
@ -422,7 +423,7 @@ public class InfMoisServiceBean extends AbstractServiceBean implements InfMoisSe
final String path = dataRootPath + sendTemp + pathName;
File dirPath = new File(path);
try(PrintWriter fw = new PrintWriter(dirPath + delimiter + "eof.inf", "euc-kr");){
try(PrintWriter fw = new PrintWriter(dirPath + Constants.FILE_DLMTR + "eof.inf", "euc-kr");){
fw.write(StringUtils.EMPTY);
fw.flush();
} catch (FileNotFoundException | UnsupportedEncodingException e) {

@ -6,6 +6,7 @@ import java.util.List;
import javax.validation.Valid;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.annotation.JsonAlias;
@ -436,63 +437,85 @@ public class NimsApiDto {
* </pre>
*/
@JsonIgnore
public List<BizNimsResponse.DsuseMgtRes> mappingNewDsuseRptInfo(List<BizNimsResponse.DsuseMgtRes> dsuseMgts){
public List<BizNimsResponse.DsuseMgtRes> mappingNewDsuseRptInfos(List<BizNimsResponse.DsuseMgtRes> dsuseMgts){
List<BizNimsResponse.DsuseMgtRes> newList = new ArrayList<>();
for(BizNimsResponse.DsuseMgtRes mgtDto: dsuseMgts) {
// 폐기 신청서 접수 상태 데이타만 처리
if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) {
String rptInfo = String.join("",
this.bsshCd, // 마약류취급자식별번호
this.hdrDe, // 취급일자
this.rptDe, // 보고일자
this.dsuseSeCd, // 폐기구분코드
this.dsusePrvCd, // 폐기사유코드
this.dsuseMthCd, // 폐기방법코드
this.dsuseDe, // 폐기일자
String.valueOf(this.rndDtlRptCnt) // 수불상세보고수
);
String mgtInfo = String.join("",
mgtDto.getBsshCd(), // 마약류취급자식별번호
mgtDto.getHdrDe(), // 취급일자
mgtDto.getRptDe(), // 보고일자
mgtDto.getDsuseSeCd(), // 폐기구분코드
mgtDto.getDsusePrvCd(), // 폐기사유코드
mgtDto.getDsuseMthCd(), // 폐기방법코드
mgtDto.getDsuseDe(), // 폐기일자
String.valueOf(mgtDto.getRndDtlRptCnt()) // 수불상세보고수
);
// FIXME: 폐기관리와 폐기보고의 상품정보 일치 여부 set - 비교 필드 확정 필요
if (rptInfo.equals(mgtInfo)) {
if (this.dsuseRptInfoDtls.size() == mgtDto.getDsuseMgtDtls().size()) {
for (DsuseRptInfoDtl rptDtl : this.dsuseRptInfoDtls) {
for (BizNimsRequest.DsuseMgtDtl mgtDtl : mgtDto.getDsuseMgtDtls()) {
if (rptDtl.getPrductCd().equals(mgtDtl.getPrductCd())
// && rptDtl.getMnfNo().equals(mgtDtl.getMnfNo())
// && rptDtl.getPrdValidDe().equals(mgtDtl.getPrdValidDe())
// && rptDtl.getMnfSeq().equals(mgtDtl.getMnfSeq())
&& rptDtl.getDsuseQy().equals(mgtDtl.getDsuseQy())) {
mgtDtl.setValidYn("Y");
break;
}
BizNimsResponse.DsuseMgtRes dsuseMgtRes = mappingNewDsuseRptInfo(mgtDto);
if(ObjectUtils.isNotEmpty(dsuseMgtRes)) {
newList.add(dsuseMgtRes);
}
}
return newList;
}
/**
* <pre>
*
* -> -
* ->
*
* 1.
* 2. set
* -> - (02) set
* -> , , , set
* @param mgtDto BizNimsResponse.DsuseMgtRes
* @return BizNimsResponse.DsuseMgtRes
* </pre>
*/
@JsonIgnore
public BizNimsResponse.DsuseMgtRes mappingNewDsuseRptInfo(BizNimsResponse.DsuseMgtRes mgtDto) {
// 폐기 신청서 접수 상태 데이타만 처리
if (Constants.PRGRS_STTS_CD.RECEIPT.getCode().equals(mgtDto.getPrgrsSttsCd())) {
String rptInfo = String.join("",
this.bsshCd, // 마약류취급자식별번호
this.hdrDe, // 취급일자
this.rptDe, // 보고일자
this.dsuseSeCd, // 폐기구분코드
this.dsusePrvCd, // 폐기사유코드
this.dsuseMthCd, // 폐기방법코드
this.dsuseDe, // 폐기일자
String.valueOf(this.rndDtlRptCnt) // 수불상세보고수
);
String mgtInfo = String.join("",
mgtDto.getBsshCd(), // 마약류취급자식별번호
mgtDto.getHdrDe(), // 취급일자
mgtDto.getRptDe(), // 보고일자
mgtDto.getDsuseSeCd(), // 폐기구분코드
mgtDto.getDsusePrvCd(), // 폐기사유코드
mgtDto.getDsuseMthCd(), // 폐기방법코드
mgtDto.getDsuseDe(), // 폐기일자
String.valueOf(mgtDto.getRndDtlRptCnt()) // 수불상세보고수
);
// FIXME: 폐기관리와 폐기보고의 상품정보 일치 여부 set - 비교 필드 확정 필요
if (rptInfo.equals(mgtInfo)) {
if (this.dsuseRptInfoDtls.size() == mgtDto.getDsuseMgtDtls().size()) {
for (DsuseRptInfoDtl rptDtl : this.dsuseRptInfoDtls) {
for (BizNimsRequest.DsuseMgtDtl mgtDtl : mgtDto.getDsuseMgtDtls()) {
if (rptDtl.getPrductCd().equals(mgtDtl.getPrductCd())
// && rptDtl.getMnfNo().equals(mgtDtl.getMnfNo())
// && rptDtl.getPrdValidDe().equals(mgtDtl.getPrdValidDe())
// && rptDtl.getMnfSeq().equals(mgtDtl.getMnfSeq())
&& rptDtl.getDsuseQy().equals(mgtDtl.getDsuseQy())) {
mgtDtl.setValidYn("Y");
break;
}
}
}
mgtDto.setUsrRptIdNo(this.usrRptIdNo);
mgtDto.setOrgUsrRptIdNo(this.orgUsrRptIdNo);
mgtDto.setRptTyCd(this.rptTyCd);
mgtDto.setStts(this.status);
mgtDto.setPrgrsSttsCd(Constants.PRGRS_STTS_CD.MAPPING.getCode());
mgtDto.setRgtr(this.getRgtr());
newList.add(mgtDto);
}
mgtDto.setUsrRptIdNo(this.usrRptIdNo);
mgtDto.setOrgUsrRptIdNo(this.orgUsrRptIdNo);
mgtDto.setRptTyCd(this.rptTyCd);
mgtDto.setStts(this.status);
mgtDto.setPrgrsSttsCd(Constants.PRGRS_STTS_CD.MAPPING.getCode());
mgtDto.setRgtr(this.getRgtr());
return mgtDto;
}
}
return newList;
return null;
}
/**
* <pre>
*

@ -86,7 +86,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
String rslt = ApiUtil.callNimsApi(nimsUrl + bsshInfoStV1, dto);
NimsApiResult<NimsApiDto.BsshInfoSt> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.BsshInfoSt>>() {});
NimsApiResult<NimsApiDto.BsshInfoSt> result = json.parse(rslt, new TypeReference<>() {});
return result.getResponse();
}
@ -98,7 +98,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
String rslt = ApiUtil.callNimsApi(nimsUrl + productinfoKd, dto);
NimsApiResult<NimsApiDto.ProductInfoKd> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.ProductInfoKd>>() {});
NimsApiResult<NimsApiDto.ProductInfoKd> result = json.parse(rslt, new TypeReference<>() {});
return result.getResponse();
}
@ -110,7 +110,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
if(!isEmpty(dto.getYmd())) ApiUtil.checkYmdError(dto.getYmd(), null);
String rslt = ApiUtil.callNimsApi(nimsUrl + seqinfo, dto);
NimsApiResult<NimsApiDto.MnfSeqInfo> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.MnfSeqInfo>>() {});
NimsApiResult<NimsApiDto.MnfSeqInfo> result = json.parse(rslt, new TypeReference<>() {});
return result.getResponse();
}
@ -125,7 +125,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
// }
//
// String rslt = ApiUtil.callNimsApi(nimsUrl + officeinfo, dto);
// NimsApiResult<NimsApiDto.JurisdictionGovInfo> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.JurisdictionGovInfo>>() {});
// NimsApiResult<NimsApiDto.JurisdictionGovInfo> result = json.parse(rslt, new TypeReference<>() {});
// return result.getResponse();
// }
//
@ -142,7 +142,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
// }
//
// String rslt = ApiUtil.callNimsApi(nimsUrl + placeinfoV1, dto);
// NimsApiResult<NimsApiDto.StorageInfo> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.StorageInfo>>() {});
// NimsApiResult<NimsApiDto.StorageInfo> result = json.parse(rslt, new TypeReference<>() {});
// return result.getResponse();
// }
@ -155,7 +155,7 @@ public class InfNimsServiceBean extends AbstractServiceBean implements InfNimsSe
ApiUtil.checkYmdError(dto.getEdt(), "edt");
//String rslt = ApiUtil.callNimsApi(nimsUrl + reportinfo, dto);
//NimsApiResult<NimsApiDto.DsuseRpt> result = json.parse(rslt, new TypeReference<NimsApiResult<NimsApiDto.DsuseRpt>>() {});
//NimsApiResult<NimsApiDto.DsuseRpt> result = json.parse(rslt, new TypeReference<>() {});
//return result.getResponse();
return getDsuseRptResponse();

@ -202,3 +202,7 @@ app:
log:
parameter-enabled: true
response-enabled: true
file:
root.path: ${app.data.root.path}/${spring.application.name}
rpt.path: ${app.file.root.path}/rpt
img.path: ${app.file.root.path}/img

@ -179,6 +179,51 @@
<!-- ========================== -->
<!-- 폐기관리 업무 테이블 start -->
<!-- ========================== -->
<insert id="insertDsuseMgtReceipt" parameterType="cokr.xit.adds.biz.nims.model.BizNimsRequest$DsuseMgtReceipt">
/** nims-mysql-mapper|insertDsuseMgtReceipt-폐기관리 신청서 정보 생성|julim */
<selectKey keyProperty="dscdmngId" resultType="string" order="BEFORE">
SELECT NVL(MAX(dscdmng_id), CONCAT(DATE_FORMAT(now(), '%Y%m'),'0000')) + 1
FROM tb_dsuse_mgt
WHERE dscdmng_id LIKE CONCAT(DATE_FORMAT(now(), '%Y%m'), '%');
</selectKey>
INSERT INTO tb_dsuse_mgt (
dscdmng_id, /* 폐기관리ID */
user_id, /* 사용자ID */
prgrs_stts_cd, /* 폐기관리진행상태코드 */
bssh_cd, /* 마약류취급자식별ID */
rnd_dtl_rpt_cnt, /* 수불상세보고수 */
dsuse_prv_cd, /* 폐기사유코드 */
use_yn,
reg_dt,
rgtr
) VALUES (
#{dscdmngId},
#{userId},
#{prgrsSttsCd},
#{bsshCd},
#{rndDtlRptCnt},
#{dsusePrvCd},
'Y',
DATE_FORMAT(now(), '%Y%m%d%H%i%s'),
#{rgtr}
)
</insert>
<update id="updateDsuseMgtRslt" parameterType="cokr.xit.adds.biz.nims.model.BizNimsRequest$DsuseMgtRslt">
/** nims-mysql-mapper|updateDsuseMgtRslt-폐기관리 정보 변경|julim */
UPDATE tb_dsuse_mgt
SET prgrs_stts_cd = #{prgrsSttsCd}
, hdr_de = #{hdrDe}
, rpt_de = #{rptDe}
, dsuse_se_cd = #{dsuseSeCd}
, dsuse_mth_cd = #{dsuseMthCd}
, dsuse_loc = #{dsuseLoc}
, dsuse_de = #{dsuseDe}
, mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s')
, mdfr = #{rgtr}
WHERE dscdmng_id = #{dscdmngId}
</update>
<insert id="insertDsuseMgt" parameterType="cokr.xit.adds.biz.nims.model.BizNimsRequest$DsuseMgt">
/** nims-mysql-mapper|insertDsuseMgt-폐기관리 생성|julim */
<selectKey keyProperty="dscdmngId" resultType="string" order="BEFORE">
@ -270,6 +315,12 @@
</where>
</select>
<select id="selectDsuseMgt" parameterType="string" resultType="cokr.xit.adds.biz.nims.model.BizNimsResponse$DsuseMgtRes">
/** nims-mysql-mapper|selectDsuseMgt-폐기관리 정보 조회|julim */
<include refid="sqlDsuseMgt"/>
WHERE tdm.dscdmng_id = #{dscdmngId}
</select>
<sql id="sqlDsuseMgt">
SELECT tdm.dscdmng_id, /** 폐기관리ID */
tdm.user_id, /** 사용자ID */
@ -362,6 +413,12 @@
WHERE dscdmng_id = #{dscdmngId}
</update>
<select id="selectDscdmngIdByOrgUsrRptIdNo" parameterType="string" resultType="cokr.xit.adds.biz.nims.model.BizNimsResponse$DsuseMgtRes">
/** nims-mysql-mapper|selectDscdmngIdByOrgUsrRptIdNo-폐기관리ID 조회(원사용자보고식별번호로)|julim */
<include refid="sqlDsuseMgt"/>
WHERE tdm.dscdmng_id = #{dscdmngId}
</select>
<!-- ========================== -->
<!-- 폐기 관리 업무 테이블 end -->
<!-- ========================== -->
@ -529,7 +586,7 @@
, mdfcn_dt = DATE_FORMAT(now(), '%Y%m%d%H%i%s')
, mdfr = #{rgtr}
WHERE usr_rpt_id_no = #{refUsrRptIdNo}
AND use_yn = 'Y'
-- AND use_yn = 'Y'
</update>
<update id="updateCancelDsuseRptInfoDtl" parameterType="cokr.xit.adds.inf.nims.model.NimsApiDto$DsuseRptInfo">

@ -0,0 +1,100 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="ZXing for JS">
<title>폐기 신청서 접수</title>
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://unpkg.com/normalize.css@8.0.0/normalize.css">
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://unpkg.com/milligram@1.3.0/dist/milligram.min.css">
</head>
<body>
<main class="wrapper" style="padding-top:2em">
<input type="file" id="img1" name="img" accept="image/*"><br>
<input type="file" id="img2" name="img" accept="image/*"><br>
<button id="btnSave">save</button>
</main>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<script type="text/javascript">
document.querySelector("#btnSave").addEventListener("click", function () {
let dsuseMgt =
{
userId: "api-user",
prgrsSttsCd: "01",
bsshCd: "H00008333",
rndDtlRptCnt: 2,
dsusePrvCd: "04"
};
let dsuseMgtDtls = [
{
prductCd: "8806717024900",
prductNm: "베리콜시럽",
minDistbQy: 1,
pceQy: 1,
mnfNo: "A1111",
prdValidDe: "20300303",
mnfSeq: "A11111111",
dsuseQy: 10
},
{
prductCd: "8806718050823",
prductNm: "아쿠아폴주20밀리리터(프로포폴) (20㎖)",
minDistbQy: 1,
pceQy: 5,
mnfNo: "A1111",
prdValidDe: "20300303",
mnfSeq: "A11111111",
dsuseQy: 30
}
];
let formData = new FormData();
formData.append("dsuseMgtJsonStr", JSON.stringify(dsuseMgt));
formData.append("dsuseMgtDtlsJsonStr", JSON.stringify(dsuseMgtDtls));
$("input[type=file]").each(function (i) {
formData.append("dsusePrdImgFiles", $('input[type=file]')[i].files[0]);
});
$.ajax({
url: 'http://localhost:9076/api/biz/nims/v1/saveDsuseMgtReceipt',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (res) {
console.log(res);
console.log(res.data);
if (!res.success) {
alert(`${res.code}: ${res.message}`);
}
},
error: function (error) {
console.log(error);
if (error.responseJSON && typeof error.responseJSON === 'object') {
console.log(error.responseJSON);
}
}
});
});
</script>
</body>
</html>

@ -0,0 +1,80 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="ZXing for JS">
<title>폐기 통보[결과] 처리</title>
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://unpkg.com/normalize.css@8.0.0/normalize.css">
<link rel="stylesheet" rel="preload" as="style" onload="this.rel='stylesheet';this.onload=null"
href="https://unpkg.com/milligram@1.3.0/dist/milligram.min.css">
</head>
<body>
<main class="wrapper" style="padding-top:2em">
<input type="file" id="img1" name="img" accept="image/*"><br>
<input type="file" id="img2" name="img" accept="image/*"><br>
<button id="btnSave">save</button>
</main>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<script type="text/javascript">
document.querySelector("#btnSave").addEventListener("click", function () {
let dsuseMgtRslt =
{
dscdmngId: "2024050001",
userId: "api-user",
prgrsSttsCd: "06",
hdrDe: "20240506",
rptDe: "20240506",
dsuseSeCd: "1",
dsuseMthCd: "3",
dsuseLoc: "보건소 소각장",
dsuseDe: "20240506"
};
let formData = new FormData();
formData.append("dsuseMgtRsltJsonStr", JSON.stringify(dsuseMgtRslt));
$("input[type=file]").each(function (i) {
formData.append("dsuseDsuseImgFiles", $('input[type=file]')[i].files[0]);
});
$.ajax({
url: 'http://localhost:9076/api/biz/nims/v1/saveDsuseMgtRslt',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (res) {
console.log(res);
console.log(res.data);
if (!res.success) {
alert(`${res.code}: ${res.message}`);
}
},
error: function (error) {
console.log(error);
if (error.responseJSON && typeof error.responseJSON === 'object') {
console.log(error.responseJSON);
}
}
});
});
</script>
</body>
</html>

@ -63,8 +63,7 @@ public class IrosRestfulTest {
request.uri(uri + urlParam);
});
IrosResponse<DrugPrdtMcpnDtl> parse = new JSON().parse(rslt.body(),
new TypeReference<IrosResponse<DrugPrdtMcpnDtl>>() {
IrosResponse<DrugPrdtMcpnDtl> parse = new JSON().parse(rslt.body(), new TypeReference<>() {
});
System.out.println(parse);

@ -193,7 +193,7 @@ public class ExchangeDtoTest {
XML xml = new XML();
//ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd");
ExchangeDto dto2 = xml.parse(content, new TypeReference<ExchangeDto>() {});
ExchangeDto dto2 = xml.parse(content, new TypeReference<>() {});
log.info("dto: {}", dto2);
xml.write(System.out, dto2, true);
@ -226,7 +226,7 @@ public class ExchangeDtoTest {
XML xml = new XML();
//ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd");
ExchangeDto dto2 = xml.parse(content, new TypeReference<ExchangeDto>() {});
ExchangeDto dto2 = xml.parse(content, new TypeReference<>() {});
log.info("dto: {}", dto2);
xml.write(System.out, dto2, true);

@ -87,7 +87,7 @@ public class ExchangepackDtoTest {
// xmlMapper.writeValue(System.out, dto);
XML xml = new XML();
ExchangepackDto dto = xml.parse(exchangeXml, new TypeReference<ExchangepackDto>() {});
ExchangepackDto dto = xml.parse(exchangeXml, new TypeReference<>() {});
log.info("dto: {}", dto);
xml.write(System.out, dto, true);
}

@ -53,7 +53,7 @@ public class PackDtoTest {
String content = new String(bytes);
ApiUtil.validateXmlFromXmlStr(content, "src/main/resources/xsd/pack.xsd");
PackDto dto = xml.parse(content, new TypeReference<PackDto>() {});
PackDto dto = xml.parse(content, new TypeReference<>() {});
log.info("dto: {}", dto);
xml.write(System.out, dto, true);

Loading…
Cancel
Save