预打包相关接口

This commit is contained in:
liuzhaotian
2024-08-02 09:09:55 +08:00
parent 355332b23d
commit 9431178c45
17 changed files with 347 additions and 67 deletions
@@ -6,8 +6,10 @@ import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateSaveReqVO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.service.optimizeplan.OptimizePlanService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -97,4 +99,17 @@ public class OptimizePlanController {
}
@GetMapping("/getPlateModel")
@Operation(summary = "查询当前生产单的板材造型信息")
@Parameter(name = "orderId", description = "生产单Id", required = true)
@PreAuthorize("@ss.hasPermission('manage:pack:query')")
public CommonResult<List<OrderModelDO>> getPlateModel (@Valid @RequestParam("orderId") Long orderId) {
return success(optimizePlanService.getPlateModel(orderId));
}
}
@@ -142,4 +142,15 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
// List<OrderGoodsPlateRespVO> selectPlateAnalysisListByArea(@Param("organId") Long organId, @Param("startTime") String startTime, @Param("endTime") String endTime); // 面积
IPage<OrderGoodsPlateRespVO> selectPlateAnalysisListByArea(@Param("page") IPage<OrderGoodsPlateRespVO> page, @Param("organId") Long organId, @Param("startTime") String startTime, @Param("endTime") String endTime); // 面积
default List<PlateDO> selectPlateNum(Long orderId, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.eqIfPresent(PlateDO::getOrderId, orderId));
}
}
@@ -3,6 +3,7 @@ package com.cf.imes.module.executor.service.optimizeplan;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.SavePlanPlateResultReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import java.util.List;
import java.util.Map;
@@ -39,5 +40,5 @@ public interface OptimizePlanService {
void saveOptimizationResults(SavePlanPlateResultReqVO req);
List<OrderModelDO> getPlateModel(Long orderId);
}
@@ -673,6 +673,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
@Override
public List<OrderModelDO> getPlateModel(Long orderId) {
List<PlateDO> plateDOS = plateMapper.selectPlateNum(orderId, getUserOrganId());
return buildRespByOrderId(orderId, ORDER_PLATE_MODEL,plateDOS.size());
}
private List<OrderModelDO> buildRespByOrderIds(Collection<Long> orderIds, String index, Integer size) {
List<FieldValue> fieldValues = orderIds.stream().map(FieldValue::of).toList();
@@ -263,9 +263,8 @@ public class PackController {
@GetMapping("/getPrePackInfo")
@Operation(summary = "查询预打包优化信息")
@Parameter(name = "orderId", description = "生产单Id", required = true)
@PreAuthorize("@ss.hasPermission('manage:pack:query')")
public CommonResult<String> getPrePackInfo (@Valid @RequestParam("orderId") Long orderId) {
public CommonResult<String> getPrePackInfo ( @RequestParam("orderId") Long orderId) {
return success(packService.getPrePackInfo(orderId));
@@ -11,6 +11,10 @@ import lombok.ToString;
public class PrePackData {
@Schema(description = "包裹编号")
private String name;
@Schema(description = "点的位置信息")
private Double pointX;
private Double pointY;
@@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
@Schema(description = "预打包的优化结构")
@@ -13,13 +15,92 @@ import java.util.List;
public class PrePackOptimizeInfo {
@Schema(description = "包裹编号")
private String packNo;
@Schema(description = "分组名称")
private String groupName;
@Schema(description = "优化的数据")
private List<PrePackData> optimizeData;
private List<PrePackData> list;
@Valid
@Data
public static class PrePackData {
@Schema(description = "包裹编号")
private String name;
@Schema(description = "")
private List<PrerStoreyNum> list;
}
@Valid
@Data
public static class PrerStoreyNum {
@Schema(description = "包裹层数名称")
private String name;
@Schema(description = "")
private Long floor_place_width;
@Schema(description = "")
private Long floor_place_height;
@Schema(description = "")
private List<PrerPlateData> list;
}
@Valid
@Data
public static class PrerPlateData {
@Schema(description = "小板名称")
private String name;
@Schema(description = "")
private String plateNo;
@Schema(description = "")
private String plateId;
@Schema(description = "")
private PrePlaceInfo placeInfo;
}
@Valid
@Data
public static class PrePlaceInfo{
@Schema(description = "")
private String banid;
@Schema(description = "")
private Double line;
@Schema(description = "")
private Double x;
@Schema(description = "")
private Double y;
@Schema(description = "")
private Long pbg;
@Schema(description = "")
private Long pbk;
}
}
@@ -1,6 +1,7 @@
package com.cf.imes.module.manage.controller.admin.pack.prePack;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -20,13 +21,16 @@ public class PrePackReqVO {
private Long orderId;
// @Schema(description = "优化信息")
// @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
// private Map<String, List<PrePackOptimizeInfo>> optimizeInfo;
@Schema(description = "优化信息")
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private Map<String, List<PrePackOptimizeInfo>> optimizeInfo;
private String optimizeInfo;
@Schema(description = "是否自动打包")
private Boolean isAutoPack;
// @Schema(description = "是否自动打包")
// private Boolean isAutoPack;
@@ -36,4 +36,7 @@ public class PackPageReqVO extends PageParam {
private String address;
@Schema(description = "是否翻页-true:上,false:下")
private Boolean isUp;
}
@@ -80,7 +80,7 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
List<PlateAndPartIdList> selectOrderPack(@Param("orderId") Long orderId,@Param("organId") Long organId);
// 单个修改删除状态
// 删除当前生产单下所有的包裹
default void updateDelete(Long orderId) {
LambdaUpdateWrapper<OrderPackageDO> wrapper = new LambdaUpdateWrapper<OrderPackageDO>()
.set(OrderPackageDO::getDeleted, true)
@@ -9,6 +9,7 @@ import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -26,4 +27,16 @@ public interface ProductionProcessMapper extends BaseMapperX<OrderDO> {
List<PatchingPlateRespVO> selectPatchingPlate(PatchingPlatePageReqVO pageReqVO);
OrderDO selectOrderIds(@Param("createTime") String createTime, @Param("organId") Long organId);
OrderDO selectOrderIdsFalse(@Param("createTime") String createTime,@Param("organId") Long organId);
// OrderDO selectOrderIds(@Param("orderId") Long orderId,@Param("organId") Long organId);
//
// OrderDO selectOrderIdsFalse(@Param("orderId") Long orderId,@Param("organId") Long userOrganId);
}
@@ -3,11 +3,12 @@ package com.cf.imes.module.manage.framework.rpc.config;
import com.cf.imes.module.system.api.organ.OrganApi;
import com.cf.imes.module.system.api.permission.PermissionApi;
import com.cf.imes.module.system.api.process.ProcessApi;
import com.cf.imes.module.system.api.setting.SettingApi;
import com.cf.imes.module.system.api.user.AdminUserApi;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {AdminUserApi.class, OrganApi.class, ProcessApi.class, PermissionApi.class})
@EnableFeignClients(clients = {AdminUserApi.class, OrganApi.class, ProcessApi.class, SettingApi.class,PermissionApi.class})
public class RpcConfiguration {
}
@@ -2,12 +2,12 @@ package com.cf.imes.module.manage.service.pack;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
import com.cf.imes.framework.common.enums.OrderStatusEnum;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
import com.cf.imes.framework.common.enums.UserSettingTypeEnum;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
@@ -37,16 +37,23 @@ import com.cf.imes.module.manage.dal.mysql.query.ProductionStatusMapper;
import com.cf.imes.module.manage.enums.OrderPackStatusEnums;
import com.cf.imes.module.manage.service.process.ProductionProcessServiceImpl;
import com.cf.imes.module.manage.util.SnowflakeIdWorker3rd;
import com.cf.imes.module.system.api.setting.SettingApi;
import com.cf.imes.module.system.api.setting.dto.PackageConfigDTO;
import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.ParseException;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
@@ -95,32 +102,56 @@ public class PackServiceImpl implements PackService {
private OrderPrepackagedMapper orderPrepackagedMapper;
@Resource
private SettingApi settingApi;
// 打包分页查询
@Override
public PageResult<PackRespVO> getPackPage(PackPageReqVO pageReqVO) {
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
PageDTO<PackRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
// 根据生产状态查询生产单号
List<Long> orderIds = productionStatusMapper.selectOrderIds(pageReqVO,getUserOrganId()).stream().map(OrderDO::getId).collect(Collectors.toList());
List<Long> orderIds = new ArrayList<>();
if(orderIds.isEmpty()){
return null;
if(pageReqVO.getIsUp() != null){
OrderDO order = productionProcessMapper.selectById(pageReqVO.getOrderId());
// OrderDO orderDO;
// if(pageReqVO.getIsUp()){
// orderDO = productionProcessMapper.selectOrderIds(convertTime(orderDO1.getCreateTime().toString()), getUserOrganId());
//
// }else {
// orderDO = productionProcessMapper.selectOrderIdsFalse(convertTime(orderDO1.getCreateTime().toString()), getUserOrganId());
// }
OrderDO orderDO = pageReqVO.getIsUp() ?
productionProcessMapper.selectOrderIds(convertTime(order.getCreateTime().toString()), getUserOrganId()) :
productionProcessMapper.selectOrderIdsFalse(convertTime(order.getCreateTime().toString()), getUserOrganId());
if(orderDO == null){
throw exception(NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE, pageReqVO.getIsUp() ?"" : "最后",pageReqVO.getIsUp()?"" : "" );
}
orderIds.add(orderDO.getId());
}else {
pageReqVO.setCustomer(insertSeparator(pageReqVO.getCustomer()));
pageReqVO.setCustomOrderNo(insertSeparator(pageReqVO.getCustomOrderNo()));
pageReqVO.setAddress(insertSeparator(pageReqVO.getAddress()));
// 根据生产状态查询生产单号
// List<Long> orderIds = productionStatusMapper.selectOrderIds(pageReqVO, getUserOrganId()).stream().map(OrderDO::getId).toList();
orderIds.addAll(productionStatusMapper.selectOrderIds(pageReqVO, getUserOrganId()).stream().map(OrderDO::getId).toList());
if (orderIds.isEmpty()) {
return null;
}
}
// List<OrderProcessStepNDO> orderProcessStepNDOS = processStepMapper.selectByOrderIds(orderIds, getUserOrganId(), ProcessProcessingTypeEnum.PACK.getNumber());
//
// List<Long> orderIdList = orderProcessStepNDOS.stream().map(OrderProcessStepNDO::getOrderId).distinct().toList();
//
// if(orderIdList.isEmpty()){
// return null;
// }
// 查询打包首页分页数据信息,总的板件数量信息
IPage<PackRespVO> packRespVOS = productionStatusMapper.selectOrderPlate(page,orderIds,getUserOrganId());
@@ -139,13 +170,6 @@ public class PackServiceImpl implements PackService {
// 待处理量
record.setPendingNum(record.getTotalPieceCount() - record.getPackPieceCount());
// if(record.getPackCount() == 0) {
// record.setStatus(OrderPackStatusEnums.UNPACKAGED.getStatus());
// }
//
// record.setStatus(record.getTotalPieceCount().equals(record.getPackPieceCount()) ?
// OrderPackStatusEnums.PACKAGED.getStatus() : OrderPackStatusEnums.INPACKAGING.getStatus());
}
if (CollectionUtil.isEmpty(packRespVOS.getRecords())) {
@@ -692,12 +716,15 @@ public class PackServiceImpl implements PackService {
@Override
public String getPrePackInfo(Long orderId) {
OrderPrepackagedDO orderPrepackagedDO = orderPrepackagedMapper.selectOrder(orderId, getUserOrganId());
if(orderPrepackagedDO == null){
throw exception(NO_OPTIMIZATION_INFORMATION_AVAILABLE);
}
return JsonUtils.unzipString(orderPrepackagedDO.getResult());
}
@@ -711,35 +738,59 @@ public class PackServiceImpl implements PackService {
public void saveOptimizeInfo(PrePackReqVO reqVO) {
PackageConfigDTO userSetting = settingApi.getUserSetting(UserSettingTypeEnum.PREPACKAGED.getType());
String setting = userSetting.getSetting();
JsonNode settingParse = JsonUtils.parseTree(JsonUtils.unzipString(setting));
boolean autoPack = settingParse.get("autoPack").asBoolean();
System.out.println(autoPack);
String optimizeInfo = reqVO.getOptimizeInfo();
// 自动打包,包裹表新增
if(reqVO.getIsAutoPack()){
if(autoPack){
ArrayList<OrderPackageDO> orderPackageDOS = new ArrayList<>();
List<PackPlateList> packPlateNoLists = new ArrayList<>();
reqVO.getOptimizeInfo().values().parallelStream().forEach(value -> {
value.forEach(prePackOptimizeInfo -> {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = JsonUtils.parseTree(reqVO.getOptimizeInfo());
List<PrePackOptimizeInfo> asJsonObject = objectMapper.convertValue(jsonNode, new TypeReference<>() {});
asJsonObject.forEach(value ->{
value.getList().forEach(prePackOptimizeInfo ->{
String packageNo = generatePackageNo();
List<String> list = prePackOptimizeInfo.getOptimizeData().stream().map(PrePackData::getPlateNo).toList();
list.forEach(a -> packPlateNoLists.add(PackPlateList.builder()
.packNo(packageNo)
.plateNo(a)
.build()));
prePackOptimizeInfo.setName(packageNo);
orderPackageDOS.add(OrderPackageDO.builder()
.packageNo(packageNo)
.type(OrderPackageTypeEnum.PLATE.getType())
.orderId(reqVO.getOrderId())
.status(OrderPackageStatusEnum.PACKAGED.getStatus())
.build());
prePackOptimizeInfo.getList().forEach(plate ->{
List<String> list = plate.getList().stream().map(m -> m.getPlateNo()).toList();
list.forEach(a -> packPlateNoLists.add(PackPlateList.builder()
.packNo(packageNo)
.plateNo(a)
.build()));
});
prePackOptimizeInfo.setPackNo(packageNo);
});
});
optimizeInfo = JsonUtils.toJsonString(asJsonObject);
List<OrderPackageDO> packageDOS = orderPackageMapper.selectPackStatus(reqVO.getOrderId(), getUserOrganId());
if(!packageDOS.isEmpty()){
@@ -776,8 +827,6 @@ public class PackServiceImpl implements PackService {
}
String optimizeInfo = JsonUtils.toJsonString(reqVO.getOptimizeInfo());
OrderPrepackagedDO orderPackOptimizeDO = orderPrepackagedMapper.selectOrder(reqVO.getOrderId(), getUserOrganId());
if(orderPackOptimizeDO ==null){
@@ -874,6 +923,21 @@ public class PackServiceImpl implements PackService {
// 日期格式转换
public static String convertTime(String input) {
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = inputFormat.parse(input);
date.setTime(date.getTime() + 8 * 60 * 60 * 1000); // 将时间转换为东夏令时
return outputFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
@@ -168,4 +168,27 @@
group by p.goods_id,orderId,customOrderId,customer,address,orderStatus,plateNum,plateName,thickness,material,color
</select>
<select id="selectOrderIds" resultType="com.cf.imes.module.manage.dal.dataobject.process.OrderDO">
SELECT * FROM orders
WHERE create_time &gt; #{createTime} and organ_id = #{organId} and deleted = false
ORDER BY create_time
LIMIT 1 ;
</select>
<select id="selectOrderIdsFalse" resultType="com.cf.imes.module.manage.dal.dataobject.process.OrderDO">
SELECT * FROM orders
WHERE create_time &lt; #{createTime} and organ_id = #{organId} and deleted = false
ORDER BY create_time desc
LIMIT 1 ;
</select>
</mapper>
@@ -90,24 +90,11 @@
group by orderNo,customOrderNo,dealer,createTime,deliveryDate,customer,phoneNumber,address,salesman,splitter,packaged,dealerPhoneNumber,orderDate
order by o.create_time desc
</select>
<!-- &#45;&#45; count(distinct-->
<!-- &#45;&#45; case-->
<!-- &#45;&#45; when oi.package_id!=0 then oi.package_id end-->
<!-- &#45;&#45; ) as packCount,-->
<!-- &#45;&#45; count(distinct case-->
<!-- &#45;&#45; when oi.package_id !=0 and oi.parts_id = 0 then oi.plate_id end )as packPieceCount,-->
<!-- &#45;&#45; count(distinct-->
<!-- &#45;&#45; case-->
<!-- &#45;&#45; when oi.plate_id !=0 then oi.plate_id end-->
<!-- &#45;&#45; )as totalPieceCount-->
<!-- &#45;&#45; group by orderNo,customOrderNo,dealer,createTime,deliveryDate,customer,phoneNumber,address,salesman,splitter,status;-->
<resultMap id="PrintMap" type="com.cf.imes.module.manage.controller.admin.pack.vo.PrintOrderPackRespVO">
<result property="customOrderNo" column="customOrderNo"/>
@@ -173,7 +160,7 @@
</where>
order by create_time desc
</select>
@@ -0,0 +1,30 @@
package com.cf.imes.module.system.api.setting;
import com.cf.imes.module.system.api.setting.dto.PackageConfigDTO;
import com.cf.imes.module.system.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
@FeignClient(name = ApiConstants.NAME) // TODO 晨丰:fallbackFactory =
@Tag(name = "RPC 服务 - 系统配置")
public interface SettingApi {
String PREFIX = ApiConstants.PREFIX + "/setting";
@GetMapping(PREFIX + "/getUserSetting")
@Operation(summary = "查看当前用户的配置信息")
@Parameter(name = "type", description = "配置配型", required = true, example = "1")
PackageConfigDTO getUserSetting(@RequestParam("type") Integer type);
}
@@ -0,0 +1,34 @@
package com.cf.imes.module.system.api.setting;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.module.system.api.setting.dto.PackageConfigDTO;
import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO;
import com.cf.imes.module.system.dal.mysql.setting.SettingMapper;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
@RestController // 提供 RESTful API 接口,给 Feign 调用
@Validated
public class SettingApiImpl implements SettingApi{
@Resource
private SettingMapper settingMapper;
@Override
public PackageConfigDTO getUserSetting(Integer type) {
LoginUser loginUser = getLoginUser();
PackageConfigDO packageConfigDO = settingMapper.selectSetting(type, loginUser.getId(), loginUser.getOrganId());
return BeanUtils.toBean(packageConfigDO,PackageConfigDTO.class);
}
}