@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper ;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException ;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult ;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult ;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils ;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum ;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetSpi ;
@ -16,6 +17,7 @@ import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.*;
import com.chanko.yunxi.mes.module.biz.controller.admin.procedure.vo.ProcedureSaveReqVO ;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.ProjectOrderController ;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderSaveReqVO ;
import com.chanko.yunxi.mes.module.biz.controller.admin.taskreport.vo.TaskReportPageReqVO ;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.customer.CustomerDO ;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO ;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.procedure.ProcedureDO ;
@ -57,11 +59,15 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils ;
import javax.annotation.Resource ;
import java.lang.reflect.Array ;
import java.math.BigDecimal ;
import java.text.SimpleDateFormat ;
import java.time.LocalDateTime ;
import java.time.format.DateTimeFormatter ;
import java.util.* ;
import java.util.concurrent.ConcurrentHashMap ;
import java.util.function.Function ;
import java.util.function.Predicate ;
import java.util.stream.Collectors ;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception ;
@ -1148,15 +1154,51 @@ public class ChanjetSchedule {
}
/ * *
* 创建 入 库 单
* 根据 报 工 数 据 创建 入 库 单
* @param id
* @throws ChanjetApiException
* /
@Transactional ( rollbackFor = Exception . class )
public void createStorageInOrder ( Long id ) throws ChanjetApiException {
StorageDO storage = storageMapper . selectById ( id ) ;
List < StorageMatDO > matList = storageMatService . getStorageMatListByStockId ( id ) ;
if ( matList . isEmpty ( ) ) return ;
public void createStorageInOrder ( ) throws ChanjetApiException {
StorageDO storage = new StorageDO ( ) ;
TaskReportPageReqVO reqVO = new TaskReportPageReqVO ( ) ;
reqVO . setPageSize ( 999 ) ;
PageResult < TaskReportDO > reprotResult = taskReportMapper . selectNoSynchPage ( reqVO ) ;
List < StorageMatDO > sublist = new ArrayList < > ( ) ;
if ( reprotResult . getTotal ( ) > 0 ) {
Map < String , List < TaskReportDO > > dataGroupByMatCode = reprotResult . getList ( ) . stream ( ) . collect ( Collectors . groupingBy ( TaskReportDO : : getWhNo ) ) ;
dataGroupByMatCode . forEach ( ( whno , mList ) - > {
mList . forEach ( item - > {
if ( item . getIsFinal ( ) . equals ( 1 ) ) {
StorageMatDO storageMatDO = new StorageMatDO ( ) ;
storageMatDO . setMatId ( item . getMaterialId ( ) ) ;
storageMatDO . setProcedureId ( item . getProcedureId ( ) ) ;
storageMatDO . setStorageOkQty ( new BigDecimal ( mList . stream ( ) . filter ( vo - > vo . getMaterialId ( ) . equals ( item . getMaterialId ( ) ) ) . mapToInt ( TaskReportDO : : getAmount ) . sum ( ) ) ) ;
sublist . add ( storageMatDO ) ;
}
if ( item . getType ( ) . equals ( "ASSEMBLE" ) ) {
StorageMatDO storageMatDO = new StorageMatDO ( ) ;
storageMatDO . setMatId ( item . getMaterialId ( ) ) ;
storageMatDO . setProcedureId ( item . getProcedureId ( ) ) ;
storageMatDO . setStorageOkQty ( new BigDecimal ( mList . stream ( ) . filter ( vo - > vo . getMaterialId ( ) . equals ( item . getMaterialId ( ) ) ) . filter ( distinctByKeys ( p - > Arrays . asList ( p . getMaterialId ( ) , p . getAssembleCode ( ) ) ) ) . count ( ) ) ) ;
sublist . add ( storageMatDO ) ;
}
} ) ;
} ) ;
reprotResult . getList ( ) . forEach ( item - > {
item . setHasSynch ( 1 ) ;
taskReportMapper . updateById ( item ) ;
} ) ;
}
WarehouseDO aDo = warehouseMapper . selectById ( storage . getWhId ( ) ) ;
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-MM-dd" ) ;
@ -1169,13 +1211,6 @@ public class ChanjetSchedule {
. setWarehouse ( new Warehouse ( aDo . getWhNo ( ) ) )
;
matList . forEach ( mat - > {
RDRecordDetail detail = new RDRecordDetail ( ) ;
detail . setCode ( String . valueOf ( mat . getId ( ) ) ) . setBaseQuantity ( mat . getStorageOkQty ( ) )
. setInventory ( new Inventory ( mat . getProjectSubCode ( ) ) ) ;
detailList . add ( detail ) ;
} ) ;
// 设置为“否”,关闭所有与用友通信的接口;为“是”,打开所有与用友通信的接口
if ( getSystemParameters ( ) ) {
CommonResult < ResultResVO > result = chanjetSpi . invoke ( CREATE_STOCK_IN_ORDER , new CreateStorageReqVO ( dto ) , ResultResVO . class ) ;
@ -1185,6 +1220,14 @@ public class ChanjetSchedule {
}
}
// 自定义多字段去重比较器
public static < T > Predicate < T > distinctByKeys ( Function < ? super T , ? extends List < ? > > keyExtractors ) {
Map < List < ? > , Boolean > seen = new ConcurrentHashMap < > ( ) ;
return t - > {
List < ? > keys = keyExtractors . apply ( t ) ;
return seen . putIfAbsent ( keys , Boolean . TRUE ) = = null ;
} ;
}
/ * *
* 创 建 生 产 加 工 单