Merge remote-tracking branch 'origin/master'

master
赵嘉伟 3 years ago
commit 953ac0c5a4

@ -63,6 +63,27 @@ public class ShopOrderReleaseController {
return R.ok(list);
}
/**
* - BOM
*
* @param shopOrderList
* @return
*/
@ResponseBody
@PostMapping("shopOrderBomComponentUpdate")
public R shopOrderBomComponentUpdate(@RequestBody List<ShopOrderRelease> shopOrderList) {
try {
String site = CommonMethods.getSite();
String user = CommonMethods.getUser();
shopOrderReleaseService.shopOrderBomComponentUpdate(site, user, shopOrderList);
} catch (Exception e) {
return R.failed(e.getMessage());
}
return R.ok();
}
/**
* -
*

@ -40,6 +40,18 @@ public interface ShopOrderReleaseService {
*/
List<ShopOrderRelease> findShopOrderList(ShopOrderRelease shopOrderRelease);
/**
* - BOM
*
* 1.
* 2.
*
* @param site
* @param user
* @param shopOrderList
*/
void shopOrderBomComponentUpdate(String site, String user, List<ShopOrderRelease> shopOrderList);
/**
* -
*

@ -11,10 +11,8 @@ import com.foreverwin.mesnac.dispatch.model.SfcDispatch;
import com.foreverwin.mesnac.dispatch.model.ShopOrderRelease;
import com.foreverwin.mesnac.dispatch.service.SfcDispatchService;
import com.foreverwin.mesnac.dispatch.service.ShopOrderReleaseService;
import com.foreverwin.mesnac.meapi.model.Router;
import com.foreverwin.mesnac.meapi.model.Sfc;
import com.foreverwin.mesnac.meapi.model.ShopOrder;
import com.foreverwin.mesnac.meapi.model.WorkCenter;
import com.foreverwin.mesnac.meapi.mapper.BomComponentMapper;
import com.foreverwin.mesnac.meapi.model.*;
import com.foreverwin.mesnac.meapi.service.*;
import com.foreverwin.mesnac.meapi.util.StringUtils;
import com.foreverwin.modular.core.exception.BaseException;
@ -67,6 +65,12 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
private SfcDispatchService sfcDispatchService;
@Autowired
private ShopOrderReleaseMapper shopOrderReleaseMapper;
@Autowired
private CustomFieldsService customFieldsService;
@Autowired
private BomComponentService bomComponentService;
@Autowired
private BomService bomService;
@Override
public List<RouterDTO> selectShopOrderRouter(String routerBo) {
@ -78,6 +82,53 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
return shopOrderReleaseMapper.findShopOrderList(shopOrderRelease);
}
@Override
public void shopOrderBomComponentUpdate(String site, String user, List<ShopOrderRelease> shopOrderList) {
if (shopOrderList == null || shopOrderList.size() <= 0) {
throw new BaseException("请至少选择一笔需要更新的工单");
}
for (ShopOrderRelease shopOrderReleaseModel : shopOrderList) {
Bom bom = isUpdateBomComponent(shopOrderReleaseModel, true);
if (bom==null){
continue;
}
//查询工单信息
String shopOrder = shopOrderReleaseModel.getShopOrder();
String shopOrderBo = shopOrderReleaseModel.getShopOrderBo();
ShopOrder shopOrderModel = shopOrderService.getById(shopOrderBo);
if (shopOrderModel == null) {
throw new BaseException("工单[" + shopOrder + "]不存在");
}
/*if (!"H".equals(bom.getBomType())){
throw BusinessException.build("工单["+shopOrder+"]的计划物料清单["+plannedBomBo+"]的类型不是'工单'!");
}*/
Double qtyToBuild = shopOrderModel.getQtyToBuild();
// 更新工单BOM的组件数据
List<BomComponent> bomComponents = bomComponentService.listByBomBo(bom.getHandle());
List<BomComponent> bomComponentList = new ArrayList<>();
for (BomComponent bomComponent:bomComponents) {
try{
BigDecimal bomComponentQty = new BigDecimal(bomComponent.getQty());
BigDecimal qty = new BigDecimal(qtyToBuild);
BigDecimal resultQty = bomComponentQty.divide(qty,4,BigDecimal.ROUND_DOWN);
bomComponent.setQty(resultQty.doubleValue());
}catch (Exception e){
throw BusinessException.build("工单组件数量除以工单数量时出现异常,请查看工单["+shopOrder+"]工单BOM["+bom.getBom()+"]组件的数量!");
}
bomComponent.setModifiedDateTime(LocalDateTime.now());
bomComponentList.add(bomComponent);
}
bomComponentService.saveOrUpdateBatch(bomComponentList);
CustomFields customFields = new CustomFields();
customFields.setHandle(bom.getHandle());
customFields.setAttribute("IS_CHANGE_QTY");
customFields.setValue("TRUE");
customFields.setCreatedDateTime(new Date());
customFieldsService.save(customFields);
}
}
@Override
public void shopOrderRelease(String site, String user, List<ShopOrderRelease> shopOrderList) {
if (shopOrderList == null || shopOrderList.size() <= 0) {
@ -102,6 +153,9 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
throw new BaseException("工单[" + shopOrder + "]不存在");
}
// 校验工单对应的工单BOM是否更新了组件数据
isUpdateBomComponent(shopOrderReleaseModel,false);
String statusBo = shopOrderModel.getStatusBo();
String routerBo = shopOrderModel.getPlannedRouterBo();
BigDecimal qtyToBuild = new BigDecimal(shopOrderModel.getQtyToBuild());
@ -515,4 +569,40 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService {
return prodHours;
}
/** 校验工单BOM是否已更新 **/
public Bom isUpdateBomComponent(ShopOrderRelease shopOrderRelease,Boolean bl){
String shopOrder = shopOrderRelease.getShopOrder();
String shopOrderBo = shopOrderRelease.getShopOrderBo();
ShopOrder shopOrderModel = shopOrderService.getById(shopOrderBo);
if (shopOrderModel == null) {
throw new BaseException("工单[" + shopOrder + "]不存在");
}
String statusBo = shopOrderModel.getStatusBo();
if (!"501".equals(StringUtils.trimHandle(statusBo)) && bl) {
throw BusinessException.build("工单[" +shopOrder+ "]不是可下达状态无法更新工单BOM");
}
String plannedBomBo = shopOrderModel.getPlannedBomBo();
String bomNo = plannedBomBo.split(",")[1];
Bom bom = new Bom();
bom.setBom(bomNo);
bom.setCurrentRevision("true");
List<Bom> boms = bomService.selectList(bom);
if (boms == null || boms.isEmpty()){
throw BusinessException.build("工单["+shopOrder+"]的计划物料清单["+plannedBomBo+"]不存在,请维护主数据!");
}
if (boms.size() > 1){
throw BusinessException.build("工单["+shopOrder+"]的计划物料清单["+plannedBomBo+"]存在多个当前版本,请修改主数据!");
}
String handle = boms.get(0).getHandle();
String customFieldsValue = customFieldsService.getCustomFieldsValue(handle, "IS_CHANGE_QTY");
if ("TRUE".equals(customFieldsValue)){
return null;
}else {
if (bl){
return boms.get(0);
}
throw BusinessException.build("工单[" +shopOrder+ "]未更新工单BOM不能点击下达请先更新工单BOM后再下达工单");
}
}
}

@ -676,16 +676,10 @@
JOIN Z_SFC_DISPATCH zsd ON S.SFC=zsd.SFC AND S.SITE=zsd.SITE
LEFT JOIN Z_SFC_DISPATCH PREZSD ON zsd.SFC=PREZSD.SFC AND PREZSD.DISPATCH_SEQ=TO_NUMBER(zsd.DISPATCH_SEQ)-1 AND zsd.ROUTER_BO=PREZSD.ROUTER_BO
JOIN Z_PROD_READY_TASK zprt ON ZPRT.SFC_DISPATCH_BO=zsd.HANDLE
JOIN SFC S ON S.SFC=ZSD.SFC AND S.SITE=ZSD.SITE
JOIN SFC_ROUTING SR ON SR.SFC_BO=S.HANDLE
JOIN SFC_ROUTER SR2 ON SR.HANDLE =SR2.SFC_ROUTING_BO AND SR2.IN_USE = 'true'
LEFT JOIN SFC_STEP SS ON SR2.HANDLE =SS.SFC_ROUTER_BO AND (SS.QTY_IN_QUEUE>0 or SS.QTY_IN_WORK>0)
JOIN SFC_STEP SS ON SR2.HANDLE =SS.SFC_ROUTER_BO AND (SS.QTY_IN_QUEUE>0 or SS.QTY_IN_WORK>0) AND ZSD.STEP_ID = SS.STEP_ID
WHERE S.SITE=#{ew.entity.site} AND ZSD.RESRCE=#{ew.entity.resrce} AND (ZSD.DISPATCH_STATUS='RELEASE' OR ZSD.DISPATCH_STATUS='START')
AND SS.OPERATION_BO LIKE '%' || ( SELECT RT.RESOURCE_TYPE FROM RESRCE r
LEFT JOIN RESOURCE_TYPE_RESOURCE rtr ON RTR.RESOURCE_BO = R.HANDLE
LEFT JOIN RESOURCE_TYPE rt ON RT.HANDLE = RTR.RESOURCE_TYPE_BO
WHERE R.RESRCE = #{ew.entity.resrce} AND R.SITE = #{ew.entity.site} ) || '%'
AND SS.BYPASSED = 'false'
AND S.STATUS_BO IN ('StatusBO:'||#{ew.entity.site}||',401','StatusBO:'||#{ew.entity.site}||',402','StatusBO:'||#{ew.entity.site}||',403','StatusBO:'||#{ew.entity.site}||',404')
AND zprt.STATUS='FINISH' AND ZPRT."RESULT"='OK' AND SS.BYPASSED = 'false'
) T

@ -22,6 +22,8 @@ import com.foreverwin.mesnac.common.service.SfcDispatchCommonService;
import com.foreverwin.mesnac.common.util.ERPAPI;
import com.foreverwin.mesnac.common.util.ExceptionUtil;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.mesnac.dispatch.model.SfcDispatch;
import com.foreverwin.mesnac.dispatch.service.SfcDispatchService;
import com.foreverwin.mesnac.integration.model.IntegrationLog;
import com.foreverwin.mesnac.integration.service.IntegrationLogService;
import com.foreverwin.mesnac.meapi.dto.BomComponentDto;
@ -103,7 +105,8 @@ public class PodTemplateServiceImpl implements PodTemplateService {
private SfcDispatchCommonService sfcDispatchCommonService;
@Autowired
private ResrceMapper resrceMapper;
@Autowired
private SfcDispatchService sfcDispatchService;
@Override
@ -273,6 +276,7 @@ public class PodTemplateServiceImpl implements PodTemplateService {
String stepId = sfcDto.getStepId();
String dispatchNo = sfcDto.getDispatchNo();
SfcDispatch sfcDispatchById = sfcDispatchService.getById(HandleEnum.SFC_DISPATCH.getHandle(site, dispatchNo));
Sfc sfcServiceById = sfcService.getById(HandleEnum.SFC.getHandle(site, sfc));
String status = StringUtil.trimHandle(sfcServiceById.getStatusBo());
if (status.equals("404")) {
@ -337,7 +341,9 @@ public class PodTemplateServiceImpl implements PodTemplateService {
inspectionTaskService.createTask(paramMap);
}
//计算工时
LocalDateTime startTime = sfcService.getSfcStartTime(HandleEnum.SFC.getHandle(site, sfc));
//LocalDateTime startTime = sfcService.getSfcStartTime(HandleEnum.SFC.getHandle(site, sfc));
// 派工表实际开始时间
LocalDateTime startTime = sfcDispatchById.getActualStartDate();
long workHourSeconds = Duration.between(startTime, LocalDateTime.now()).getSeconds();
workHour = new BigDecimal(workHourSeconds).divide(BigDecimal.valueOf(3600), 2, RoundingMode.HALF_UP);
//减去暂停时间

Loading…
Cancel
Save