采购收货页面

This commit is contained in:
z 2025-08-27 18:07:43 +08:00
parent d3403c2813
commit 077acacd84
68 changed files with 1606 additions and 263 deletions

View File

@ -151,7 +151,7 @@ public class bdgzsomthingController {
BeanUtils.toBean(list, bdgzsomthingRespVO.class));
}
@Scheduled(fixedRate = 10800000)
// @Scheduled(fixedRate = 10800000)
public void scheduledTask() {
bdgzsomthingService.selectds();
}
@ -159,8 +159,8 @@ public class bdgzsomthingController {
//@Scheduled(cron = "0 2 0 * * ?") //每天十天执行一次
@PostConstruct
public void init() {
selectHasPrice();
selectSafeStorageAndDeliverOneYear();
// selectHasPrice();
// selectSafeStorageAndDeliverOneYear();
// bdgzsomthingService.selectds();
}
@Scheduled(cron = "0 0 2 * * ?")

View File

@ -73,9 +73,9 @@ public class FpUserDetailController {
@GetMapping("/page")
@Operation(summary = "获得业务人员配置子分页")
@PreAuthorize("@ss.hasPermission('heli:fp-user-detail:query')")
public CommonResult<PageResult<FpUserDetailRespVO>> getFpUserDetailPage(@Valid FpUserDetailPageReqVO pageReqVO) {
public CommonResult<PageResult<FpUserDetailDO>> getFpUserDetailPage(@Valid FpUserDetailPageReqVO pageReqVO) {
PageResult<FpUserDetailDO> pageResult = fpUserDetailService.getFpUserDetailPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, FpUserDetailRespVO.class));
return success(pageResult);
}
@PostMapping("/selectFpUserDetail")
@Operation(summary = "获得业务人员配置子表")

View File

@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Set;
@Schema(description = "管理后台 - 业务人员配置子 Response VO")
@Data
@ -58,7 +59,6 @@ public class FpUserDetailRespVO {
@Schema(description = "工序名称")
private String procedureName;
@Schema(description = "工序名称")
private Set<Long> procCd;
}

View File

@ -3,6 +3,8 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.fpuserdetail.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Set;
@Schema(description = "管理后台 - 业务人员配置子表集合")
@Data
public class UserVo {
@ -12,6 +14,8 @@ public class UserVo {
private String postId;
@Schema(description = "工序id")
private Long procedureId;
@Schema(description = "工序集合")
private Set<Long> procCd;
@Schema(description = "是否负责人")
private String isRes;

View File

@ -79,5 +79,6 @@ public class MaterialPlanPageReqVO extends PageParam {
private String blueprintNo;
@Schema(description = "工序")
private String procedureName;
@Schema(description = "供应商")
private String supplierName;
}

View File

@ -87,4 +87,6 @@ public class MaterialPlanBoomPageReqVO extends PageParam {
@Schema(description = "物料需求单号")
private String projectMaterialPlanNo;
@Schema(description = "供应商")
private String supplierName;
}

View File

@ -1,12 +1,19 @@
package com.chanko.yunxi.mes.module.heli.controller.admin.pgmaster;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.module.heli.controller.admin.plansub.vo.PlanSubRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchDetailPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.zjpgmaster.vo.ZjPgMasterSaveReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterLineDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -25,6 +32,8 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.error;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils;
@ -46,7 +55,12 @@ public class PgMasterController {
@Resource
private PgMasterService pgMasterService;
@Resource
private ProcessBomDetailMapper processBomDetailMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource
private TaskDispatchMapper taskDispatchMapper;
@GetMapping("/getBomMx")
@ -134,6 +148,42 @@ public class PgMasterController {
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
public CommonResult<PageResult<PgMasterLineDO>> getTaskDispatchPageDetailWx(@Valid PgMasterLinePageReqVO pageReqVO) {
PageResult<PgMasterLineDO> pageResult = pgMasterService.getTaskDispatchDetailPageWx(pageReqVO);
if (ObjectUtil.isEmpty(pageResult.getList())){
if (ObjectUtil.isNotEmpty(pageReqVO.getSubOrDetailName())&&pageReqVO.getPageNo()==1){
LambdaQueryWrapper<ProcessBomDetailDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessBomDetailDO::getBomBlueprintNo,pageReqVO.getSubOrDetailName());
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(bomDetailDO)){
LambdaQueryWrapper<TaskDispatchDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(TaskDispatchDO::getBomDetailId, bomDetailDO.getId());
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper1);
if (ObjectUtil.isNotEmpty(taskDispatchDO)){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDO.getId());
wrapper.eq(TaskDispatchDetailDO::getCheckYn,0);
List<TaskDispatchDetailDO> detailDOS = taskDispatchDetailMapper.selectList(wrapper);
if (ObjectUtil.isEmpty(detailDOS)){
return error(400,"该零件没有需要检验工序");
}else {
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDO.getId());
wrapper1.eq(TaskDispatchDetailDO::getCheckYn,0);
wrapper1.eq(TaskDispatchDetailDO::getTestYn,"Y");
List<TaskDispatchDetailDO> list = taskDispatchDetailMapper.selectList(wrapper1);
if (ObjectUtil.isNotEmpty( list)){
if (list.size()==detailDOS.size()){
return error(400,"该零件已全部检验完成");
}else{
return error(400,"该零件没有报工完成,请联系报工人员!");
}
}else{
return error(400,"该零件没有报工完成,请联系报工人员!");
}
}
}
}
}
}
return success(pageResult);
}
@GetMapping("/task-dispatch-detail/pages")

View File

@ -107,4 +107,6 @@ public class ProcessDesignPageReqVO extends PageParam {
@Schema(description = "负责人名称")
private String ownerName;
@Schema(description = "状态")
private Integer isOverProcess;
}

View File

@ -146,13 +146,13 @@ public class ProjectOrderController {
orderYsService.createOrUpdate(operateReqVO);
// 订单批准时创建或者更新生产计划数据
crossOrderManager.generatePlan(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO);
// projectOrderService.createProjectOrderSnapshot(operateReqVO);
break;
case TERMINATE:
orderYsService.delete(operateReqVO);
// 订单终止时更新生产计划状态
crossOrderManager.updatePlanStatusToTerminate(operateReqVO.getId());
projectOrderService.createProjectOrderSnapshot(operateReqVO);
// projectOrderService.createProjectOrderSnapshot(operateReqVO);
break;
}
return success(operateReqVO.getId());
@ -211,7 +211,7 @@ public class ProjectOrderController {
yunFeiCost = deliverOrderService.getListYf(projectOrderDO.getId(),projectOrderDO.getProjectSubId());
projectOrderDO.setYunFeiCost(yunFeiCost);
BigDecimal sum = projectOrderDO.getYunFeiCost().add(projectOrderDO.getCailiaoCost()).add(projectOrderDO.getBiaoZhunJianCost()).add(projectOrderDO.getNeibuCost()).add(projectOrderDO.getWaixeiCost().add(projectOrderDO.getZpCost()));
BigDecimal sum = projectOrderDO.getYunFeiCost().add(projectOrderDO.getCailiaoCost()).add(projectOrderDO.getBiaoZhunJianCost()).add(projectOrderDO.getNeibuCost()).add(projectOrderDO.getZpCost());
projectOrderDO.setSumCost(sum);
}
return success(BeanUtils.toBean(pageResult, ProjectOrderCostRespVO.class));

View File

@ -97,4 +97,6 @@ public class PurchaseOrderMakePageReqVO extends PageParam {
private String blueprintNo;
@Schema(description = "图号")
private String procedureName;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "1")
private Integer receivingStatus;
}

View File

@ -178,4 +178,5 @@ public class PurchaseOrderNoController {
public CommonResult<Boolean> updateIsPrint(@RequestParam("id") Long id) {
return purchaseOrderNoService.updateIsPrint(id);
}
}

View File

@ -92,6 +92,12 @@ public class PurchaseOrderNoPageReqVO extends PageParam {
private String projectName;
@Schema(description = "子项目名称")
private String projectSubName;
@Schema(description = "责任人")
@Schema(description = "零件")
private String username;
@Schema(description = "工序")
private String boomName;
@Schema(description = "子项目名称")
private String procedureName;
@Schema(description = "图号")
private String blueprintNo;
}

View File

@ -104,12 +104,28 @@ public class PurchaseOrderNoDetailController {
public CommonResult<Boolean> verification(@Valid @RequestBody List<PurchaseOrderNoDetailDO> list) {
return purchaseOrderNoDetailService.verification(list);
}
@PostMapping("/verifications")
@Operation(summary = "收货校验")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> verifications(@Valid @RequestBody PurchaseOrderNoDetailDO detailDO) {
List<PurchaseOrderNoDetailDO> list=new ArrayList<>();
list.add(detailDO);
return purchaseOrderNoDetailService.verification(list);
}
@PostMapping("/receiveGoods")
@Operation(summary = "收货")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> receiveGoods(@Valid @RequestBody List<PurchaseOrderNoDetailDO> list) {
return purchaseOrderNoDetailService.receiveGoods(list);
}
@PostMapping("/receiveGood")
@Operation(summary = "收货")
@PreAuthorize("@ss.hasPermission('heli:process-bom:create')")
public CommonResult<Boolean> receiveGood(@Valid @RequestBody PurchaseOrderNoDetailDO detailDO) {
List<PurchaseOrderNoDetailDO> list=new ArrayList<>();
list.add(detailDO);
return purchaseOrderNoDetailService.receiveGoods(list);
}
@GetMapping("/received")
@Operation(summary = "获得标准件收货分页")
@PreAuthorize("@ss.hasPermission('project:purchase-order-no-detail:query')")
@ -149,4 +165,17 @@ public class PurchaseOrderNoDetailController {
ExcelUtils.write(response, "外协费用查询.xlsx", "数据", OutsourcingExcelVo.class,
BeanUtils.toBean(list, OutsourcingExcelVo.class));
}
@GetMapping("/getReceivingGoods")
@Operation(summary = "小程序获得采购单收货分页")
@PreAuthorize("@ss.hasPermission('project:purchase-order-no-detail:query')")
public CommonResult<PageResult<PurchaseOrderNoDetailDO>> getReceivingGoods(@Valid PurchaseOrderNoDetailPageReqVO pageReqVO) {
PageResult<PurchaseOrderNoDetailDO> pageResult = purchaseOrderNoDetailService.getReceivingGoods(pageReqVO);
return success(pageResult);
}
@GetMapping("/getReceivingGoodsMessage")
@Operation(summary = "小程序获得采购单收货分页")
@PreAuthorize("@ss.hasPermission('project:purchase-order-no-detail:query')")
public CommonResult<Long> getReceivingGoodsMessage() {
return success( purchaseOrderNoDetailService.getReceivingGoodsMessage());
}
}

View File

@ -126,4 +126,10 @@ public class PurchaseOrderNoDetailPageReqVO extends PageParam {
private String supplierName;
@Schema(description = "采购员")
private String ownerName;
@Schema(description = "图号")
private String blueprintNo;
@Schema(description = "工序")
private String procedureName;
@Schema(description = "工序")
private String subOrDetailName;
}

View File

@ -184,7 +184,7 @@ public class TaskDispatchController {
@GetMapping("/task-dispatch-detail/pagewx")
@Operation(summary = "小程序获得派工明细分页")
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
public CommonResult<PageResult<TaskDispatchDetailDO>> getTaskDispatchPageDetailWx(@Valid TaskDispatchDetailPageReqVO pageReqVO) {
public CommonResult<PageResult<TaskDispatchDetailDO>> getTaskDispatchPageDetailWx(@Valid TaskDispatchDetailPageReqVO pageReqVO) {
PageResult<TaskDispatchDetailDO> pageResult = taskDispatchService.getTaskDispatchDetailPageWx(pageReqVO);
return success(pageResult);
}
@ -231,6 +231,15 @@ public class TaskDispatchController {
List<HashMap<String, String>> owner = taskDispatchService.getOwner(id, type);
return success(owner);
}
@GetMapping("/task-dispatch-detail/getOwners")
@Operation(summary = "任务单责任人名单")
@Parameter(name = "id", description = "人员id", required = false)
@Parameter(name = "type", description = "类型", required = true)
@PreAuthorize("@ss.hasPermission('heli:task-dispatch:query')")
public CommonResult<List<HashMap<String,String>>> getOwners(@RequestParam("id") Long id) {
List<HashMap<String, String>> owner = taskDispatchService.getOwners(id);
return success(owner);
}
@GetMapping("/task-dispatch-detail/getOwnerUserList")
@Operation(summary = "获取责任人名单")
@Parameter(name = "id", description = "人员id", required = false)

View File

@ -5,15 +5,18 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import com.chanko.yunxi.mes.framework.mybatis.core.type.JsonLongSetTypeHandler;
import lombok.*;
import java.util.Set;
/**
* 业务人员配置子 DO
*
* @author 管理员
*/
@TableName("base_fp_user_detail")
@TableName(value = "base_fp_user_detail" ,autoResultMap = true)
@KeySequence("base_fp_user_detail_seq") // 用于 OraclePostgreSQLKingheliDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ -61,6 +64,9 @@ public class FpUserDetailDO extends BaseDO {
* 工序编码
*/
private String code;
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> procCd;
@TableField(exist = false)
private String nickName;
@TableField(exist = false)

View File

@ -189,6 +189,8 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
private String blueprintNo;
@TableField(exist = false)
private String duEmpName;
@TableField(exist = false)
private Integer effectiveReceivingStatus;
/**
* 零件理论重量
*/

View File

@ -227,4 +227,6 @@ public class PurchaseOrderNoDetailDO extends BaseDO {
private String ordDates;
@TableField(exist = false)
private String acarrDates;
@TableField(exist = false)
private Integer goodsType;
}

View File

@ -100,6 +100,7 @@ public class TaskDispatchDetailDO extends BaseDO {
private String projectMaterialPlanNo;
private Long projectMaterialPlanDetailId;
private Integer planStatus;
private Integer isReport;
/**
* 工序状态 默认 已提交 已完成 0 1 2
*/
@ -176,8 +177,6 @@ public class TaskDispatchDetailDO extends BaseDO {
@TableField(exist = false)
private String procedureCode;
@TableField(exist = false)
private Integer isReport;
@TableField(exist = false)
private Integer numAmount;
@TableField(exist = false)
private Long beginProduce;

View File

@ -1,8 +1,10 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.fpuserdetail;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.type.JsonLongSetTypeHandler;
import com.chanko.yunxi.mes.module.heli.controller.admin.fpuserdetail.vo.FpUserDetailPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.fpuserdetail.vo.FpUserDetailRespVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.fpuserdetail.vo.FpUserDetailSaveReqVO;
@ -131,6 +133,25 @@ public interface FpUserDetailMapper extends BaseMapperX<FpUserDetailDO> {
}
default List<FpUserDetailDO> selectOwnerLists(Long id){
MPJLambdaWrapper<FpUserDetailDO> queery1 = new MPJLambdaWrapper();
List<Long> list = new ArrayList();
list.add(id);
queery1.selectAll(FpUserDetailDO.class)
.select("c.nickname as nick_Name ")
// .leftJoin(PostDO.class,"b", PostDO::getId,FpUserDetailDO::getPostId)
.leftJoin(AdminUserDO.class,"c",AdminUserDO::getId,FpUserDetailDO::getBusyId)
// .leftJoin(FpUserDO.class,"a",FpUserDO::getId, FpUserDetailDO::getFpId)
// .eq(FpUserDO::getType,"1")
// .eq(FpUserDetailDO::getIsRes,"Y")
.in(FpUserDetailDO::getPostId,list);
return selectList(queery1);
}
void removeByPostId(String postId);
// void deleteFpId(@Param("fpId") Long fpId);
//
// void deleteByFuId(@Param("id")Long id);

View File

@ -92,6 +92,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId, MaterialPlanBoomDO::getMaterialId)
.leftJoin(SupplierDO.class, "f", SupplierDO::getId, MaterialPlanBoomDO::getSupplierId)
.eq(MaterialPlanDO::getMatType,0)
.in(MaterialPlanBoomDO::getIsPurYard,Arrays.asList(0,5))
.disableSubLogicDel()
@ -102,6 +103,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
query.like(ObjectUtil.isNotEmpty(pageReqVO.getMaterialName()),MaterialPlanBoomDO::getMatName, pageReqVO.getMaterialName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectCode()),ProjectOrderDO::getCode, pageReqVO.getProjectCode());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getOwnerName()),AdminUserDO::getNickname, pageReqVO.getOwnerName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()),SupplierDO::getBrief, pageReqVO.getSupplierName());
query.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectMaterialPlanNo()),MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());
if (pageReqVO.getMplanStatus() == 0){
query.in(MaterialPlanBoomDO::getMplanStatus,Arrays
@ -239,7 +241,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.leftJoin(AdminUserDO.class, "a", AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.leftJoin(ProcedureDO.class, "c", ProcedureDO::getId, MaterialPlanBoomDO::getProcedureId)
.leftJoin(CompositionDO.class, "e", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(SupplierDO.class, "f", SupplierDO::getId, MaterialPlanBoomDO::getSupplierId)
.leftJoin(SupplierDO.class, "f", SupplierDO::getId, PurchaseOrderMakeDetailDO::getSupplierId)
.disableSubLogicDel();
query
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()),MaterialPlanDO::getProjectName, pageReqVO.getProjectName())
@ -252,6 +254,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.like(!StringUtils.isEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName())
.eq(!StringUtils.isEmpty(pageReqVO.getMatType()), MaterialPlanDO::getMatType, pageReqVO.getMatType())
.eq(!StringUtils.isEmpty(pageReqVO.getStatus()), MaterialPlanBoomDO::getIsPurYard, pageReqVO.getStatus())
.like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName())
.in(Objects.nonNull(pageReqVO.getMplanStatus()), MaterialPlanBoomDO::getMplanStatus, pageReqVO.getMplanStatus() != null && pageReqVO.getMplanStatus() != 0 ? Arrays.asList(pageReqVO.getMplanStatus()) : Arrays.asList(0, 3))
.eq(Objects.nonNull(pageReqVO.getProjectMaterialPlanNo()), MaterialPlanDO::getProjectMaterialPlanNo, pageReqVO.getProjectMaterialPlanNo());

View File

@ -80,9 +80,10 @@ public interface PgMasterLineMapper extends BaseMapperX<PgMasterLineDO> {
.select("pd.name as procedureName")
.leftJoin("(select SUM(c.amount) as amounts ,SUM(c.work_time) as workTime,c.zj_mx_id from quality_bg_master_line c group by c.zj_mx_id) d on d.zj_mx_id = t.id")
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PgMasterLineDO::getProjectSubId)
.leftJoin(PlanDO.class,"pl",PlanDO::getProjectId,ProjectOrderSubDO::getProjectOrderId)
.leftJoin(ProcedureDO.class,"pd",ProcedureDO::getId,PgMasterLineDO::getProcedureId)
.eq(PlanDO::getStatus,2)
.leftJoin(TaskDispatchDetailDO.class,"td",TaskDispatchDetailDO::getId,PgMasterLineDO::getDispatchDetailId)
.leftJoin(TaskDispatchDO.class,"ta",TaskDispatchDO::getId,TaskDispatchDetailDO::getDispatchId)
.leftJoin(ProcessBomDetailDO.class,"pb",ProcessBomDetailDO::getId,TaskDispatchDO::getBomDetailId)
.disableSubLogicDel();
if (reqVO.getPgType() == 1){
query.orderByDesc(PgMasterLineDO::getPgNumber);
@ -95,7 +96,7 @@ public interface PgMasterLineMapper extends BaseMapperX<PgMasterLineDO> {
if (reqVO.getSubOrDetailName() != null && !reqVO.getSubOrDetailName().trim().equals("")){
query.and( e ->e.eq(PgMasterLineDO::getProjectName, reqVO.getSubOrDetailName()).or().eq(
PgMasterLineDO::getProjectSubName, reqVO.getSubOrDetailName()
).or().eq(PgMasterLineDO::getMaterialName, reqVO.getSubOrDetailName()));
).or().eq(PgMasterLineDO::getMaterialName, reqVO.getSubOrDetailName()).or().eq(ProcessBomDetailDO::getBomBlueprintNo, reqVO.getSubOrDetailName()));
// query.eq(" (b.project_name like '%" + reqVO.getSubOrDetailName() + "%' or c.name like '%" + reqVO.getSubOrDetailName() + "%')");
}

View File

@ -205,4 +205,6 @@ public interface ProcessBomMapper extends BaseMapperX<ProcessBomDO> {
BigDecimal inspection1(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
void delMaterialPlan(@Param("id")Long id);
BigDecimal outsourcingExpenses(@Param("id") Long id,@Param("projectSubId") Long projectSubId);
}

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.dal.mysql.processdesign;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
@ -224,9 +225,14 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
;
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType());
if (ObjectUtil.isNotEmpty(reqVO.getIsOverProcess())){
if (reqVO.getIsOverProcess() == 1){
query.eq(ProcessDesignDO::getIsOverProcess, 1);
}else {
query.ne(ProcessDesignDO::getIsOverProcess, 1);
}
}
query.and(q -> q
.and(innerQ -> innerQ
@ -311,9 +317,14 @@ public interface ProcessDesignMapper extends BaseMapperX<ProcessDesignDO> {
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), ProjectOrderSubDO::getName, reqVO.getProjectSubName())
// .in(reqVO.getProcessDesignTypeList() != null && !reqVO.getProcessDesignTypeList().isEmpty(), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignTypeList())
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType())
;
.like(!StringUtils.isEmpty(reqVO.getProcessDesignType()), ProcessDesignDO::getProcessDesignType, reqVO.getProcessDesignType());
if (ObjectUtil.isNotEmpty(reqVO.getIsOverProcess())){
if (reqVO.getIsOverProcess() == 1){
query.eq(ProcessDesignDO::getIsOverProcess, 1);
}else {
query.ne(ProcessDesignDO::getIsOverProcess, 1);
}
}
query.and(q -> q
.and(innerQ -> innerQ
.apply("a.craft_start_date is not null and a.craft_end_date is not null and t.process_design_type = {0}", ProcessDesignTypeEnum.BLUEPRINT_FOUNDRY_TECHNOLOGY.name())

View File

@ -177,6 +177,8 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
" ELSE ROUND(t.estimated_price / t.purchase_amount, 1)\n" +
"END AS unitPrice")
.select("e.name as procedureName")
.select("COALESCE(no.receiving_status, 1) AS effectiveReceivingStatus")
.leftJoin(PurchaseOrderMakeDO.class,"a",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)
.leftJoin(ProjectOrderDO.class,"b",ProjectOrderDO::getId,PurchaseOrderMakeDO::getProjectId)
.leftJoin(AdminUserDO.class,"c", AdminUserDO::getId,PurchaseOrderMakeDetailDO::getDuEmpId)
@ -184,6 +186,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.leftJoin(ProcedureDO.class, "e", ProcedureDO::getId, PurchaseOrderMakeDetailDO::getProcedureId)
.leftJoin(ProcessBomDetailDO.class, "bom", ProcessBomDetailDO::getId, PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(ProjectOrderSubDO.class,"sub", ProjectOrderSubDO::getId, PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(PurchaseOrderNoDetailDO.class,"no", PurchaseOrderNoDetailDO::getId, PurchaseOrderMakeDetailDO::getPurchaseOrderNoDetailId)
.disableSubLogicDel()
.eq(ObjectUtil.isNotEmpty(pageReqVO.getGoodsType()) ,PurchaseOrderMakeDO::getGoodsType, pageReqVO.getGoodsType())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProjectName()), PurchaseOrderMakeDO::getProjectName, pageReqVO.getProjectName())
@ -195,7 +198,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.like(ObjectUtil.isNotEmpty(pageReqVO.getBrief()), PurchaseOrderMakeDO::getBrief, pageReqVO.getBrief())
.like(ObjectUtil.isNotEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
.like(ObjectUtil.isNotEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName());
.eq(ObjectUtil.isNotEmpty(pageReqVO.getReceivingStatus()), "COALESCE(no.receiving_status, 1) ", pageReqVO.getReceivingStatus()) .like(ObjectUtil.isNotEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName());
return selectPage(pageReqVO, query);
}
}

View File

@ -9,6 +9,8 @@ import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
@ -36,12 +38,19 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
.select("u1.nickname as submitUserName")
.select("CASE " +
" WHEN COUNT(d.id) = 0 THEN 1 " + // 无子记录
" WHEN SUM(CASE d.receiving_status WHEN 2 THEN 1 ELSE 0 END) > 0 THEN 2 " + // 只要有一个状态为2
" WHEN SUM(CASE d.receiving_status WHEN 3 THEN 0 ELSE 1 END) = 0 THEN 3 " + // 全部为3
" WHEN SUM(CASE d.receiving_status WHEN 1 THEN 1 ELSE 0 END) = COUNT(d.id) THEN 1 " + // 全部为1
" ELSE 2 " + // 其他情况
"END AS receivingStatus1")
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
.leftJoin(PurchaseOrderNoDetailDO.class,"d", PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
// .leftJoin(ProcedureDO.class,"pro", ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)
.leftJoin(ProcedureDO.class, "pro", wrapper -> wrapper
.eq(ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)
// .like(ProcedureDO::getName, "%下料%"))
.like(!ObjectUtil.isEmpty(reqVO.getProcedureName()), ProcedureDO::getName, reqVO.getProcedureName()))
.leftJoin(ProcessBomDetailDO.class,"b", ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
.leftJoin(MaterialPlanDO.class, "m", MaterialPlanDO::getId, PurchaseOrderNoDO::getProjectMaterialPlanId)
.leftJoin(AdminUserDO.class,"u", AdminUserDO::getId, PurchaseOrderNoDetailDO::getDuEmpId)
.leftJoin(AdminUserDO.class,"u1", AdminUserDO::getId, PurchaseOrderNoDO::getCreator)
@ -53,16 +62,80 @@ public interface PurchaseOrderNoMapper extends BaseMapperX<PurchaseOrderNoDO> {
.like(!StringUtils.isEmpty(reqVO.getMaterialPlanNo()), "m.project_material_plan_no", reqVO.getMaterialPlanNo())
.apply(!StringUtils.isEmpty(reqVO.getCreateTime()), "DATE_FORMAT(t.create_time,'%Y-%m-%d') = {0}", reqVO.getCreateTime())
.eq(reqVO.getStatus() != null, PurchaseOrderNoDO::getStatus, reqVO.getStatus())
.eq(PurchaseOrderNoDetailDO::getDeleted,0)
// .eq(reqVO.getReceivingStatus() != null, PurchaseOrderNoDO::getReceivingStatus, reqVO.getReceivingStatus())
.eq(reqVO.getPurchaseType() != null, PurchaseOrderNoDO::getPurchaseType, reqVO.getPurchaseType())
.eq(reqVO.getGoodsType() != null, PurchaseOrderNoDO::getGoodsType, reqVO.getGoodsType())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, reqVO.getProjectSubName())
.like(!StringUtils.isEmpty(reqVO.getUsername()), AdminUserDO::getNickname, reqVO.getUsername())
.like(!ObjectUtil.isEmpty(reqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, reqVO.getBoomName())
// .like(!ObjectUtil.isEmpty(reqVO.getProcedureName()), ProcedureDO::getName, reqVO.getProcedureName())
.like(!ObjectUtil.isEmpty(reqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, reqVO.getBlueprintNo())
.having(reqVO.getReceivingStatus() != null,"receivingStatus1 = {0}", reqVO.getReceivingStatus())
.having(!ObjectUtil.isEmpty(reqVO.getProcedureName()),"COUNT(pro.id) > 0")
.in(reqVO.getIds() != null && !reqVO.getIds().isEmpty(),PurchaseOrderNoDO::getId,reqVO.getIds());
return selectPage(reqVO, query);
// MPJLambdaWrapper<PurchaseOrderNoDO> query = new MPJLambdaWrapper<>();
//
// query.selectAll(PurchaseOrderNoDO.class)
// .select("s.brief as supplierName", "m.project_material_plan_no as materialPlanNo")
// .select("u1.nickname as submitUserName")
// .select("pro.name")
// .select("CASE " +
// " WHEN COUNT(d.id) = 0 THEN 1 " +
// " WHEN SUM(CASE d.receiving_status WHEN 3 THEN 0 ELSE 1 END) = 0 THEN 3 " +
// " WHEN SUM(CASE d.receiving_status WHEN 1 THEN 1 ELSE 0 END) = COUNT(d.id) THEN 1 " +
// " ELSE 2 " +
// "END AS receivingStatus1")
// .leftJoin(SupplierDO.class, "s", wrapper -> wrapper
// .eq(SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
// )
// .leftJoin(PurchaseOrderNoDetailDO.class, "d", wrapper -> wrapper
// .eq(PurchaseOrderNoDetailDO::getPurchaseOrderId, PurchaseOrderNoDO::getId)
// )
// .leftJoin(ProcessBomDetailDO.class, "b", wrapper -> wrapper
// .eq(ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
// )
// .leftJoin(ProcedureDO.class, "pro", wrapper -> wrapper
// .eq(ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)
//// .like(ProcedureDO::getName, "%下料%"))
// .like(!ObjectUtil.isEmpty(reqVO.getProcedureName()), ProcedureDO::getName, reqVO.getProcedureName()))
// .leftJoin(MaterialPlanDO.class, "m", wrapper -> wrapper
// .eq(MaterialPlanDO::getId, PurchaseOrderNoDO::getProjectMaterialPlanId)
// )
// .leftJoin(AdminUserDO.class, "u", wrapper -> wrapper
// .eq(AdminUserDO::getId, PurchaseOrderNoDetailDO::getDuEmpId)
// )
// .leftJoin(AdminUserDO.class, "u1", wrapper -> wrapper
// .eq(AdminUserDO::getId, PurchaseOrderNoDO::getCreator)
// .eq(AdminUserDO::getTenantId, 2))
// .eq(PurchaseOrderNoDO::getDeleted, 0)
// .eq(PurchaseOrderNoDO::getGoodsType, 2) // t.goods_type = 2
// .eq(PurchaseOrderNoDetailDO::getDeleted, 0) // d.deleted = 0
// .groupBy(PurchaseOrderNoDO::getId)
//// .having("receivingStatus1 = 2 AND COUNT(pro.id) > 0") // HAVING 条件
// .having(reqVO.getReceivingStatus() != null,"receivingStatus1 = {0}", reqVO.getReceivingStatus())
// .having(!ObjectUtil.isEmpty(reqVO.getProcedureName()),"COUNT(pro.id) > 0")
// .orderByDesc(PurchaseOrderNoDO::getCreateTime);
//
//// 添加其他动态查询条件
// query.like(!StringUtils.isEmpty(reqVO.getPurchaseNo()), PurchaseOrderNoDO::getPurchaseNo, reqVO.getPurchaseNo())
// .like(!StringUtils.isEmpty(reqVO.getSupplierName()), "s.brief", reqVO.getSupplierName())
// .like(!StringUtils.isEmpty(reqVO.getMaterialPlanNo()), "m.project_material_plan_no", reqVO.getMaterialPlanNo())
// .apply(!StringUtils.isEmpty(reqVO.getCreateTime()), "DATE_FORMAT(t.create_time,'%Y-%m-%d') = {0}", reqVO.getCreateTime())
// .eq(reqVO.getStatus() != null, PurchaseOrderNoDO::getStatus, reqVO.getStatus())
// .eq(reqVO.getPurchaseType() != null, PurchaseOrderNoDO::getPurchaseType, reqVO.getPurchaseType())
// .like(!StringUtils.isEmpty(reqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, reqVO.getProjectName())
// .like(!StringUtils.isEmpty(reqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, reqVO.getProjectSubName())
// .like(!StringUtils.isEmpty(reqVO.getUsername()), "u.nickname", reqVO.getUsername())
// .like(!ObjectUtil.isEmpty(reqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, reqVO.getBoomName())
// .like(!ObjectUtil.isEmpty(reqVO.getBlueprintNo()), "b.blueprint_no", reqVO.getBlueprintNo())
// .in(reqVO.getIds() != null && !reqVO.getIds().isEmpty(), PurchaseOrderNoDO::getId, reqVO.getIds());
//
// return selectPage(reqVO, query);
}
default PageResult<PurchaseOrderNoDO> getPurchaseOrderPage(PurchaseOrderNoPageReqVO pageReqVO){

View File

@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail;
import java.time.LocalDateTime;
import java.util.*;
import cn.hutool.core.util.ObjectUtil;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
@ -70,7 +71,7 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderNoDetailDO.class)
.select("t.composition as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode","pro.name as procedureName","bom.blueprint_no as blueprintNo","psub.id as projectSubId")
.select("ROUND(t.estimated_price / t.purchase_amount, 1) as unitPrice")
.select("ROUND(t.estimated_price / t.purchase_amount, 1) as unitPrice","bom.spec as matSpec")
.leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderBoomDO::getPurchaseOrderId)
.leftJoin(ProcessBomDetailDO.class,"bom", ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
.leftJoin(MaterialPlanBoomDO.class,"plan", MaterialPlanBoomDO::getId, PurchaseOrderNoDetailDO::getProjectMaterialPlanBoomId)
@ -191,4 +192,50 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
return selectPage(pageReqVO, query);
}
default PageResult<PurchaseOrderNoDetailDO> getReceivingGoods(PurchaseOrderNoDetailPageReqVO pageReqVO){
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderNoDetailDO.class)
.select("s.brief as supplierName","t.purchase_rem_amount as purchaseRemAmounts")
.select("DATE_FORMAT(t.require_time,'%Y-%m-%d') as requireTimes","DATE_FORMAT(t.arrive_time,'%Y-%m-%d') as arriveTimes")
.select("bom.blueprint_no as blueprintNo","d.name as procedureName")
.select("p.goods_type as goodsType")
.leftJoin(PurchaseOrderNoDO.class,"p", PurchaseOrderNoDO::getId, PurchaseOrderNoDetailDO::getPurchaseOrderId)
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)
.leftJoin(MaterialDO.class,"m", MaterialDO::getId, PurchaseOrderNoDetailDO::getMaterialId)
.leftJoin(ProjectOrderDO.class,"pro", ProjectOrderDO::getId, PurchaseOrderNoDetailDO::getProjectId)
.leftJoin(ProcessBomDetailDO.class,"bom", ProcessBomDetailDO::getId, PurchaseOrderNoDetailDO::getBoomDetailId)
.leftJoin(ProcedureDO.class, "d", ProcedureDO::getId, PurchaseOrderNoDetailDO::getProcedureId)
.disableSubLogicDel()
.groupBy(PurchaseOrderNoDetailDO::getId)
.orderByDesc(PurchaseOrderNoDetailDO::getCreateTime);
if (pageReqVO.getSubOrDetailName() != null && !pageReqVO.getSubOrDetailName().trim().equals("")){
query.and( e ->e.like(PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getSubOrDetailName()).or().like(
ProcessBomDetailDO::getBlueprintNo, pageReqVO.getSubOrDetailName()
).or().like(ProcedureDO::getName, pageReqVO.getSubOrDetailName()));
}
query
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), PurchaseOrderNoDetailDO::getProjectName, pageReqVO.getProjectName())
.like(!StringUtils.isEmpty(pageReqVO.getProjectSubName()), PurchaseOrderNoDetailDO::getName, pageReqVO.getProjectSubName())
.like(!StringUtils.isEmpty(pageReqVO.getSupplierName()), SupplierDO::getBrief, pageReqVO.getSupplierName())
.like(ObjectUtil.isNotEmpty(pageReqVO.getBlueprintNo()), ProcessBomDetailDO::getBlueprintNo, pageReqVO.getBlueprintNo())
// .ne(PurchaseOrderNoDO::getPurchaseType, 2)
.eq(PurchaseOrderNoDO::getGoodsType,2)
.in(PurchaseOrderNoDetailDO::getReceivingStatus, 1,2)
.like(!StringUtils.isEmpty(pageReqVO.getBoomName()), PurchaseOrderNoDetailDO::getBoomName, pageReqVO.getBoomName())
.like(!StringUtils.isEmpty(pageReqVO.getProcedureName()), ProcedureDO::getName, pageReqVO.getProcedureName());
return selectPage(pageReqVO, query);
}
default Long getReceivingGoodsMessage(){
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query
.leftJoin(PurchaseOrderNoDO.class,"p", PurchaseOrderNoDO::getId, PurchaseOrderNoDetailDO::getPurchaseOrderId)
.eq(PurchaseOrderNoDO::getGoodsType,2)
.in(PurchaseOrderNoDetailDO::getReceivingStatus, 1,2);
return selectCount( query);
}
}

View File

@ -2,6 +2,7 @@ package com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
@ -302,7 +303,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
return selectPage(reqVO, query);
}
default PageResult<TaskDispatchDetailDO> selectPageWx(TaskDispatchDetailPageReqVO reqVO , Map<String, Long> postIds) {
default PageResult<TaskDispatchDetailDO> selectPageWx(TaskDispatchDetailPageReqVO reqVO , Map<String, Set<Long>> postIds) {
// 假设reqVO中包含了页码(page)和每页数量(limit)
MPJLambdaWrapper<TaskDispatchDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(TaskDispatchDetailDO.class)
@ -332,7 +333,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
if (reqVO.getSubOrDetailName() != null && !reqVO.getSubOrDetailName().trim().equals("")){
query.and( e ->e.eq(ProjectOrderDO::getProjectName, reqVO.getSubOrDetailName()).or().eq(
ProjectOrderSubDO::getName, reqVO.getSubOrDetailName()
).or().eq(ProcessBomDetailDO::getMaterialName, reqVO.getSubOrDetailName()));
).or().eq(ProcessBomDetailDO::getMaterialName, reqVO.getSubOrDetailName()).or().eq(ProcessBomDetailDO::getBomBlueprintNo, reqVO.getSubOrDetailName()));
// query.eq(" (b.project_name like '%" + reqVO.getSubOrDetailName() + "%' or c.name like '%" + reqVO.getSubOrDetailName() + "%')");
}
query.and(wrapper -> {
@ -342,10 +343,10 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
wrapper.and(i -> {
// 为每个岗位创建对应的工序查询条件
for (String postId : postIds.keySet()) {
Long processId = postIds.get(postId);
Set<Long> processId = postIds.get(postId);
if (ObjectUtil.isNotEmpty(processId)) {
i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId)
.eq(TaskDispatchDetailDO::getProcedureId, processId)
.in(TaskDispatchDetailDO::getProcedureId, processId)
.isNull(TaskDispatchDetailDO::getOwner));
} else {
i.or(j -> j.eq(TaskDispatchDetailDO::getPostId, postId)
@ -361,7 +362,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
});
query.in(CollUtil.isNotEmpty(reqVO.getProcedureStatusList()), TaskDispatchDetailDO::getProcedureStatus, reqVO.getProcedureStatusList())
.eq(reqVO.getIsReport() != null, ProcedureDO::getIsReport, reqVO.getIsReport())
.eq(reqVO.getIsReport() != null, TaskDispatchDetailDO::getIsReport, reqVO.getIsReport())
.eq(!StringUtils.isEmpty(reqVO.getDispatchType()), TaskDispatchDO::getDispatchType, reqVO.getDispatchType())
.eq(reqVO.getTaskId() != null, TaskDispatchDO::getTaskId, reqVO.getTaskId())
.eq(reqVO.getBomDetailId() != null, TaskDispatchDO::getBomDetailId, reqVO.getBomDetailId());
@ -787,6 +788,7 @@ public interface TaskDispatchDetailMapper extends BaseMapperX<TaskDispatchDetail
BigDecimal assemblyLaborCost(@Param("id") Long id);
BigDecimal bubbleFees(@Param("bomDetailId") Long bomDetailId, @Param("procedureId") Long procedureId);
BigDecimal materialCosts(@Param("bomDetailId") Long bomDetailId, @Param("procedureId") Long procedureId);
BigDecimal materialCost(@Param("id") Long id);

View File

@ -12,6 +12,7 @@ import com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils;
import com.chanko.yunxi.mes.framework.web.core.util.WebFrameworkUtils;
import com.chanko.yunxi.mes.module.heli.controller.admin.taskdispatch.vo.TaskDispatchPageReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.attentiontodo.AttentiontodoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
@ -19,6 +20,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.Materi
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pgmaster.PgMasterLineDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.weiXinXiaoXi.WeixinXiaoXiConfigDO;
@ -26,6 +28,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.weiXinXiaoXi.WeixinXiaoXi
import com.chanko.yunxi.mes.module.heli.dal.dataobject.weiXinXiaoXi.WeixinXiaoXiXinXiMoBanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.zjpgmaster.ZjPgMasterLineDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.customer.CustomerMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
@ -33,6 +36,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplandetail.MaterialPla
import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmaster.PgMasterMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
@ -117,11 +121,14 @@ public class bdgzsomthingServiceImpl implements bdgzsomthingService {
private PgMasterMapper pgMasterMapper;
@Resource
private ProjectOrderMapper projectOrderMapper;
@Resource
private ProjectOrderSubMapper projectOrderSubMapper;
@Resource
private MaterialPlanBoomMapper materialPlanBoomMapper;
@Resource
private MaterialPlanMapper materialPlanMapper;
@Resource
private CustomerMapper customerMapper;
@Override
public Long createbdgzsomthing(bdgzsomthingSaveReqVO createReqVO) {
// 插入
@ -694,71 +701,77 @@ public class bdgzsomthingServiceImpl implements bdgzsomthingService {
List<PlanDO> selectfhtj = planMapper.selectfhtj(attentiontodoRespVO.getTxrid());
{
for (PlanDO deliverOrderDO : selectfhtj) {
bdgzsomthingDO BdgzsomthingDO = new bdgzsomthingDO();
BdgzsomthingDO.setThingname(attentiontodoRespVO.getEvent());//事件名称
BdgzsomthingDO.setAttr4("0");//是否点击
LocalDateTime projectEndTime = deliverOrderDO.getChangeEndTime();//要求完成时间
LocalDate projectEndDay = projectEndTime.toLocalDate();
String timetype="";
if(deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_WORKBLANK")){
timetype="毛坯设计";
}
if(deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_3D")){
timetype="3D设计";
}
if(deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_2D")){
timetype="2D设计";
}
if (today4.equals(projectEndDay.minusDays(1))) {
BdgzsomthingDO.setThings("编号:"+deliverOrderDO.getProjectSubCode()+timetype+"设计任务明天到期");//事件名称
} else if (today4.equals(projectEndDay)) {
BdgzsomthingDO.setThings("编号:"+deliverOrderDO.getProjectSubCode()+timetype+"设计任务今日到期");//事件名称
} else if (projectEndDay.isBefore(today4)) {
BdgzsomthingDO.setThings("编号:"+deliverOrderDO.getProjectSubCode()+timetype+"设计任务已逾期");//事件名称
}else{
BdgzsomthingDO.setAttr4("1");
}
BdgzsomthingDO.setAttr2(null);//因为不用跳转所以为null
BdgzsomthingDO.setClicktime(attentiontodoRespVO.getRemindtime());//提醒周期
BdgzsomthingDO.setTenantId(attentiontodoRespVO.getTxrid());
ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(deliverOrderDO.getProjectId());
if (ObjectUtil.isNotEmpty(projectOrderDO)){
CustomerDO customerDO = customerMapper.selectById(projectOrderDO.getCustomerId());
if (ObjectUtil.isNotEmpty(customerDO)) {
ProjectOrderSubDO projectOrderSubDO = projectOrderSubMapper.selectById(deliverOrderDO.getProjectSubId());
if (ObjectUtil.isNotEmpty(projectOrderSubDO)) {
bdgzsomthingDO BdgzsomthingDO = new bdgzsomthingDO();
BdgzsomthingDO.setThingname(attentiontodoRespVO.getEvent());//事件名称
BdgzsomthingDO.setAttr4("0");//是否点击
LocalDateTime projectEndTime = deliverOrderDO.getChangeEndTime();//要求完成时间
LocalDate projectEndDay = projectEndTime.toLocalDate();
String timetype = "";
if (deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_WORKBLANK")) {
timetype = "毛坯设计";
}
if (deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_3D")) {
timetype = "3D设计";
}
if (deliverOrderDO.getProcessDesignType().equals("BLUEPRINT_2D")) {
timetype = "2D设计";
}
if (today4.equals(projectEndDay.minusDays(1))) {
BdgzsomthingDO.setThings(customerDO.getBrief() +","+projectOrderSubDO.getName()+""+ timetype + "进度明天到期");//事件名称
} else if (today4.equals(projectEndDay)) {
BdgzsomthingDO.setThings( customerDO.getBrief() +","+projectOrderSubDO.getName()+""+ timetype +"进度今日到期");//事件名称
} else if (projectEndDay.isBefore(today4)) {
BdgzsomthingDO.setThings(customerDO.getBrief() +","+projectOrderSubDO.getName()+""+ timetype +"进度已逾期");//事件名称
} else {
BdgzsomthingDO.setAttr4("1");
}
BdgzsomthingDO.setAttr2(null);//因为不用跳转所以为null
BdgzsomthingDO.setClicktime(attentiontodoRespVO.getRemindtime());//提醒周期
BdgzsomthingDO.setTenantId(attentiontodoRespVO.getTxrid());
// BdgzsomthingDO.setShowname(new Date());比较创建时间,不用单独填写
if(attentiontodoRespVO.getAttr5().equals("1")){//提醒状态
BdgzsomthingDO.setDborgz("待办");
}
else if(attentiontodoRespVO.getAttr5().equals("2")){
BdgzsomthingDO.setDborgz("关注");
}
if (ObjectUtil.isEmpty(attentiontodoRespVO.getAttr4())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(deliverOrderDO.getCreator()));
if (ObjectUtil.isNotEmpty(user)){
BdgzsomthingDO.setClick(user.getNickname());
}
if (attentiontodoRespVO.getAttr5().equals("1")) {//提醒状态
BdgzsomthingDO.setDborgz("待办");
} else if (attentiontodoRespVO.getAttr5().equals("2")) {
BdgzsomthingDO.setDborgz("关注");
}
if (ObjectUtil.isEmpty(attentiontodoRespVO.getAttr4())) {
AdminUserDO user = adminUserService.getUser(Long.valueOf(deliverOrderDO.getCreator()));
if (ObjectUtil.isNotEmpty(user)) {
BdgzsomthingDO.setClick(user.getNickname());
}
}else {
BdgzsomthingDO.setClick(attentiontodoRespVO.getAttr4());
}//提醒人
if(attentiontodoRespVO.getLevel().equals("1")){
BdgzsomthingDO.setLevel("紧急");
}
else if(attentiontodoRespVO.getLevel().equals("2")){
BdgzsomthingDO.setLevel("一般");
}
else if(attentiontodoRespVO.getLevel().equals("3")){
BdgzsomthingDO.setLevel("非紧急");
}
BdgzsomthingDO.setYesorno("0");//是否点击
} else {
BdgzsomthingDO.setClick(attentiontodoRespVO.getAttr4());
}//提醒人
if (attentiontodoRespVO.getLevel().equals("1")) {
BdgzsomthingDO.setLevel("紧急");
} else if (attentiontodoRespVO.getLevel().equals("2")) {
BdgzsomthingDO.setLevel("一般");
} else if (attentiontodoRespVO.getLevel().equals("3")) {
BdgzsomthingDO.setLevel("非紧急");
}
BdgzsomthingDO.setYesorno("0");//是否点击
BdgzsomthingDO.setAttr3(deliverOrderDO.getProjectSubCode());//获取数据当前表的id
BdgzsomthingDO.setAttr3(deliverOrderDO.getProjectSubCode());//获取数据当前表的id
// BdgzsomthingDO.setShowname(deliverOrderDO.getCreateTime());//获取数据当前表的创建事件
//去重查询,重复则不加
List<bdgzsomthingDO> selecteqint = bdgzsomthingMapper.selecteqintq(BdgzsomthingDO);
//去重查询,重复则不加
List<bdgzsomthingDO> selecteqint = bdgzsomthingMapper.selecteqintq(BdgzsomthingDO);
if(selecteqint.size()>0){
if (selecteqint.size() > 0) {
}else{
//插入方法
bdgzsomthingMapper.insert(BdgzsomthingDO);
} else {
//插入方法
bdgzsomthingMapper.insert(BdgzsomthingDO);
}
}
}
}
}
}

View File

@ -17,7 +17,10 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Iterator;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.FP_USER_DETAIL_NOT_EXISTS;
@ -45,7 +48,8 @@ public class FpUserDetailServiceImpl implements FpUserDetailService {
if (fpUser!=null){
fpId = fpUser.getId();
// fpUserDetailMapper.delete("fp_id", String.valueOf(fpId));
fpUserDetailMapper.delete("post_id", String.valueOf(createReqVO.getPostId()));
// fpUserDetailMapper.delete("post_id", String.valueOf(createReqVO.getPostId()));
fpUserDetailMapper.removeByPostId(createReqVO.getPostId());
}else {
FpUserDO fpUserDO = new FpUserDO();
fpUserDO.setType(createReqVO.getType());
@ -59,12 +63,13 @@ public class FpUserDetailServiceImpl implements FpUserDetailService {
fpUserDetailDO.setFpId(fpId);
fpUserDetailDO.setBusyId(user.getBusyId());
fpUserDetailDO.setPostId(user.getPostId());
fpUserDetailDO.setProcCd(user.getProcCd());
fpUserDetailDO.setIsRes(user.getIsRes());
fpUserDetailDO.setProcedureId(user.getProcedureId());
ProcedureDO procedureDO = procedureMapper.selectById(user.getProcedureId());
if (ObjectUtil.isNotEmpty(procedureDO)){
fpUserDetailDO.setCode(procedureDO.getCode());
}
// fpUserDetailDO.setProcedureId(user.getProcedureId());
// ProcedureDO procedureDO = procedureMapper.selectById(user.getProcedureId());
// if (ObjectUtil.isNotEmpty(procedureDO)){
// fpUserDetailDO.setCode(procedureDO.getCode());
// }
fpUserDetailMapper.insert(fpUserDetailDO);
}
}

View File

@ -33,6 +33,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmaster.PgMasterMapper;
//import com.chanko.yunxi.mes.module.heli.dal.mysql.pgmasterline.PgMasterLineMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/**
@ -71,6 +72,7 @@ public class PgMasterServiceImpl implements PgMasterService {
List<PgMasterLineDO> pgMasterLineDOList = new ArrayList<>();
processBomDOList.forEach( o ->{
PgMasterLineDO pgMasterLineDO = new PgMasterLineDO();
pgMasterLineDO.setCreator(getLoginUser().getId().toString());
//bomID
pgMasterLineDO.setBomId(o.getBomId());
//工序id

View File

@ -1472,7 +1472,8 @@ public class ProcessBomServiceImpl implements ProcessBomService {
@Override
public BigDecimal outsourcedProcessingFee(Long id, Long projectSubId) {
BigDecimal cost=processBomMapper.outsourcedProcessingFee(id,projectSubId);
// BigDecimal cost=processBomMapper.outsourcedProcessingFee(id,projectSubId);
BigDecimal cost=processBomMapper.outsourcingExpenses(id,projectSubId);
if (ObjectUtil.isEmpty(cost)) cost=BigDecimal.ZERO;
return cost;
}

View File

@ -216,6 +216,12 @@ public class ProcessDesignServiceImpl implements ProcessDesignService {
validateProcessDesignExists(updateReqVO.getId());
// 更新
ProcessDesignDO updateObj = BeanUtils.toBean(updateReqVO, ProcessDesignDO.class);
if (ObjectUtil.isNotEmpty(updateReqVO.getIsDelay())){
if (updateReqVO.getIsDelay()!=1){
updateReqVO.setDelayReason( null);
}
}
updateObj.setReReason(null);
processDesignMapper.updateById(updateObj);
// 更新子表

View File

@ -378,6 +378,9 @@ public class PurchaseOrderNoServiceImpl implements PurchaseOrderNoService {
if (ObjectUtil.isNotEmpty(noDetailDOS)) {
return CommonResult.error(400,"该订单已收货,请确认!");
}
// LambdaQueryWrapper<PurchaseOrderNoDetailDO> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(PurchaseOrderNoDetailDO::getPurchaseOrderId, id);
LambdaQueryWrapper<PurchaseOrderNoDetailDO> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(PurchaseOrderNoDetailDO::getPurchaseOrderId, id);
purchaseOrderNoDetailMapper.delete(queryWrapper1);

View File

@ -66,4 +66,8 @@ public interface PurchaseOrderNoDetailService {
PageResult<PurchaseOrderNoDetailDO> getOutsourcingExpenses(PurchaseOrderNoDetailPageReqVO pageReqVO);
PageResult<PurchaseOrderNoDetailDO> exportOutsourcing(PurchaseOrderNoDetailPageReqVO pageReqVO);
PageResult<PurchaseOrderNoDetailDO> getReceivingGoods(PurchaseOrderNoDetailPageReqVO pageReqVO);
Long getReceivingGoodsMessage();
}

View File

@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthing
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.MaterialPlanDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
@ -20,11 +21,14 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagein.StorageInDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageindetail.StorageInDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.attentiontodo.AttentiontodoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplandetail.MaterialPlanDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
@ -33,8 +37,11 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageindetail.StorageInDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.taskdispatch.TaskDispatchMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.service.attentiontodo.AttentiontodoService;
import com.chanko.yunxi.mes.module.heli.service.pgmaster.PgMasterService;
import com.chanko.yunxi.mes.module.heli.service.procedure.ProcedureService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.storage.StorageService;
@ -117,6 +124,14 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
private StorageInDetailMapper storageInDetailMapper;
@Resource
private StorageLogMapper storageLogMapper;
@Resource
private TaskDispatchDetailMapper taskDispatchDetailMapper;
@Resource
private TaskDispatchMapper taskDispatchMapper;
@Resource
private PlanMapper planMapper;
@Resource
private PgMasterService pgMasterService;
@Override
public Long createPurchaseOrderNoDetail(PurchaseOrderNoDetailSaveReqVO createReqVO) {
@ -243,6 +258,21 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
byId.setEstimatedPrice(detailDO.getEstimatedPrice());
if (byId.getPurchaseRemAmount().compareTo(detailDO.getPurchaseRemAmounts())==0){
byId.setReceivingStatus(3);
LambdaQueryWrapper<TaskDispatchDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskDispatchDO::getBomDetailId, byId.getBoomDetailId());
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(taskDispatchDO)){
LambdaQueryWrapper<TaskDispatchDetailDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TaskDispatchDetailDO::getDispatchId, taskDispatchDO.getId());
wrapper.eq(TaskDispatchDetailDO::getProcedureId, byId.getProcedureId());
TaskDispatchDetailDO taskDispatchDetailDO = taskDispatchDetailMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(taskDispatchDetailDO)){
PlanDO planDO = planMapper.selectById(taskDispatchDO.getPlanId());
if (ObjectUtil.isNotEmpty(planDO)&&taskDispatchDetailDO.getCheckYn()==0){
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO);
}
}
}
}else {
byId.setReceivingStatus(2);
}
@ -510,4 +540,14 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
});
return outsourcingExpenses;
}
@Override
public PageResult<PurchaseOrderNoDetailDO> getReceivingGoods(PurchaseOrderNoDetailPageReqVO pageReqVO) {
return purchaseOrderNoDetailMapper.getReceivingGoods(pageReqVO);
}
@Override
public Long getReceivingGoodsMessage() {
return purchaseOrderNoDetailMapper.getReceivingGoodsMessage();
}
}

View File

@ -106,4 +106,6 @@ public interface TaskDispatchService {
List<TaskDispatchDO> getListZp(Long id, Long projectSubId);
List<TaskDispatchDO> getListCl(Long id, Long projectSubId);
List<HashMap<String, String>> getOwners(Long id);
}

View File

@ -565,7 +565,6 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}else {
throw exception(new ErrorCode(400,"该工序"+procedureDO.getName()+"已做报工,不允许删除"));
}
}
}
taskDispatchDetailMapper.deleteByDispatchId(id);
@ -579,7 +578,6 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
@Override
public PageResult<TaskDispatchDetailDO> getGroupTaskDispatchDetailPage(YgjxPageReqVO pageReqVO) {
return taskDispatchDetailMapper.selectPageGroup(pageReqVO);
}
@ -597,10 +595,10 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
List<FpUserDetailDO> fpUserDetailDOS = fpUserDetailMapper.selectList(new LambdaQueryWrapper<FpUserDetailDO>().eq(FpUserDetailDO::getBusyId, pageReqVO.getOwner()));
// Set<String> postIds = new HashSet<>();
// Set<String> procedureIds = new HashSet<>();
Map<String,Long> postIds = new HashMap<>();
Map<String,Set<Long>> postIds = new HashMap<>();
for (FpUserDetailDO fpUserDetailDO : fpUserDetailDOS) {
if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())&&ObjectUtil.isNotEmpty(fpUserDetailDO.getProcedureId())){
postIds.put(fpUserDetailDO.getPostId(), fpUserDetailDO.getProcedureId());
if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())&&ObjectUtil.isNotEmpty(fpUserDetailDO.getProcCd())){
postIds.put(fpUserDetailDO.getPostId(), fpUserDetailDO.getProcCd());
}else if (ObjectUtil.isNotEmpty(fpUserDetailDO.getPostId())){
postIds.put(fpUserDetailDO.getPostId(), null);
}
@ -913,14 +911,14 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
}
}
//看待办
List<bdgzsomthingDO> bdgzsomthingDOList = bdgzsomthingMapper.selecteqintAttr12IsNull(taskDispatchDO.getCode(), "任务单");
if (CollUtil.isNotEmpty(bdgzsomthingDOList)){
for (bdgzsomthingDO bdgzsomthingDO : bdgzsomthingDOList) {
bdgzsomthingDO.setAttr4("1");
bdgzsomthingDO.setAttr12("0");
bdgzsomthingMapper.updateById(bdgzsomthingDO);
}
}
// List<bdgzsomthingDO> bdgzsomthingDOList = bdgzsomthingMapper.selecteqintAttr12IsNull(taskDispatchDO.getCode(), "任务单");
// if (CollUtil.isNotEmpty(bdgzsomthingDOList)){
// for (bdgzsomthingDO bdgzsomthingDO : bdgzsomthingDOList) {
// bdgzsomthingDO.setAttr4("1");
// bdgzsomthingDO.setAttr12("0");
// bdgzsomthingMapper.updateById(bdgzsomthingDO);
// }
// }
if (taskDispatchDO.getDispatchType().equals("PRODUCTION") && taskDispatchDetailDO.getTestYn().equals("N")){
pgMasterService.insertPgList(planDO.getId(),planDO.getProjectId(),taskDispatchDO.getBomDetailId(),taskDispatchDetailDO);
}
@ -1172,7 +1170,8 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
for (TaskDispatchDetailDO detailDO : detailDOS) {
ProcedureDO procedureDO = procedureMapper.selectById(detailDO.getProcedureId());
BigDecimal procedureCost=taskDispatchDetailMapper.bubbleFees(taskDispatchDO.getBomDetailId(),detailDO.getProcedureId());
BigDecimal materialCost = taskDispatchDetailMapper.materialCost(detailDO.getId());
// BigDecimal materialCost = taskDispatchDetailMapper.materialCost(detailDO.getId());
BigDecimal materialCost = taskDispatchDetailMapper.materialCosts(taskDispatchDO.getBomDetailId(),detailDO.getProcedureId());
BigDecimal internalLaborCost = taskDispatchDetailMapper.internalLaborCost(detailDO.getId());
BigDecimal processInspection=taskDispatchDetailMapper.processInspection(detailDO.getId());
@ -1195,6 +1194,25 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
return taskDispatchDOS;
}
@Override
public List<HashMap<String, String>> getOwners(Long id) {
List<FpUserDetailDO> fpUserDetailDOS = fpUserDetailMapper.selectOwnerLists(id);
List<HashMap<String,String>> fpUserMapList = new ArrayList<>();
if (CollUtil.isNotEmpty(fpUserDetailDOS)){
Map<Long, List<FpUserDetailDO>> collect = fpUserDetailDOS.stream().collect(Collectors.groupingBy(vo -> vo.getBusyId() == null ? 0 : vo.getBusyId()));
collect.forEach((userId,list)->{
if (userId.intValue() != 0){
HashMap<String, String> fpUserMap = new HashMap<>();
fpUserMap.put(userId.toString(), list.get(0).getNickName());
fpUserMapList.add(fpUserMap);
}
});
}else {
// throw exception(OWNER_NOT_EXISTS);
}
return fpUserMapList;
}
private void updateAssembleDetail(OperateTypeEnum operateTypeEnum,Long dispatchId, List<TaskDispatchDetailOwnerDO> list) {
list.forEach(o -> o.setDispatchId(dispatchId));
@ -1312,8 +1330,13 @@ public class TaskDispatchServiceImpl implements TaskDispatchService {
if ("true".equals(item.getIsOutsourcing())) {
// 外协处理逻辑
item.setIsOutsourcing("Y");
item.setIsReport(0);
}else {
item.setIsOutsourcing("N");
ProcedureDO procedureDO = procedureMapper.selectById(item.getProcedureId());
if (ObjectUtil.isNotEmpty(procedureDO)){
item.setIsReport(procedureDO.getIsReport());
}
}
if ("true".equals(item.getIsFoam())) {
item.setIsFoam("Y");

View File

@ -14,4 +14,7 @@
<delete id="deleteByFuId" parameterType="Long">
DELETE FROM base_fp_user_detail WHERE id = #{id}
</delete>
<delete id="removeByPostId">
DELETE FROM base_fp_user_detail WHERE post_id = #{postId}
</delete>
</mapper>

View File

@ -110,6 +110,20 @@
left join pro_task_dispatch_detail d on d.id=g.dispatch_detail_id and d.deleted=0 and d.tenant_id=2
where g.deleted = 0 and g.project_id=#{id} and g.project_sub_id= #{projectSubId} and d.is_outsourcing='N'
</select>
<select id="outsourcingExpenses" resultType="java.math.BigDecimal">
SELECT
ROUND(SUM(unit_price * total_storage), 1) AS cost
FROM (
SELECT
ROUND(t.estimated_price / t.purchase_amount, 1) AS unit_price,
SUM(s.storage_amount) AS total_storage
FROM project_purchase_order_no_detail t
JOIN project_storage_in_detail s on s.purchase_order_no_detail_id=t.id and s.deleted=0 and s.tenant_id=2
left join pro_process_bom_detail d on d.id=t.boom_detail_id
where t.deleted=0 and t.tenant_id=2 and d.type=2 and t.project_id=#{id} and t.project_plan_sub_id=#{projectSubId}
GROUP BY s.id
) AS subquery;
</select>
<update id="updateDetailEditStatusById" parameterType="Long">
UPDATE pro_process_bom_detail

View File

@ -165,4 +165,18 @@
left join system_post p on p.id=u.post_id and u.deleted=0 and p.tenant_id=2 and p.status=0
where g.deleted = 0 and g.dispatch_detail_id=#{id}
</select>
<select id="materialCosts" resultType="java.math.BigDecimal">
SELECT
ROUND(SUM(unit_price * total_storage), 1) AS cost
FROM (
SELECT
ROUND(t.estimated_price / t.purchase_amount, 1) AS unit_price,
SUM(s.storage_amount) AS total_storage
FROM project_purchase_order_no_detail t
JOIN project_storage_in_detail s on s.purchase_order_no_detail_id=t.id and s.deleted=0 and s.tenant_id=2
left join pro_process_bom_detail d on d.id=t.boom_detail_id
where t.deleted=0 and t.tenant_id=2 and d.type=2 and t.boom_detail_id=#{bomDetailId} and t.procedure_id=#{procedureId}
GROUP BY s.id
) AS subquery;
</select>
</mapper>

View File

@ -77,6 +77,9 @@ export const getTaskDispatchDetailListByWorkTime = async (params) => {
export const getOwnerList = async(id:number,type:number)=>{
return await request.get({url:`/heli/task-dispatch/task-dispatch-detail/getOwner?id=`+id+`&type=`+type})
}
export const getOwnerLists = async(id:number)=>{
return await request.get({url:`/heli/task-dispatch/task-dispatch-detail/getOwners?id=`+id})
}
export const getAssmebleDispatchPage = async() => {
return await request.get({ url: '/heli/task-dispatch/assmebleDispatchPage' })
}

View File

@ -298,6 +298,6 @@ export enum DICT_TYPE {
HELI_DISPATCH_PRODUCTION_STATUS = 'heli_dispatch_production_status', // 派工单状态
HELI_STORAGE_IN_STATUS = 'heli_storage_in_status',//入库出库状态
HELI_STOCK_MODE = 'heli_stock_mode',//库存变动日志类型
HELI_PROCESS_TYPE="heli_process_type"
HELI_PROCESS_TYPE="heli_process_type",
HELI_RECEIVING_STATUS="heli_receiving_status"
}

View File

@ -68,16 +68,16 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="postId" min-width="150" label="岗位" align="center">
<el-table-column prop="postId" min-width="120" label="岗位" align="center">
<template #default="scope">
<el-select v-model="scope.row.postId" element-loading-background="rgb(255, 255, 255)" placeholder="请选择" >
<el-select v-model="scope.row.postId" element-loading-background="rgb(255, 255, 255)" placeholder="请选择" >
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.HELI_POST)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</template>
</el-table-column>
<el-table-column prop="procedureId" min-width="200" label="工序" align="center" >
<el-table-column prop="procedureId" min-width="600" label="工序" align="center" >
<template #default="scope">
<el-select v-model="scope.row.procedureId" element-loading-background="rgb(255, 255, 255)" filterable placeholder="请选择" >
<el-select v-model="scope.row.procCd" multiple clearable element-loading-background="rgb(255, 255, 255)" filterable placeholder="请选择" style="width: 100%;">
<el-option
v-for="dict in procedureList" :key="dict.id"
:label="dict.name" :value="dict.id" />

View File

@ -68,7 +68,7 @@
</el-table-column>
<el-table-column label="业务人名称" align="center" prop="nickName" />
<el-table-column label="岗位" align="center" prop="postId" />
<el-table-column label="工序" align="center" prop="procedureName" />
<!-- <el-table-column label="工序" align="center" prop="procedureName" />-->
<el-table-column label="是否负责人" align="center" prop="isRes" >
<template #default="scope">
<el-tag v-if="scope.row.isRes == 'Y'" type="success"></el-tag>

View File

@ -1,7 +1,7 @@
<template>
<el-card class="hl-card">
<template #header>
<span>标准件物料需求计划</span>
<span>需求计划</span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->

View File

@ -36,7 +36,9 @@
<el-input v-model="queryParams.projectMaterialPlanNo" placeholder="请输入物料需求单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="供应商" prop="supplierName">
<el-input v-model="queryParams.supplierName" placeholder="请输入供应商" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:30px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
@ -74,7 +76,7 @@
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
<el-table
:row-key="getRowKeys" ref="multipleTable"
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
@selection-change="handleSelectionChange" v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" show-summary :summary-method="getSummaries">
<el-table-column
type="selection"
width="55"
@ -211,7 +213,8 @@ const queryParams = reactive({
createTime: [],
ownerName:username,
materialName:undefined,
projectMaterialPlanNo:undefined
projectMaterialPlanNo:undefined,
supplierName:undefined,
})
const queryParams1 = reactive({
@ -272,6 +275,72 @@ const handleSelectionChange = (selection) => {
}
}
}
const getSummaries = (param: SummaryMethodProps) => {
const summaryField = ["boomAmount","purchaseAmount","estimatedPrice"];
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (!summaryField.includes(column.property)) {
sums[index] = '';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return floatAdd(prev, curr);
} else {
return prev;
}
}, 0);
const thousandsField = [];
if (thousandsField.includes(column.property)) {
sums[index] = thousandsFormat(sums[index]);
}
} else {
sums[index] = '';
}
});
// const sumValue = computed(() => {
// return list.value.reduce((sum, item) => sum + item.quantityLent, 0);
// });
// const sums = ['','','','','','','','',sumValue];
return sums;
}
const floatAdd = (a, b) => {
var c, d, e;
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return (floatMul(a, e) + floatMul(b, e)) / e;
};
const floatMul = (a, b) => {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
const change =(row:any)=>{
if (flag.value) {
var bomDetails = list.value;

View File

@ -35,6 +35,9 @@
<el-form-item label="工序" prop="procedureName">
<el-input v-model="queryParams.procedureName" placeholder="请输入工序" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="供应商" prop="supplierName">
<el-input v-model="queryParams.supplierName" placeholder="请输入供应商" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:30px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
@ -70,7 +73,7 @@
<el-col>
<el-card class="hl-incard">
<el-form ref="multipleTable" :model="list" v-loading="formLoading" label-width="0" >
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" @selection-change="handleSelectionChange">
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" @selection-change="handleSelectionChange" show-summary :summary-method="getSummaries">
<el-table-column type="selection" width="55" />
<el-table-column fixed label="序号" align="center" type="index" width="60" />
@ -114,10 +117,10 @@
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.unit" />
</template>
</el-table-column>
<el-table-column min-width="200px" align="center">
<el-table-column min-width="200px" align="center" prop="purchaseAmounts">
<template #header><span class="hl-table_header">*</span>采购数量</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.purchaseAmount`" class="mb-0px!" >
<el-form-item :prop="`${$index}.purchaseAmounts`" class="mb-0px!" >
<el-input-number v-model="row.purchaseAmounts" type="number" :precision="0" />
</el-form-item>
</template>
@ -142,7 +145,7 @@
</el-select>
</template>
</el-table-column>
<el-table-column min-width="200px" align="center">
<el-table-column min-width="200px" align="center" prop="estimatedPrices">
<template #header><span class="hl-table_header">*</span>预估总价</template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.estimatedPrices`" class="mb-0px!" >
@ -247,7 +250,8 @@ const queryParams = reactive({
projectMaterialPlanNo:undefined,
matType:1,
blueprintNo:undefined,
procedureName:undefined
procedureName:undefined,
supplierName:undefined,
})
const queryParams1 = reactive({
pageNo: 1,
@ -325,6 +329,72 @@ const change =(row:any)=>{
}
}
}
const getSummaries = (param: SummaryMethodProps) => {
const summaryField = ["boomAmount","purchaseAmounts","estimatedPrices"];
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (!summaryField.includes(column.property)) {
sums[index] = '';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return floatAdd(prev, curr);
} else {
return prev;
}
}, 0);
const thousandsField = [];
if (thousandsField.includes(column.property)) {
sums[index] = thousandsFormat(sums[index]);
}
} else {
sums[index] = '';
}
});
// const sumValue = computed(() => {
// return list.value.reduce((sum, item) => sum + item.quantityLent, 0);
// });
// const sums = ['','','','','','','','',sumValue];
return sums;
}
const floatAdd = (a, b) => {
var c, d, e;
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return (floatMul(a, e) + floatMul(b, e)) / e;
};
const floatMul = (a, b) => {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
const change1 =(row:any)=>{
if (flag.value) {
var bomDetails = list.value;

View File

@ -45,6 +45,13 @@
<el-form-item label="工序" prop="procedureName">
<el-input v-model="queryParams.procedureName" placeholder="工序" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="收货状态" prop="receivingStatus">
<el-select v-model="queryParams.receivingStatus" placeholder="下拉选择" clearable class="!w-240px">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_RECEIVING_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item style="margin-left:15px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
@ -74,6 +81,11 @@
<el-table-column label="单价" align="center" prop="unitPrice" min-width="100px" fixed="right"/>
<el-table-column label="总价" align="center" prop="estimatedPrice" min-width="100px" fixed="right" />
<el-table-column label="责任人" align="center" prop="duEmpName" min-width="100px" fixed="right"/>
<el-table-column label="收货状态" align="center" prop="effectiveReceivingStatus" min-width="120" fixed="right">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_RECEIVING_STATUS" :value="scope.row.effectiveReceivingStatus" />
</template>
</el-table-column>
<el-table-column label="要求到货日期" align="center" prop="requireTime" min-width="150px" :formatter="dateFormatter1"/>
<el-table-column label="操作" align="center" fixed="right" min-width="180">
<template #default="scope">
@ -138,7 +150,8 @@ const queryParams = reactive({
materialName:undefined,
brief:undefined,
ownerName:undefined,
procedureName:undefined
procedureName:undefined,
receivingStatus:undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
@ -171,8 +184,7 @@ const handleQuery = () => {
getList()
}
const getSummaries = (param: SummaryMethodProps) => {
const summaryField = ["estimatedPrice"];
console.log(param)
const summaryField = ["boomAmount","purchaseAmount","estimatedPrice"];
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {

View File

@ -310,7 +310,7 @@ style="
</tr>
<tr>
<td colspan="10">
<div style="font-size: 18px; height: 50px; line-height: 50px">
<div style="font-size: 12px; height: 50px; line-height: 50px">
<span>接上页</span>
</div>
</td>
@ -493,7 +493,7 @@ const onPrint = () => {
background: white;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
position: relative;
font-size: 14px !important;
font-size: 12px !important;
}
@page {
@ -515,7 +515,7 @@ const onPrint = () => {
table {
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
height: auto; /* 高度根据内容自适应 */
font-size: 14px;
font-size: 12px;
text-align: center;
border-collapse: collapse;
margin-top: 5mm; /* 添加顶部外边距,替代原先的页内边距 */
@ -794,7 +794,7 @@ const resetForm = () => {
background: white;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
position: relative;
font-size: 14px !important;
font-size: 1px !important;
}
@page {
@ -816,7 +816,7 @@ const resetForm = () => {
table {
width: 100%; /* 让表格宽度100%占满其父元素宽度 */
height: auto; /* 高度根据内容自适应 */
font-size: 14px;
font-size: 12px;
text-align: center;
border-collapse: collapse;
margin-top: 5mm; /* 添加顶部外边距,替代原先的页内边距 */

View File

@ -485,8 +485,9 @@ onMounted(async () => {
// bom
refreshStatus.value = await PlanTaskApi.getPlanTaskBomStatus(query.id)
personList.value = await TaskDispatchApi.getOwnerList(0,1);
personList.value = await TaskDispatchApi.getOwnerLists(0);
ownerList.value = await getOwnerListThis();
queryParams.taskId = query.id
formData.value.bomDetails = (await PlanTaskBomApi.getPlanTaskBomPage(queryParams)).list

View File

@ -376,19 +376,13 @@ v-if="scope.row.isOver == 0 && active != 'detail'"
</el-card>
</template>
<script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getDictLabel } from '@/utils/dict'
import {dateFormatter, formatDate,dateFormatter1} from "@/utils/formatTime";
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, } from '@/utils/dict'
import {dateFormatter, } from "@/utils/formatTime";
import {ref} from "vue";
import * as ProcessDesignApi from "@/api/heli/processdesign";
import { inject } from 'vue'
import {useUserStore} from "@/store/modules/user";
import {useCommonStore} from "@/store/modules/common";
import {verify} from "node:crypto";
import { delay, fromPairs, now } from 'lodash-es';
import { FolderOpened } from '@element-plus/icons-vue/dist/types';
import * as bdgzsomthingApi from "@/api/heli/bdgzsomthing";
import {getMessage} from "@/api/heli/bdgzsomthing";
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
import {ElMessageBox} from "element-plus";
defineOptions({ name: 'ProcessDesignDetail' })
@ -651,7 +645,7 @@ const openDelay = async() =>{
}
if(processDesignType.value == 'BLUEPRINT_2D'){
if(formData.value.twoDimDate != null ){
var dateT = new Date(formData.value.blankDate)
var dateT = new Date(formData.value.twoDimDate)
dateT.setHours(23,59,59,999)
if(dateT.getTime() > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
@ -664,8 +658,9 @@ const openDelay = async() =>{
}
if(processDesignType.value == 'BLUEPRINT_3D'){
if(formData.value.threeDimDate != null ){
var dateT = new Date(formData.value.blankDate)
var dateT = new Date(formData.value.threeDimDate)
dateT.setHours(23,59,59,999)
if(dateT.getTime() > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
return
@ -678,7 +673,7 @@ const openDelay = async() =>{
if(processDesignType.value == 'BLUEPRINT_FOUNDRY_TECHNOLOGY'){
if(formData.value.craftEndDate != null ){
var dateT = new Date(formData.value.blankDate)
var dateT = new Date(formData.value.craftEndDate)
dateT.setHours(23,59,59,999)
if(dateT.getTime() > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
@ -690,9 +685,8 @@ const openDelay = async() =>{
}
}
if(processDesignType.value == 'CASTING_DRAWING'){
if(formData.value.castEndDate != null ){
var dateT = new Date(formData.value.blankDate)
var dateT = new Date(formData.value.castEndDate)
dateT.setHours(23,59,59,999)
if(dateT.getTime() > date.getTime()){
message.error("当前日期为正常生产周期,未达到延期条件,请确认!")
@ -704,7 +698,6 @@ const openDelay = async() =>{
}
}
await delaySubmit()
}
const overRow = async( row :any) =>{
if(row.beginTime == null ){

View File

@ -62,6 +62,11 @@
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROCESS_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="状态" prop="isOverProcess">
<el-select v-model="queryParams.isOverProcess" placeholder="请选择状态" clearable class="!w-240px">
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery" type="primary"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -170,7 +175,8 @@ import {
import download from '@/utils/download'
import * as ProcessDesignApi from '@/api/heli/processdesign'
import {useCommonStateWithOut} from "@/store/modules/common";
import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
import {ref} from "vue";
defineOptions({ name: 'ProcessDesign3D' })
@ -199,6 +205,7 @@ const queryParams = reactive({
isOverview: true,
ownerName:undefined,
processDesignType:undefined,
isOverProcess:undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
@ -232,7 +239,10 @@ const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
const typeList = ref([
{ id: 1, name: '完成'},
{ id: 0, name: '未完成' }
]);
/** 添加/修改操作 */
// const formRef = ref()
// const openForm = (type: string, id?: number) => {

View File

@ -109,7 +109,7 @@ const open = async (bomCode, vals) => {
var i = 0;
await Promise.all(
printCodeName.value.map(async (item) => {
const qrCodeData = await QRCode.toDataURL(item.name,{
const qrCodeData = await QRCode.toDataURL(item.code,{
errorCorrectionLevel: 'H'
})
const qrCodeElement = document.getElementById('qrCodeContainer')

View File

@ -50,6 +50,7 @@
</template>
</el-table-column>
<el-table-column prop="projectSubCode" min-width="150" label="子项目编码" align="center"/>
<el-table-column prop="blueprintNo" min-width="100" label="图号" align="center"/>
<el-table-column prop="boomName" min-width="120" label="零件名称" align="center"/>
<el-table-column prop="procedureName" min-width="120" label="工序" align="center"/>
<el-table-column prop="compositionName" min-width="100" label="材质" align="center"/>
@ -143,7 +144,7 @@
<th>材料</th>
<th>数量</th>
<th>要求完成日期</th>
<th>技术要求</th>
<th>规格</th>
<th>理论重量</th>
<th>单价</th>
<th>总价格</th>
@ -159,7 +160,7 @@
<td>{{ printData.purchaseOrderNoDetailList[index]?.compositionName || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.purchaseAmount || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.requireTime ? formatDate(printData.purchaseOrderNoDetailList[index].requireTime) : '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.description || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.matSpec || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.theWeight || '' }}</td>
<td>{{ printData.purchaseOrderNoDetailList[index]?.unitPrice || '' }}</td>

View File

@ -38,6 +38,21 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="零件" prop="boomName">
<el-input
v-model="queryParams.boomName" placeholder="请输入零件" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="工序" prop="procedureName">
<el-input
v-model="queryParams.procedureName" placeholder="请输入工序" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="图号" prop="blueprintNo">
<el-input
v-model="queryParams.blueprintNo" placeholder="请输入图号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:50px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
@ -148,7 +163,10 @@ const queryParams = reactive({
projectName:undefined,
projectSubName:undefined,
username:username,
supplierName:undefined
supplierName:undefined,
boomName:undefined,
blueprintNo:undefined,
procedureName:undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //

View File

@ -26,6 +26,16 @@ v-model="queryParams.purchaseNo" placeholder="采购单号" clearable @keyup.ent
v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="零件" prop="boomName">
<el-input
v-model="queryParams.boomName" placeholder="请输入零件" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="图号" prop="blueprintNo">
<el-input
v-model="queryParams.blueprintNo" placeholder="请输入图号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left:50px">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
@ -126,7 +136,9 @@ const queryParams = reactive({
createTime: undefined,
projectName:undefined,
projectSubName:undefined,
supplierName:undefined
supplierName:undefined,
boomName:undefined,
blueprintNo:undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //

View File

@ -49,6 +49,7 @@
</template>
</el-table-column>
<el-table-column prop="projectSubCode" min-width="150" label="子项目编码" align="center"/>
<el-table-column prop="blueprintNo" min-width="100" label="图号" align="center"/>
<el-table-column prop="boomName" min-width="120" label="标准件名称" align="center"/>
<el-table-column prop="matCode" min-width="100" label="物料编码" align="center"/>
<el-table-column prop="boomSpec" min-width="100" label="规格型号" align="center"/>

View File

@ -304,7 +304,7 @@ style=" display: flex;
<template #header>负责人</template>
<template #default="{ row , $index}">
<el-form-item :prop="`${$index}.owner`" class="mb-0px!">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==1 " v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==1&&row.isOutsourcing" v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
<el-option
v-for="item in ownerList1"
:key="item.index"
@ -312,25 +312,41 @@ style=" display: flex;
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner != '' && row.owner != null )" v-model="row.owner" placeholder="请选择岗位" style="max-width: 110px">
<el-option
v-for="item in ownerList1"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&procedureList.find(p => p.id == row.procedureId)?.name != '钻孔'" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-option
v-for="item in ownerList2"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&procedureList.find(p => p.id == row.procedureId)?.name == '钻孔'" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==1&&!row.isOutsourcing" v-model="row.owner" placeholder="请选择负责人" style="max-width: 110px">
<el-option
v-for="item in ownerList3"
v-for="item in ownerList2"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner != '' && row.owner != null )&&row.postId==1" v-model="row.owner" placeholder="请选择岗位" style="max-width: 110px">
<el-option
v-for="item in ownerList1"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner != '' && row.owner != null )&&row.postId==2" v-model="row.owner" placeholder="请选择岗位" style="max-width: 110px">
<el-option
v-for="item in ownerList2"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&row.isOutsourcing" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-option
v-for="item in ownerList3"
:key="item.index"
:label="item.label"
:value="item.id"
/>
</el-select>
<el-select :disabled="getDisabledState(row)" clearable filterable v-if="row.dispatchType==2 && (row.owner == '' || row.owner == null)&&!row.isOutsourcing" v-model="row.postId" placeholder="请选择岗位" style="width: 110px">
<el-option
v-for="item in ownerList4"
:key="item.index"
:label="item.label"
:value="item.id"
@ -851,9 +867,9 @@ const dispatchTypeHasChange = (row) =>{
} else{
row.owner = ''
if(row.isOutsourcing == true){
row.postId = '3'
row.postId = '1'
}else{
row.postId = ownerList2.value[0].id;
row.postId = '2';
}
@ -1289,8 +1305,9 @@ const postList = ref([])
const personList = ref([])
const ownerList1 = ref<OwnerListType[]>([]);
const ownerList2 = ref<OwnerListPostType[]>([]);
const ownerList2 = ref<OwnerListType[]>([]);
const ownerList3 = ref<OwnerListPostType[]>([]);
const ownerList4 = ref<OwnerListPostType[]>([]);
const dispatchListTemp = ref([])
const craftInfos = ref([])
const queryData = async (id?: number) => {
@ -1337,24 +1354,25 @@ const queryData = async (id?: number) => {
})
}
checkListTemp.value = checkList.value;
if(formData.value.ownerId){
personList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,1);
postList.value = await TaskDispatchApi.getOwnerList(formData.value.ownerId,2);
// if(formData.value.ownerId){
personList.value = await TaskDispatchApi.getOwnerLists(1);
postList.value = await TaskDispatchApi.getOwnerLists(2);
ownerList1.value = await getOwnerListThis ();
//20250601 2 ownerList2.value = await getOwnerPostListThis ();
ownerList2.value = await getOwnerPostListThis ();
const exists = ownerList2.value.some(item => item.id === '3');
if (!exists) {
ownerList2.value.push({ index: 1, id: '3', label: '3' });
}
const maxIndex = ownerList2.value.reduce((max, item) => Math.max(max, item.index || 0), 0);
// ownerList3.value 4 5index
ownerList3.value = [
...ownerList2.value,
{ index: maxIndex + 1, id: '4', label: '4' },
{ index: maxIndex + 2, id: '5', label: '5' }
];
}
ownerList3.value = [{index: 1, id: "1", label: '1'}]
ownerList4.value = [{index: 1, id: "2", label: '2'}]
// const exists = ownerList2.value.some(item => item.id === '3');
// if (!exists) {
// ownerList2.value.push({ index: 1, id: '3', label: '3' });
// }
// const maxIndex = ownerList2.value.reduce((max, item) => Math.max(max, item.index || 0), 0);
// // ownerList3.value 4 5index
// ownerList3.value = [
// ...ownerList2.value,
// { index: maxIndex + 1, id: '4', label: '4' },
// { index: maxIndex + 2, id: '5', label: '5' }
// ];
// }
formData.value.bomCode = formData.value.projectSubCode
// if (formData.value.dispatchStatus == 2 ) {
@ -1566,7 +1584,7 @@ const onAddItem = () => {
isReport:0 ,
checkYn : 1,
checkYns: false,
postId: ownerList2.value[0].id,
postId: 2,
reportProcess:0,
matPlanProcess:"N",
}
@ -1586,6 +1604,7 @@ const onAddItem = () => {
}
if (items.name=='定制'){
row.isOutsourcing=true
row.postId=1
}
}
@ -1748,7 +1767,7 @@ const getOwnerListThis = async (): Promise<OwnerListType[]> => {
postList.value.forEach((item, index) => {
let key = Object.keys(item)[0];
let value = item[key] as string;
ownerList1.push({ index: index + 1, id: key, label: value });
ownerList1.push({ index: index + 1, id: Number(key), label: value });
});
}
@ -1801,11 +1820,11 @@ const handleOutsourcingChange= async (row: any) => {
row.dispatchType = 2
row.owner = ''
row.postId = ownerList2.value[0].id
row.postId = '2'
}else{
row.dispatchType = 2
row.owner = ''
row.postId = '3'
row.postId = '1'
}
}

View File

@ -77,13 +77,13 @@ onMounted(async () => {
await getListData()
})
onShow(async () => {
isFinish.value = false
isLoading.value = false
queryParams.pageNo = 1
dataList.value = []
await getListData()
})
// onShow(async () => {
// isFinish.value = false
// isLoading.value = false
// queryParams.pageNo = 1
// dataList.value = []
// await getListData()
// })
const handleDetail = async(item) => {
// var isoverBefore= await isOverBeforeProcedure(item.id);
@ -197,7 +197,7 @@ const handleScan = () => {
<view class="label">零件名称: {{ item.materialName }}</view>
</view> -->
<view class="row-item">
<view class="label">派工工序: {{ item.procedureName }}</view>
<view class="label">派工工序: <span style="font-weight: bold;">{{ item.procedureName }}</span></view>
</view>
</view>
<view class="product-row">
@ -289,21 +289,21 @@ const handleScan = () => {
align-items: center;
color: #737D88
}
.product-row {
margin: 20rpx 0;
display: flex;
flex-direction: row;
justify-content: space-between;
color: #737D88;
.row-item {
flex: 1;
.label {
margin-bottom: 10rpx;
}
.val {
color: #1D2129;
&.high-color {
@ -311,7 +311,7 @@ const handleScan = () => {
}
}
}
}
}

View File

@ -11,8 +11,9 @@ import {
getHomeCategoryAPI,
getUnreadMessage,
countUnqualifiedNotification,
countUnqualifiedNotificationConfirm
countUnqualifiedNotificationConfirm, getReceivingGoodsMessage
} from "@/services/home";
import {getReceivingGoods} from "@/services/productionReport";
//
const categoryList = ref([
{
@ -86,6 +87,13 @@ const categoryList = ref([
imgUrl: "/static/images/unqualifiedNotificationConfirm.png",
defaultImgUrl: "/static/images/unqualifiedNotification-default.png",
},
{
path: "receivingGoods",
name: "采购单收货",
auth: false,
imgUrl: "/static/images/unqualifiedNotificationConfirm.png",
defaultImgUrl: "/static/images/unqualifiedNotification-default.png",
},
]);
const categoryList1 = ref([
@ -137,10 +145,14 @@ const getHomeCategory = async () => {
}
const unqualifiedNotificationCount = await countUnqualifiedNotification(query);
const unqualifiedNotificationCountConfirm = await countUnqualifiedNotificationConfirm(query1);
const ReceivingGoodsMessage = await getReceivingGoodsMessage();
//
const cgdsp = categoryList1.value.find(
(e) => e.path === "cgdsp"
);
const receivingGoods = categoryList1.value.find(
(e) => e.path === "receivingGoods"
);
const msgItem = categoryList1.value.find(
(e) => e.path === "messageNotification"
);
@ -150,6 +162,9 @@ const getHomeCategory = async () => {
const unqualifiedNotificationConfirm = categoryList1.value.find(
(e) => e.path === "unqualifiedNotificationConfirm"
);
if (receivingGoods){
receivingGoods.unReadCount = ReceivingGoodsMessage;
}
if (cgdsp){
cgdsp.unReadCount = count;
// cgdsp.auth=true

View File

@ -39,7 +39,24 @@ dispatchStatus:2
}
const dataList = ref([])
const searchVal = ref("");
//
const getStoredSearchValue = () => {
try {
const stored = uni.getStorageSync(`search_${props.orderState}_${userId}`);
return stored || "";
} catch (error) {
return "";
}
};
//
const saveSearchValue = (value: string) => {
try {
uni.setStorageSync(`search_${props.orderState}_${userId}`, value);
} catch (error) {
console.error('保存搜索条件失败:', error);
}
};
const getListData = async () => {
queryParams.pgType = props.orderState;
@ -49,42 +66,55 @@ const getListData = async () => {
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
}
isLoading.value = true
//
const data = await getListAPIWX(queryParams)
isLoading.value = false
data.list.forEach((e) => {
e.orderTime = formatDate(e.orderTime, 'YYYY-MM-DD')
e.startTime = formatDate(e.startTime, 'YYYY-MM-DD')
e.entTime = formatDate(e.entTime, 'YYYY-MM-DD')
})
//
dataList.value.push(...data.list)
//
if (queryParams.pageNo < data.total) {
//
queryParams.pageNo++
} else {
//
try {
const data = await getListAPIWX(queryParams)
isLoading.value = false
data.list.forEach((e) => {
e.orderTime = formatDate(e.orderTime, 'YYYY-MM-DD')
e.startTime = formatDate(e.startTime, 'YYYY-MM-DD')
e.entTime = formatDate(e.entTime, 'YYYY-MM-DD')
})
//
dataList.value.push(...data.list)
//
if (queryParams.pageNo < data.total) {
//
queryParams.pageNo++
} else {
//
isFinish.value = true
}
} catch (e){
} finally {
isLoading.value = false
isFinish.value = true
}
}
onMounted(async () => {
searchVal.value=getStoredSearchValue()
queryParams.subOrDetailName=getStoredSearchValue()
await getListData()
})
onShow(async () => {
isFinish.value = false
isLoading.value = false
queryParams.pageNo = 1
dataList.value = []
await getListData()
})
// onShow(async () => {
// isFinish.value = false
// isLoading.value = false
// queryParams.pageNo = 1
// dataList.value = []
// await getListData()
// })
const handleSearch = async (e) => {
queryParams.subOrDetailName = e.inputValue;
queryParams.pageNo = 1;
isFinish.value = false;
dataList.value = [];
saveSearchValue(queryParams.subOrDetailName)
await getListData();
};
const viewClick = async (item) => {
@ -92,9 +122,6 @@ const viewClick = async (item) => {
id: item.id
};
const data = await postOperateAPIZF(item.id);
console.log('返回数据');
console.log(data.id);
console.log(data);
if(data >0){
const url = `/pages/pgMaster/pgMaster`
uni.navigateTo({ url })
@ -214,7 +241,7 @@ const onRefresherrefresh = async () => {
<view class="label">图号{{ item.blueprintNo }}</view>
</view>
<view class="row-item">
<view class="label">派工工序: {{ item.procedureName }}</view>
<view class="label">派工工序: <span style="font-weight: bold;">{{ item.procedureName }}</span></view>
</view>
</view>
<view class="product-row">

View File

@ -1,9 +1,6 @@
<script setup lang="ts">
import { onMounted, computed, ref } from "vue";
import { onLoad, onShow } from "@dcloudio/uni-app";
import {onMounted, computed, ref, onUnmounted} from "vue";
import {
getListAPI,
getDictAPI,
getListWxAPI,
getTaskDetailAPI,
} from "@/services/productionReport";
@ -22,12 +19,10 @@ const props = defineProps<{
}>();
const noticeMsg = ref("");
const isOverBeforeProcedure = async (id: number) => {
//console.log(props.orderState)
const params = {
id,
};
const data = await getTaskDetailAPI(params);
console.log(data.testYn);
if (data.beforeProcedureStatus == 0) {
//
noticeMsg.value = "上一道工序尚未完成报工!";
@ -42,6 +37,32 @@ const statusText = computed(() => {
});
//
const isLoading = ref(false);
//
const getStoredSearchValue = () => {
try {
const stored = uni.getStorageSync(`search_${props.orderState}_${userId}`);
return stored || "";
} catch (error) {
return "";
}
};
//
const saveSearchValue = (value: string) => {
try {
uni.setStorageSync(`search_${props.orderState}_${userId}`, value);
} catch (error) {
console.error('保存搜索条件失败:', error);
}
};
//
const clearStoredSearchValue = () => {
try {
uni.removeStorageSync(`search_${props.orderState}_${userId}`);
} catch (error) {
console.error('清除搜索条件失败:', error);
}
};
//
const queryParams: Required<any> = {
pageNo: 1,
@ -51,7 +72,7 @@ const queryParams: Required<any> = {
dispatchType: "PRODUCTION", //
isReport: 1, //
//20250601/
subOrDetailName: "",
subOrDetailName: getStoredSearchValue(),
};
const dataList = ref([]);
const getListData = async () => {
@ -85,6 +106,7 @@ const getListData = async () => {
}
};
const todayStr = ref("");
const searchVal = ref("");
onMounted(async () => {
const today = new Date();
const year = today.getFullYear();
@ -94,8 +116,14 @@ onMounted(async () => {
isLoading.value = false;
queryParams.pageNo = 1;
todayStr.value = `${year}-${month}-${day}`;
searchVal.value=getStoredSearchValue()
queryParams.subOrDetailName=getStoredSearchValue()
await getListData();
});
// onUnmounted(() => {
// clearStoredSearchValue();
// console.log('');
// });
const isScanning = ref(false)
// onShow(async () => {
// isFinish.value = false;
@ -142,7 +170,7 @@ const onRefresherrefresh = async () => {
//
isTriggered.value = false;
};
const searchVal = ref("");
const searchValBefore = ref('')
// const dataListDefault = ref([])
@ -167,6 +195,7 @@ const handleScan = async () => {
const handleSearch = async (e) => {
console.log('触发搜索')
console.log(e)
//
queryParams.pageNo = 1;
isFinish.value = false;
@ -175,7 +204,7 @@ const handleSearch = async (e) => {
//
queryParams.subOrDetailName = e.inputValue;
searchVal.value = e.inputValue; //
saveSearchValue(searchVal.value)
try {
await getListData();
@ -274,7 +303,8 @@ const handleSearch = async (e) => {
<view class="label">零件名称: {{ item.materialName }}</view>
</view>
<view class="row-item">
<view class="label">派工工序: {{ item.procedureName }}</view>
<view class="label" >派工工序: <span style="font-weight: bold;">{{ item.procedureName }}</span></view>
</view>
</view>
<view class="product-row">

View File

@ -0,0 +1,620 @@
<script setup lang="ts">
import {onMounted, ref, } from "vue";
import {
getReceivingGoods, postOperateAPI, receiveGoods, verification,
} from "@/services/productionReport";
import { useLoginStore } from "@/stores/modules/login";
const userStore = useLoginStore();
const userId = userStore.userInfo.userId;
const popup = ref<UniHelper.UniPopupInstance>()
//
const isFinish = ref(false);
//
const isTriggered = ref(false);
const noticeMsg = ref("");
const purchaseRemAmounts = ref("")
const estimatedPrice = ref("")
//
const isLoading = ref(false);
//
const queryParams: Required<any> = {
pageNo: 1,
pageSize: 5,
subOrDetailName:"",
projectName:undefined,
projectSubName:undefined,
supplierName:undefined,
boomName:undefined,
procedureName:undefined,
blueprintNo:undefined,
};
const dataList = ref([]);
const list = ref([]);
const getListData = async () => {
// 退
if (isLoading.value) return;
if (isFinish.value === true) {
return uni.showToast({ icon: "none", title: "没有更多数据~" });
}
isLoading.value = true;
//
const data = await getReceivingGoods(queryParams);
isLoading.value = false;
dataList.value.push(...data.list);
//
if (queryParams.pageNo < data.totalPages) {
//
queryParams.pageNo++;
} else {
//
isFinish.value = true;
}
};
const todayStr = ref("");
const searchVal = ref("");
onMounted(async () => {
isFinish.value = false;
isLoading.value = false;
queryParams.pageNo = 1;
await getListData();
});
const isScanning = ref(false)
//
const onRefresherrefresh = async () => {
//
isTriggered.value = true;
//
queryParams.pageNo = 1;
dataList.value = [];
isFinish.value = false;
//
await getListData();
//
isTriggered.value = false;
};
const handleSearch = async (e) => {
//
queryParams.pageNo = 1;
isFinish.value = false;
dataList.value = [];
//
queryParams.subOrDetailName = e.inputValue;
searchVal.value = e.inputaVlue; //
try {
await getListData();
} catch (error) {
console.error('搜索请求失败:', error);
}
};
const popUp = async (data) => {
estimatedPrice.value=data.estimatedPrice
purchaseRemAmounts.value=data.purchaseRemAmounts
list.value.push(data)
popup.value?.open()
}
const handleOk = async () => {
if (estimatedPrice.value==null||estimatedPrice.value==""||estimatedPrice.value==undefined||estimatedPrice.value==''||estimatedPrice.value<=0){
uni.showToast({
title: '预估总价不能为空',
icon: 'none',
duration: 2000
});
return
}
if (purchaseRemAmounts.value==null||purchaseRemAmounts.value==""||purchaseRemAmounts.value==undefined||purchaseRemAmounts.value<=0||purchaseRemAmounts.value==''){
uni.showToast({
title: '入库数量不能为空或为0',
icon: 'none',
duration: 2000
});
return
}
list.value[0].estimatedPrice=estimatedPrice.value
list.value[0].purchaseRemAmounts=purchaseRemAmounts.value
await verification(list.value[0])
const res = await Promise.race([
receiveGoods(list.value[0]),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("请求超时")), 30000)
)
]);
uni.showToast({
title: '收货成功',
icon: 'none',
duration: 2000
});
list.value=[]
estimatedPrice.value=""
purchaseRemAmounts.value=""
popup.value?.close()
await getListData()
}
const cancel = () => {
list.value=[]
estimatedPrice.value=""
purchaseRemAmounts.value=""
popup.value?.close()
}
</script>
<template>
<view class="cont">
<view class="search">
<view
style="
width: 90%;
display: flex;
align-items: center;
background: #e2f3ff;
border-radius: 20rpx;
padding: 0 8rpx;
height: 50px;
"
>
<input
class="uni-input"
v-model="searchVal"
placeholder="请输入物料名称、图号、工序"
:placeholder-style="'color:#28A0F8;'"
style="
flex: 1;
background: transparent;
border: none;
outline: none;
font-size: 25rpx;
color: #28a0f8;
height: 50px;
line-height: 50px;
"
@input="handleSearch({ inputValue: searchVal })"
clearable
/>
</view>
</view>
<scroll-view
enable-back-to-top
scroll-y
class="data-list"
refresher-enabled
:refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh"
@scrolltolower="getListData"
>
<view
class="item"
v-for="item in dataList"
:key="item.id"
>
<view class="hd">
<view class="num">图号</view>
<view class="num">{{
item.blueprintNo
}}</view>
<view class="statusText1" @click="popUp(item)" >
收货
</view>
</view>
<view class="md">
<view class="product-row">
<view class="row-item">
<view class="label">零件名称: {{ item.boomName }}</view>
</view>
<view class="row-item">
<view class="label" >派工工序: {{ item.procedureName }}</view>
</view>
</view>
<view class="product-row">
<view class="row-item">
<view class="label">采购数量: {{ item.purchaseAmount }}</view>
</view>
<view class="row-item">
<view class="label" >剩余数量: {{ item.purchaseRemAmount }}</view>
</view>
</view>
<view class="product-row">
<view class="row-item">
<view class="label">收货状态: {{ item.receivingStatus==1?"未收货":"收货中" }}</view>
</view>
<view class="row-item">
<view class="label" >物料类型: {{ item.goodsType==1?"物料":"加工件" }}</view>
</view>
</view>
<view class="product-row">
<view class="row-item">
<view class="label">完成日期: {{ item.requireTimes }}</view>
</view>
<view class="row-item">
<view class="label" >供应商: {{ item.supplierName }}</view>
</view>
</view>
<view class="product-row">
<view >
<view class="label">子项目编码: {{ item.projectSubCode }}</view>
</view>
</view>
</view>
</view>
<!-- 底部提示文字 -->
<view
class="loading-text"
:style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }"
>
{{ isFinish ? "没有更多数据~" : "正在加载..." }}
</view>
<uni-popup class="popup" ref="popup" :mask-click="false" type="bottom" background-color="#fff">
<view class="title">
<view class="text">填写信息</view>
</view>
<view class="cont">
<view class="item">
<view class="label"><span class="star">*</span>入库数量</view>
<uni-easyinput class="val" type="digit" v-model="purchaseRemAmounts"
placeholder="请输入本次入库数量"></uni-easyinput>
</view>
<view class="item">
<view class="label"><span class="star">*</span>预估总价</view>
<uni-easyinput class="val" type="number" v-model="estimatedPrice"
placeholder="请输入本次预估总价"></uni-easyinput>
</view>
</view>
<view class="button-group">
<view class="ok" @click="handleOk">确定</view>
<view class="cancel" @click="cancel">取消</view>
</view>
</uni-popup>
</scroll-view>
</view>
</template>
<style lang="scss">
//
.search {
padding: 0rpx;
width: 90%;
margin: auto;
margin-top: 20rpx;
position: relative;
.uni-input {
border: 1px solid #d1d6db;
height: 60rpx;
line-height: 60rpx;
padding: 4rpx 10rpx;
font-size: 32rpx;
border-radius: 10rpx;
}
.icons {
width: 30rpx;
position: absolute;
right: 40rpx;
top: 0rpx;
}
}
.data-list {
height: 90vh;
.item {
position: relative;
padding: 20rpx 0;
margin: 20rpx 20rpx;
border-radius: 10rpx;
background-color: #fff;
box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.05);
.hd {
padding: 10rpx;
font-size: 28rpx;
display: flex;
.statusLabel {
font-size: 24rpx;
color: #737d88;
}
}
.md {
position: relative;
padding: 10rpx;
min-height: 100rpx;
font-size: 28rpx;
border-top: 2rpx solid #f2f2f2;
.product-item {
margin: 20rpx 0;
display: flex;
align-items: center;
color: #737d88;
}
.product-row {
margin: 20rpx 0;
display: flex;
flex-direction: row;
justify-content: space-between;
color: #737d88;
.row-item {
flex: 1;
.label {
margin-bottom: 10rpx;
}
.val {
color: #1d2129;
&.high-color {
color: #00b42a;
}
}
}
}
}
.statusText1 {
font-size: 24rpx;
position: absolute;
right: 30rpx;
top: 15rpx;
border-radius: 10rpx;
font-size: 24rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
font-size: 24rpx;
background: linear-gradient(149deg, #4CAF50 4%, #388E3C 98%);
color: #fff;
}
&:last-child {
padding-bottom: 40rpx;
}
}
.status {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
color: #999;
margin-bottom: 15rpx;
.date {
color: #666;
flex: 1;
}
.primary {
color: #ff9240;
}
.icon-delete {
line-height: 1;
margin-left: 10rpx;
padding-left: 10rpx;
border-left: 1rpx solid #e3e3e3;
}
}
.goods {
display: flex;
margin-bottom: 20rpx;
.cover {
width: 170rpx;
height: 170rpx;
margin-right: 20rpx;
border-radius: 10rpx;
overflow: hidden;
position: relative;
.image {
width: 170rpx;
height: 170rpx;
}
}
.quantity {
position: absolute;
bottom: 0;
right: 0;
line-height: 1;
padding: 6rpx 4rpx 6rpx 8rpx;
font-size: 24rpx;
color: #fff;
border-radius: 10rpx 0 0 0;
background-color: rgba(0, 0, 0, 0.6);
}
.meta {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
.name {
height: 80rpx;
font-size: 26rpx;
color: #444;
}
.type {
line-height: 1.8;
padding: 0 15rpx;
margin-top: 10rpx;
font-size: 24rpx;
align-self: flex-start;
border-radius: 4rpx;
color: #888;
background-color: #f7f7f8;
}
.more {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 22rpx;
color: #333;
}
}
.payment {
display: flex;
justify-content: flex-end;
align-items: center;
line-height: 1;
padding: 20rpx 0;
text-align: right;
color: #999;
font-size: 28rpx;
border-bottom: 1rpx solid #eee;
.quantity {
font-size: 24rpx;
margin-right: 16rpx;
}
.amount {
color: #444;
margin-left: 6rpx;
}
.symbol {
font-size: 20rpx;
}
}
.action {
display: flex;
justify-content: flex-end;
align-items: center;
padding-top: 20rpx;
.button {
width: 180rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
margin-left: 20rpx;
border-radius: 60rpx;
border: 1rpx solid #ccc;
font-size: 26rpx;
color: #444;
}
.secondary {
color: #3775f6;
border-color: #3775f6;
}
.primary {
color: #fff;
background-color: #3775f6;
border-color: #3775f6;
}
}
.loading-text {
text-align: center;
font-size: 28rpx;
color: #666;
padding: 20rpx 0;
}
}
.popup {
.title {
line-height: 1;
padding: 40rpx;
font-size: 32rpx;
font-weight: normal;
border-bottom: 1rpx solid #ddd;
color: #444;
.close {
position: absolute;
right: 24rpx;
top: 40rpx;
height: 60rpx;
width: 60rpx;
text-align: center;
}
}
.cont {
display: flex;
flex-direction: column;
align-items: center;
margin: 40rpx;
height: 50vh;
.item {
display: flex;
align-items: center;
margin: 100rpx 20rpx 0 0;
color: #737D88;
width: 94%;
.label {
font-size: 32rpx;
width: 260rpx;
.star {
color: red
}
}
.val {
flex: 1;
font-size: 32rpx;
}
.unit {
width: 100rpx;
margin-left: 4rpx;
text-align: center;
}
}
}
/* 新增按钮组容器样式 */
.button-group {
display: flex; /* 开启弹性布局 */
justify-content: center; /* 水平居中对齐 */
gap: 20rpx; /* 按钮间距 */
}
/* 修正原有 .ok 样式 */
.ok, .cancel {
font-size: 32rpx;
text-align: center;
width: 200rpx;
border-radius: 10rpx;
padding: 8rpx 0;
background-color: #3C8AF7;
color: #fff;
margin: 20rpx auto 80rpx;
/* 移除原有的 margin: 20rpx auto 80rpx; */
}
/* 可选:为取消按钮添加不同样式 */
.cancel {
background: linear-gradient(157deg, #A9A9A9 -3%, #A9A9A9 90%);
}
}
</style>import type { stringify } from 'querystring';

View File

@ -70,13 +70,13 @@ onMounted(async () => {
await getListData()
})
onShow(async () => {
isFinish.value = false
isLoading.value = false
queryParams.pageNo = 1
dataList.value = []
await getListData()
})
// onShow(async () => {
// isFinish.value = false
// isLoading.value = false
// queryParams.pageNo = 1
// dataList.value = []
// await getListData()
// })
const searchVal = ref("");
const handleSearch = async (e) => {
queryParams.subOrDetailName = e.inputValue;

View File

@ -9,5 +9,5 @@
// export const serviceDomain = 'https://nxhs.cjyx.cc'
// export const serviceDomain = 'https://star.hz-hl.com'
// export const serviceDomain = 'http://222.71.165.187:9010'
// export const serviceDomain = 'http://localhost:8080'
export const serviceDomain = 'https://nxhs.cjyx.cc'
export const serviceDomain = 'http://localhost:8080'
// export const serviceDomain = 'https://nxhs.cjyx.cc'

View File

@ -44,3 +44,9 @@ export const countReview = () => {
url: '/heli/purchase-order-make/countReview',
})
}
export const getReceivingGoodsMessage = () => {
return http<CategoryItem[]>({
method: 'GET',
url: '/heli/purchase-order-no-detail/getReceivingGoodsMessage',
})
}

View File

@ -1,7 +1,7 @@
/*
* @Author:
* @Date: 2024-01-04 12:54:56
* @LastEditors:
* @LastEditors:
* @LastEditTime: 2024-03-29 15:44:53
* @FilePath: /app-nx-personal/src/services/home.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
@ -22,6 +22,14 @@ export const getListWxAPI = (data: Object) => {
data,
})
}
export const getReceivingGoods = (data: Object) => {
return http<any[]>({
method: 'GET',
url: '/heli/purchase-order-no-detail/getReceivingGoods',
data,
})
}
// 报工记录分页查询
export const getTaskRepotPageAPI = (data: Object) => {
return http<any[]>({
@ -49,3 +57,17 @@ export const postOperateAPI = (data: Object) => {
data,
})
}
export const verification = (data: Object) => {
return http<any[]>({
method: 'POST',
url: '/heli/purchase-order-no-detail/verifications',
data,
})
}
export const receiveGoods = (data: Object) => {
return http<any[]>({
method: 'POST',
url: '/heli/purchase-order-no-detail/receiveGood',
data,
})
}