Browse Source

申请单退料修改

master
shenzhouyu 10 months ago
parent
commit
2b4ef94263
  1. 22
      src/main/java/com/gaotao/modules/notify/controller/ProductionUnissueController.java
  2. 14
      src/main/java/com/gaotao/modules/notify/entity/dto/NewUnissueNotifyDto.java
  3. 7
      src/main/java/com/gaotao/modules/notify/entity/dto/UnissueNotifyHeadDataDto.java
  4. 3
      src/main/java/com/gaotao/modules/notify/mapper/UnissueNotifyHeaderMapper.java
  5. 6
      src/main/java/com/gaotao/modules/notify/service/UnissueNotifyHeaderService.java
  6. 148
      src/main/java/com/gaotao/modules/notify/service/impl/UnissueNotifyHeaderServiceImpl.java
  7. 12
      src/main/resources/mapper/notify/UnissueNotifyHeaderMapper.xml

22
src/main/java/com/gaotao/modules/notify/controller/ProductionUnissueController.java

@ -3,9 +3,13 @@ package com.gaotao.modules.notify.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.api.entity.IfsShopOrder;
import com.gaotao.modules.base.entity.SOScheduledRoutingData;
import com.gaotao.modules.notify.entity.*;
import com.gaotao.modules.notify.entity.dto.NewSoIssueNotifyDto;
import com.gaotao.modules.notify.entity.dto.NewUnissueNotifyDto;
import com.gaotao.modules.notify.entity.dto.UnissueNotifyHeadDataDto;
import com.gaotao.modules.notify.entity.vo.ShopOrderAndMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderVo;
import com.gaotao.modules.notify.service.UnissueNotifyHeaderService;
@ -163,4 +167,22 @@ public class ProductionUnissueController {
unissueNotifyHeaderService.closeInboundNotification(data);
return R.ok();
}
@PostMapping(value="/getUnissueShopOrderAndMaterialByShoporder")
public R getUnissueShopOrderAndMaterialByShoporder(@RequestBody UnissueNotifyHeadDataDto data) throws Exception {
List<ShopOrderAndMaterialVo> rows = unissueNotifyHeaderService.getUnissueShopOrderAndMaterialByShoporder(data);
if(rows != null && rows.size() > 0){
return R.ok().put("rows", rows);
}
return R.error("未找到对应的工单物料信息");
}
@PostMapping(value="/saveNewUnissueNotifyOrderList")
public R saveNewUnissueNotifyOrderList(@RequestBody NewUnissueNotifyDto data) throws Exception {
String rows = unissueNotifyHeaderService.saveNewUnissueNotifyOrderList(data);
if("200".equals(rows)){
return R.ok("操作成功");
}
return R.error("操作失败");
}
}

14
src/main/java/com/gaotao/modules/notify/entity/dto/NewUnissueNotifyDto.java

@ -0,0 +1,14 @@
package com.gaotao.modules.notify.entity.dto;
import lombok.Data;
import java.util.List;
@Data
public class NewUnissueNotifyDto {
private String notifyNo;
private String site;
List<ShoporderAndMaterialDto> materialList;
}

7
src/main/java/com/gaotao/modules/notify/entity/dto/UnissueNotifyHeadDataDto.java

@ -35,6 +35,13 @@ public class UnissueNotifyHeadDataDto {
private String notifyNo;
private String orderNo;
private String site;
private String releaseNo;
private String sequenceNo;
/**
* 库存预览数据列表用于推送WCS
*/

3
src/main/java/com/gaotao/modules/notify/mapper/UnissueNotifyHeaderMapper.java

@ -31,4 +31,7 @@ public interface UnissueNotifyHeaderMapper extends BaseMapper<UnissueNotifyHeade
int updateNotifyStatus(UnissueNotifyHeader data);
IPage<UnissueNotifyHeader> searchNotifyHeader(Page<UnissueNotifyHeader> page, @Param("data") UnissueNotifyHeadDataDto data);
int deleteUnissueNotifyOrderMaterialInList(@Param("notifyNo") String notifyNo, @Param("site")String site,@Param("items") List<String> items);
}

6
src/main/java/com/gaotao/modules/notify/service/UnissueNotifyHeaderService.java

@ -7,7 +7,9 @@ import com.gaotao.modules.notify.entity.SOIssueNotifyHeaderData;
import com.gaotao.modules.notify.entity.UnissueNotifyHeader;
import com.gaotao.modules.notify.entity.UnissueNotifyOrderList;
import com.gaotao.modules.notify.entity.UnissueNotifyOrderMaterialList;
import com.gaotao.modules.notify.entity.dto.NewUnissueNotifyDto;
import com.gaotao.modules.notify.entity.dto.UnissueNotifyHeadDataDto;
import com.gaotao.modules.notify.entity.vo.ShopOrderAndMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderVo;
@ -44,4 +46,8 @@ public interface UnissueNotifyHeaderService {
List<UnissueNotifyOrderMaterialList> searchNotifyMaterialList(UnissueNotifyOrderList data);
int closeInboundNotification(UnissueNotifyHeader data);
List<ShopOrderAndMaterialVo> getUnissueShopOrderAndMaterialByShoporder(UnissueNotifyHeadDataDto data) throws Exception;
String saveNewUnissueNotifyOrderList(NewUnissueNotifyDto data) throws Exception;
}

148
src/main/java/com/gaotao/modules/notify/service/impl/UnissueNotifyHeaderServiceImpl.java

@ -6,10 +6,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.api.entity.IfsInventoryPart;
import com.gaotao.modules.api.service.IfsApiIssueAndReturnService;
import com.gaotao.modules.base.entity.SOScheduledRoutingData;
import com.gaotao.modules.notify.entity.*;
import com.gaotao.modules.notify.entity.dto.GroupKey;
import com.gaotao.modules.notify.entity.dto.NewUnissueNotifyDto;
import com.gaotao.modules.notify.entity.dto.ShoporderAndMaterialDto;
import com.gaotao.modules.notify.entity.dto.UnissueNotifyHeadDataDto;
import com.gaotao.modules.notify.entity.vo.ShopOrderAndMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderMaterialVo;
import com.gaotao.modules.notify.entity.vo.ShopOrderVo;
import com.gaotao.modules.notify.mapper.UnissueNotifyHeaderMapper;
@ -21,6 +26,7 @@ import com.gaotao.modules.sys.entity.SysUserEntity;
import com.gaotao.modules.trans.entity.TransNoControl;
import com.gaotao.modules.trans.service.TransNoControlService;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -29,9 +35,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
@Service
@ -239,5 +243,143 @@ public class UnissueNotifyHeaderServiceImpl implements UnissueNotifyHeaderServic
return i;
}
@Override
public List<ShopOrderAndMaterialVo> getUnissueShopOrderAndMaterialByShoporder(UnissueNotifyHeadDataDto data) throws Exception {
List<ShopOrderVo> orderInfo = ifsApiIssueAndReturnService.getWorkOrderInfo(data.getOrderNo(), data.getSite(),data.getReleaseNo(),data.getSequenceNo());
List<ShopOrderVo> shopOrderVos = orderInfo.stream()
.filter(so -> "Started".equalsIgnoreCase(so.getObjstate()))
.toList();
if(orderInfo.size()>0 && shopOrderVos.size()==0){
throw new Exception("生产订单"+data.getOrderNo()+"状态不允许发货,请检查!");
}
if(shopOrderVos != null && shopOrderVos.size()>0) {
List<ShopOrderAndMaterialVo> orderAndMaterialVos = new ArrayList<>();
List<ShopOrderMaterialVo> materialVos = ifsApiIssueAndReturnService.getShopOrderMaterial(data.getOrderNo(), data.getSite(), data.getReleaseNo(), data.getSequenceNo());
List<ShopOrderMaterialVo> shopOrderMaterial = materialVos.stream().filter(m -> "Reserve And Backflush".equals(m.getReserveIssueMethod())).collect(Collectors.toList());
for (ShopOrderMaterialVo shopOrderVo : shopOrderMaterial){
ShopOrderAndMaterialVo vo = new ShopOrderAndMaterialVo();
BeanUtils.copyProperties(shopOrderVo, vo);
vo.setStatus(shopOrderVos.get(0).getStatus());
vo.setPartNo(shopOrderVos.get(0).getPartNo());
vo.setPartDesc(shopOrderVos.get(0).getPartDesc());
vo.setLotSize(shopOrderVos.get(0).getLotSize());
vo.setStartDate(shopOrderVos.get(0).getStartDate());
vo.setFinishDate(shopOrderVos.get(0).getFinishDate());
vo.setNeedDate(shopOrderVos.get(0).getNeedDate());
vo.setCloseCode(shopOrderVos.get(0).getCloseCode());
vo.setCloseTolerance(shopOrderVos.get(0).getCloseTolerance());
vo.setQtyComplete(shopOrderVos.get(0).getQtyComplete());
vo.setObjstate(shopOrderVos.get(0).getObjstate());
vo.setCloseCodeDb(shopOrderVos.get(0).getCloseCodeDb());
orderAndMaterialVos.add(vo);
}
return orderAndMaterialVos;
}
return null;
}
@Override
public String saveNewUnissueNotifyOrderList(NewUnissueNotifyDto data) throws Exception {
if(data.getMaterialList() != null && data.getMaterialList().size() > 0){
Map<GroupKey, List<ShoporderAndMaterialDto>> mainGroupMap = data.getMaterialList().stream()
.collect(Collectors.groupingBy(
dto -> new GroupKey(
dto.getOrderNo(),
dto.getReleaseNo(),
dto.getSequenceNo()
)
));
// 用于存储最终结果父集合和子集合
List<UnissueNotifyOrderList> parentList = new ArrayList<>();
List<UnissueNotifyOrderMaterialList> childList = new ArrayList<>();
int num = 0;
BigDecimal nextItem=BigDecimal.ZERO;
// 步骤2遍历每个分组生成父对象和子对象
for (Map.Entry<GroupKey, List<ShoporderAndMaterialDto>> entry : mainGroupMap.entrySet()) {
GroupKey groupKey = entry.getKey();
List<ShoporderAndMaterialDto> groupDtos = entry.getValue();
// 2.1 生成父对象的唯一 itemNo确保全局唯一这里用 UUID 简化
if(num == 0){
UnissueNotifyOrderList parentData = new UnissueNotifyOrderList();
parentData.setSite(data.getSite());
parentData.setNotifyNo(data.getNotifyNo());
nextItem=unissueNotifyHeaderMapper.getNextItemForUnissueNotifyOrderList(parentData);
}else{
nextItem = nextItem.add(BigDecimal.ONE);
}
// 2.2 构建SOIssueNotifyOrderList
UnissueNotifyOrderList parent = buildParent(data.getNotifyNo(),data.getSite(),groupKey, groupDtos, nextItem);
parentList.add(parent);
// 2.3 遍历分组内的 dto lineItemNo 生成子对象SOIssueNotifyOrderMaterialList
List<UnissueNotifyOrderMaterialList> children = buildChildren(data.getNotifyNo(),data.getSite(),groupDtos, nextItem);
childList.addAll(children);
num++;
}
List<String> items= new ArrayList<>();
// 保存父类
for(UnissueNotifyOrderList parentItem : parentList){
int i = unissueNotifyHeaderMapper.saveUnissueNotifyOrderList(parentItem);
items.add(parentItem.getItemNo().toString());
}
//保存子类
unissueNotifyHeaderMapper.deleteUnissueNotifyOrderMaterialInList(data.getNotifyNo(),data.getSite(),items);
unissueNotifyOrderMaterialListMapper.batchSaveUnissueNotifyOrderMaterialListData(childList);
return "200";
}else{
throw new RuntimeException("物料列表不能为空");
}
}
private static UnissueNotifyOrderList buildParent(String notifyNo,String site,GroupKey groupKey, List<ShoporderAndMaterialDto> groupDtos, BigDecimal parentItemNo) {
UnissueNotifyOrderList parent = new UnissueNotifyOrderList();
parent.setNotifyNo(notifyNo);
parent.setSite(site);
parent.setItemNo(parentItemNo);
parent.setSoorderNo(groupKey.getOrderNo());
parent.setReleaseNo(groupKey.getReleaseNo());
parent.setSequenceNo(groupKey.getSequenceNo());
// 从分组内第一个 dto 提取共同属性假设同一分组内这些属性一致
ShoporderAndMaterialDto firstDto = groupDtos.get(0);
parent.setNeedDate(new Date());
return parent;
}
/**
* 构建子对象列表关联父对象的 itemNo
*/
private static List<UnissueNotifyOrderMaterialList> buildChildren(String notifyNo,String site,List<ShoporderAndMaterialDto> groupDtos, BigDecimal parentItemNo) {
return groupDtos.stream()
.map(dto -> {
UnissueNotifyOrderMaterialList child = new UnissueNotifyOrderMaterialList();
child.setNotifyNo(notifyNo);
child.setSite(site);
child.setItemNo(parentItemNo);
// 设置细分核心字段lineItemNo
child.setBomItemNo(dto.getLineItemNo().toString());
// 提取详细属性
child.setComponentPartNo(dto.getComponentPartNo());
child.setQtyToUnissue(dto.getApplyQty());
if( dto.getApplyQty()!=null){
child.setQtyToUnissueOriginal(dto.getApplyQty());
}
child.setUnissueType("BOM物料");
child.setComponentPartDesc(dto.getComponentPartDesc());
return child;
})
// lineItemNo 排序可选确保子项顺序
.sorted(Comparator.comparing(UnissueNotifyOrderMaterialList::getBomItemNo))
.collect(Collectors.toList());
}
}

12
src/main/resources/mapper/notify/UnissueNotifyHeaderMapper.xml

@ -36,7 +36,7 @@
delete from unissue_notify_header where site=#{site} and notify_no=#{notifyNo}
</delete>
<update id="updateNotifyStatus" >
update unissue_notify_header set status=#{status} where site=#{site} and notify_no=#{notifyNo}
update unissue_notify_header set plan_issue_date=#{planIssueDate},remark=#{remark},status=#{status} where site=#{site} and notify_no=#{notifyNo}
</update>
<select id="searchNotifyHeader" resultType="UnissueNotifyHeader">
select <include refid="baseColumn" />
@ -71,4 +71,14 @@
</where>
order by a.notify_no desc
</select>
<delete id="deleteUnissueNotifyOrderMaterialInList">
DELETE FROM unissue_notify_order_material_list
WHERE
notify_no = #{notifyNo}
AND site = #{site}
AND item_no IN
<foreach collection="items" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</delete>
</mapper>
Loading…
Cancel
Save