| src/main/java/com/gs/xiaomi/dto/BCS101ResponseBody.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/dto/SnListItemDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/entity/SnListItem.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/example/SnListItemUsageExample.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/mapper/SnListItemMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/service/SnListItemService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/service/impl/SnListItemServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/gs/xiaomi/util/SnListItemConverter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/SnListItemMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/gs/xiaomi/dto/BCS101ResponseBody.java
@@ -8,8 +8,11 @@ @Data public class BCS101ResponseBody { /** * SNå表 */ @JsonProperty("snList") private List<String> snList; private List<SnListItemDto> snList; @JsonProperty("reelList") private List<String> reelList; src/main/java/com/gs/xiaomi/dto/SnListItemDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,97 @@ package com.gs.xiaomi.dto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; /** * SNå表项DTO * ç¨äºBCS101æ¥å£ç请æ±åååºæ°æ®ä¼ è¾ */ @Data public class SnListItemDto { /** * SNæè REELID (å¿ å¡«) */ @JsonProperty("snNo") private String snNo; /** * REELä¸ç©åçæ°é (å¿ å¡«) */ @JsonProperty("qty") private Integer qty; /** * SNãREELIDç©æå¯¹åºè£ ç®±å· (éå¿ å¡«) */ @JsonProperty("cartonId") private String cartonId; /** * SNãREELID对åºççäº§æ¥æ (å¿ å¡«) * æççDCåæ®µ */ @JsonProperty("dateCode") private String dateCode; /** * SNãREELID对åºççäº§æ¹æ¬¡ (éå¿ å¡«) * æççlotåæ®µ */ @JsonProperty("lotNo") private String lotNo; /** * å°ç±³æå· (å¿ å¡«) */ @JsonProperty("mpnId") private String mpnId; /** * äº§å° (éå¿ å¡«) * å¡«åå 容éä¸ºåæ¯ç»åæ æ°åãæ±å */ @JsonProperty("place") private String place; /** * åç (éå¿ å¡«) * é»è®¤ä¸ºç©ºï¼å¯ç¨å¿ å¡«å¼å ³åï¼ä¸ºå¿ å¡« */ @JsonProperty("brand") private String brand; /** * å¶é åæå· (éå¿ å¡«) */ @JsonProperty("mpn") private String mpn; /** * åå· (éå¿ å¡«) * é»è®¤ä¸ºç©ºï¼å¯ç¨å¿ å¡«å¼å ³åï¼ä¸ºå¿ å¡« */ @JsonProperty("model") private String model; /** * åºåç»ç» (éå¿ å¡«) * VMIè½¬èªæéä¸ä¼ ï¼å段 */ @JsonProperty("stockOrg") private String stockOrg; /** * åå§ä¾åºå (éå¿ å¡«) */ @JsonProperty("originSupplierId") private String originSupplierId; /** * è´¨æ£åå· (éå¿ å¡«) * 央ä»è°æ¨ç©æå æ£æ¶ä½¿ç¨ */ @JsonProperty("inspInvoNo") private String inspInvoNo; } src/main/java/com/gs/xiaomi/entity/SnListItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,117 @@ package com.gs.xiaomi.entity; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * SN/REELIDæ¡ç ä¿¡æ¯å®ä½ç±» * @TableName SN_LIST_ITEM */ @TableName(value = "SN_LIST_ITEM") @Data @KeySequence(value = "SEQ_SN_LIST_ITEM", dbType = DbType.ORACLE) public class SnListItem { /** * 主é®ID (使ç¨SEQ_SN_LIST_ITEMåºå) */ @TableId private Long id; /** * SNæè REELID (å¿ å¡«) */ private String snNo; /** * REELä¸ç©åçæ°é (å¿ å¡«) */ private Integer qty; /** * SNãREELIDç©æå¯¹åºè£ ç®±å· (éå¿ å¡«) */ private String cartonId; /** * SNãREELID对åºççäº§æ¥æ (å¿ å¡«) * æççDCåæ®µ */ private String dateCode; /** * SNãREELID对åºççäº§æ¹æ¬¡ (éå¿ å¡«) * æççlotåæ®µ */ private String lotNo; /** * å°ç±³æå· (å¿ å¡«) */ private String mpnId; /** * äº§å° (éå¿ å¡«) * å¡«åå 容éä¸ºåæ¯ç»åæ æ°åãæ±å */ private String place; /** * åç (éå¿ å¡«) * é»è®¤ä¸ºç©ºï¼å¯ç¨å¿ å¡«å¼å ³åï¼ä¸ºå¿ å¡« */ private String brand; /** * å¶é åæå· (éå¿ å¡«) */ private String mpn; /** * åå· (éå¿ å¡«) * é»è®¤ä¸ºç©ºï¼å¯ç¨å¿ å¡«å¼å ³åï¼ä¸ºå¿ å¡« */ private String model; /** * åºåç»ç» (éå¿ å¡«) * VMIè½¬èªæéä¸ä¼ ï¼å段 */ private String stockOrg; /** * åå§ä¾åºå (éå¿ å¡«) */ private String originSupplierId; /** * è´¨æ£åå· (éå¿ å¡«) * 央ä»è°æ¨ç©æå æ£æ¶ä½¿ç¨ */ private String inspInvoNo; /** * å ³èéè´§å主表ID (å¤é®å ³èDELIVERY_MAIN表) */ private Long deliveryMainId; /** * éè´§åå· (åä½åæ®µä¾¿äºæ¥è¯¢) */ private String zzasn; /** * å建æ¶é´ */ private Date createdTime; /** * æ´æ°æ¶é´ */ private Date updatedTime; } src/main/java/com/gs/xiaomi/example/SnListItemUsageExample.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,166 @@ package com.gs.xiaomi.example; import com.gs.xiaomi.dto.BCS101Response; import com.gs.xiaomi.dto.SnListItemDto; import com.gs.xiaomi.entity.SnListItem; import com.gs.xiaomi.service.SnListItemService; import com.gs.xiaomi.util.SnListItemConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * SnListItem使ç¨ç¤ºä¾ * æ¼ç¤ºå¦ä½ä½¿ç¨DTOåEntityè¿è¡æ°æ®å¤çåæä¹ å */ @Component public class SnListItemUsageExample { @Autowired private SnListItemService snListItemService; /** * 示ä¾1: ä»BCS101æ¥å£ååºä¸ä¿åSNåè¡¨æ°æ® * * @param response BCS101æ¥å£ååº * @param deliveryMainId éè´§å主表ID * @param zzasn éè´§åå· */ public void saveSNListFromResponse(BCS101Response response, Long deliveryMainId, String zzasn) { // 1. ä»ååºä¸è·åDTOå表 List<SnListItemDto> dtoList = response.getBody().getSnList(); // 2. å°DTOå表转æ¢ä¸ºEntityå表ï¼åæ¶è®¾ç½®å ³èä¿¡æ¯ List<SnListItem> entityList = SnListItemConverter.toEntityList(dtoList, deliveryMainId, zzasn); // 3. æ¹éä¿åå°æ°æ®åº snListItemService.saveBatch(entityList); } /** * 示ä¾2: æ ¹æ®éè´§åå·æ¥è¯¢SNå表并转æ¢ä¸ºDTO * * @param zzasn éè´§åå· * @return DTOå表 */ public List<SnListItemDto> querySnListByZzasn(String zzasn) { // 1. 仿°æ®åºæ¥è¯¢Entityå表 List<SnListItem> entityList = snListItemService.lambdaQuery() .eq(SnListItem::getZzasn, zzasn) .list(); // 2. å°Entityå表转æ¢ä¸ºDTOå表 return SnListItemConverter.toDtoList(entityList); } /** * 示ä¾3: å个DTOä¿å * * @param dto SNæ¡ç DTO * @param deliveryMainId éè´§å主表ID * @param zzasn éè´§åå· */ public void saveSingleSNItem(SnListItemDto dto, Long deliveryMainId, String zzasn) { // 1. DTO转Entity SnListItem entity = SnListItemConverter.toEntity(dto, deliveryMainId, zzasn); // 2. ä¿åå°æ°æ®åº snListItemService.save(entity); } /** * 示ä¾4: æ ¹æ®SNå·æ¥è¯¢è¯¦ç»ä¿¡æ¯ * * @param snNo SNå· * @return Entity对象 */ public SnListItem queryBySnNo(String snNo) { return snListItemService.lambdaQuery() .eq(SnListItem::getSnNo, snNo) .one(); } /** * 示ä¾5: æ ¹æ®å°ç±³æå·åéè´§åå·æ¥è¯¢ * * @param mpnId å°ç±³æå· * @param zzasn éè´§åå· * @return Entityå表 */ public List<SnListItem> queryByMpnIdAndZzasn(String mpnId, String zzasn) { return snListItemService.lambdaQuery() .eq(SnListItem::getMpnId, mpnId) .eq(SnListItem::getZzasn, zzasn) .list(); } /** * 示ä¾6: æ ¹æ®è£ ç®±å·æ¥è¯¢ææSN * * @param cartonId è£ ç®±å· * @return Entityå表 */ public List<SnListItem> queryByCartonId(String cartonId) { return snListItemService.lambdaQuery() .eq(SnListItem::getCartonId, cartonId) .orderByAsc(SnListItem::getCreatedTime) .list(); } /** * 示ä¾7: æ´æ°SNæ¡ç ä¿¡æ¯ * * @param id è®°å½ID * @param dto æ´æ°çDTOæ°æ® * @return æ¯å¦æ´æ°æå */ public boolean updateSnItem(Long id, SnListItemDto dto) { // 1. DTO转Entity SnListItem entity = SnListItemConverter.toEntity(dto); entity.setId(id); // 2. æ´æ°å°æ°æ®åº return snListItemService.updateById(entity); } /** * 示ä¾8: å 餿å®éè´§åçææSNæ°æ® * * @param zzasn éè´§åå· * @return æ¯å¦å 餿å */ public boolean deleteByZzasn(String zzasn) { return snListItemService.lambdaUpdate() .eq(SnListItem::getZzasn, zzasn) .remove(); } /** * 示ä¾9: ç»è®¡æä¸ªéè´§åçSNæ°é * * @param zzasn éè´§åå· * @return SNæ°é */ public long countByZzasn(String zzasn) { return snListItemService.lambdaQuery() .eq(SnListItem::getZzasn, zzasn) .count(); } /** * 示ä¾10: å页æ¥è¯¢SNå表 * * @param zzasn éè´§åå· * @param pageNum 页ç * @param pageSize æ¯é¡µå¤§å° * @return Entityå表 */ public List<SnListItem> queryByPage(String zzasn, int pageNum, int pageSize) { return snListItemService.lambdaQuery() .eq(SnListItem::getZzasn, zzasn) .orderByDesc(SnListItem::getCreatedTime) .last("OFFSET " + (pageNum - 1) * pageSize + " ROWS FETCH NEXT " + pageSize + " ROWS ONLY") .list(); } } src/main/java/com/gs/xiaomi/mapper/SnListItemMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.gs.xiaomi.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.gs.xiaomi.entity.SnListItem; import org.apache.ibatis.annotations.Mapper; /** * SN/REELIDæ¡ç ä¿¡æ¯Mapperæ¥å£ */ @Mapper public interface SnListItemMapper extends BaseMapper<SnListItem> { } src/main/java/com/gs/xiaomi/service/SnListItemService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.gs.xiaomi.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gs.xiaomi.entity.SnListItem; /** * SN/REELIDæ¡ç ä¿¡æ¯Serviceæ¥å£ */ public interface SnListItemService extends IService<SnListItem> { } src/main/java/com/gs/xiaomi/service/impl/SnListItemServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.gs.xiaomi.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gs.xiaomi.entity.SnListItem; import com.gs.xiaomi.mapper.SnListItemMapper; import com.gs.xiaomi.service.SnListItemService; import org.springframework.stereotype.Service; /** * SN/REELIDæ¡ç ä¿¡æ¯Serviceå®ç°ç±» */ @Service public class SnListItemServiceImpl extends ServiceImpl<SnListItemMapper, SnListItem> implements SnListItemService { } src/main/java/com/gs/xiaomi/util/SnListItemConverter.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,113 @@ package com.gs.xiaomi.util; import com.gs.xiaomi.dto.SnListItemDto; import com.gs.xiaomi.entity.SnListItem; import org.springframework.beans.BeanUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * SnListItem DTOåEntity转æ¢å·¥å ·ç±» */ public class SnListItemConverter { /** * DTO转Entity * * @param dto DTO对象 * @return Entity对象 */ public static SnListItem toEntity(SnListItemDto dto) { if (dto == null) { return null; } SnListItem entity = new SnListItem(); BeanUtils.copyProperties(dto, entity); entity.setCreatedTime(new Date()); entity.setUpdatedTime(new Date()); return entity; } /** * DTO转Entityï¼å¸¦å ³èä¿¡æ¯ * * @param dto DTO对象 * @param deliveryMainId éè´§å主表ID * @param zzasn éè´§åå· * @return Entity对象 */ public static SnListItem toEntity(SnListItemDto dto, Long deliveryMainId, String zzasn) { if (dto == null) { return null; } SnListItem entity = toEntity(dto); entity.setDeliveryMainId(deliveryMainId); entity.setZzasn(zzasn); return entity; } /** * Entity转DTO * * @param entity Entity对象 * @return DTO对象 */ public static SnListItemDto toDto(SnListItem entity) { if (entity == null) { return null; } SnListItemDto dto = new SnListItemDto(); BeanUtils.copyProperties(entity, dto); return dto; } /** * DTOå表转Entityå表 * * @param dtoList DTOå表 * @return Entityå表 */ public static List<SnListItem> toEntityList(List<SnListItemDto> dtoList) { if (dtoList == null || dtoList.isEmpty()) { return new ArrayList<>(); } return dtoList.stream() .map(SnListItemConverter::toEntity) .collect(Collectors.toList()); } /** * DTOå表转Entityå表ï¼å¸¦å ³èä¿¡æ¯ * * @param dtoList DTOå表 * @param deliveryMainId éè´§å主表ID * @param zzasn éè´§åå· * @return Entityå表 */ public static List<SnListItem> toEntityList(List<SnListItemDto> dtoList, Long deliveryMainId, String zzasn) { if (dtoList == null || dtoList.isEmpty()) { return new ArrayList<>(); } return dtoList.stream() .map(dto -> toEntity(dto, deliveryMainId, zzasn)) .collect(Collectors.toList()); } /** * Entityå表转DTOå表 * * @param entityList Entityå表 * @return DTOå表 */ public static List<SnListItemDto> toDtoList(List<SnListItem> entityList) { if (entityList == null || entityList.isEmpty()) { return new ArrayList<>(); } return entityList.stream() .map(SnListItemConverter::toDto) .collect(Collectors.toList()); } } src/main/resources/mapper/SnListItemMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gs.xiaomi.mapper.SnListItemMapper"> <resultMap id="BaseResultMap" type="com.gs.xiaomi.entity.SnListItem"> <id property="id" column="ID" jdbcType="DECIMAL"/> <result property="snNo" column="SN_NO" jdbcType="VARCHAR"/> <result property="qty" column="QTY" jdbcType="DECIMAL"/> <result property="cartonId" column="CARTON_ID" jdbcType="VARCHAR"/> <result property="dateCode" column="DATE_CODE" jdbcType="VARCHAR"/> <result property="lotNo" column="LOT_NO" jdbcType="VARCHAR"/> <result property="mpnId" column="MPN_ID" jdbcType="VARCHAR"/> <result property="place" column="PLACE" jdbcType="VARCHAR"/> <result property="brand" column="BRAND" jdbcType="VARCHAR"/> <result property="mpn" column="MPN" jdbcType="VARCHAR"/> <result property="model" column="MODEL" jdbcType="VARCHAR"/> <result property="stockOrg" column="STOCK_ORG" jdbcType="VARCHAR"/> <result property="originSupplierId" column="ORIGIN_SUPPLIER_ID" jdbcType="VARCHAR"/> <result property="inspInvoNo" column="INSP_INVO_NO" jdbcType="VARCHAR"/> <result property="deliveryMainId" column="DELIVERY_MAIN_ID" jdbcType="DECIMAL"/> <result property="zzasn" column="ZZASN" jdbcType="VARCHAR"/> <result property="createdTime" column="CREATED_TIME" jdbcType="TIMESTAMP"/> <result property="updatedTime" column="UPDATED_TIME" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List"> ID, SN_NO, QTY, CARTON_ID, DATE_CODE, LOT_NO, MPN_ID, PLACE, BRAND, MPN, MODEL, STOCK_ORG, ORIGIN_SUPPLIER_ID, INSP_INVO_NO, DELIVERY_MAIN_ID, ZZASN, CREATED_TIME, UPDATED_TIME </sql> </mapper> src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
@@ -6,10 +6,14 @@ import com.gs.xiaomi.dto.BCS101Request; import com.gs.xiaomi.dto.BCS101Response; import com.gs.xiaomi.dto.NumbericalDto; import com.gs.xiaomi.dto.SnListItemDto; import com.gs.xiaomi.entity.DeliveryMain; import com.gs.xiaomi.entity.SnListItem; import com.gs.xiaomi.service.BCS101ApiService; import com.gs.xiaomi.service.DeliveryMainService; import com.gs.xiaomi.service.SnListItemService; import com.gs.xiaomi.service.Xm104Service; import com.gs.xiaomi.util.SnListItemConverter; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -29,6 +33,9 @@ @Autowired private DeliveryMainService deliveryMainService; @Autowired private SnListItemService snListItemService; @Test void contextLoads() throws Exception { @@ -60,11 +67,11 @@ //List<String> collect = list.stream().map(DeliveryMain::getZzasn).collect(Collectors.toList()); list.forEach(s->{ System.out.println(String.valueOf(Integer.parseInt(s.getLifnr()))+":"+s.getZzasn()); list.forEach(s -> { System.out.println(String.valueOf(Integer.parseInt(s.getLifnr())) + ":" + s.getZzasn()); // å建æµè¯è¯·æ±åæ° BCS101Request request = new BCS101Request(); request.setSupplierId(String.valueOf(Integer.parseInt(s.getLifnr())) ); request.setSupplierId(String.valueOf(Integer.parseInt(s.getHubLifnr()))); request.setDocNo(s.getZzasn()); request.setDocType("ASNGR"); request.setPageNo(1); @@ -83,6 +90,42 @@ ObjectMapper objectMapper = new ObjectMapper(); try { BCS101Response response = objectMapper.readValue(bcs101Data, BCS101Response.class); // æ£æ¥ååºæ¯å¦æå if (response.isSuccess()) { // è·åsnListæ°æ® List<SnListItemDto> snList = response.getBody().getSnList(); if (snList != null && !snList.isEmpty()) { System.out.println("è·åå° " + snList.size() + " æ¡SNæ°æ®ï¼å¼å§æä¹ å..."); // 转æ¢DTO为Entityï¼å¹¶è®¾ç½®å ³èä¿¡æ¯ List<SnListItem> entityList = SnListItemConverter.toEntityList( snList, s.getId(), // deliveryMainId - éè´§å主表ID s.getZzasn() // zzasn - éè´§åå· ); // å å é¤è¯¥éè´§åå·²æçSNæ°æ®ï¼é¿å éå¤ï¼ snListItemService.lambdaUpdate() .eq(SnListItem::getZzasn, s.getZzasn()) .remove(); // æ¹éä¿åå°æ°æ®åº boolean saved = snListItemService.saveBatch(entityList); if (saved) { System.out.println("æåä¿å " + entityList.size() + " æ¡SNæ°æ®å°æ°æ®åº"); } else { System.err.println("ä¿åSNæ°æ®å¤±è´¥ï¼"); } } else { System.out.println("ååºä¸æ²¡æSNæ°æ®"); } } else { System.err.println("BCS101æ¥å£è°ç¨å¤±è´¥: " + response.getErrorDesc()); } } catch (JsonProcessingException e) { throw new RuntimeException(e); }