diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/TechProcMapper.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/TechProcMapper.java new file mode 100644 index 0000000..19275f5 --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/mapper/TechProcMapper.java @@ -0,0 +1,11 @@ +package jnpf.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import jnpf.model.techproc.TechProcEntity; + +/** + * 工艺流程主数据 Mapper + */ +public interface TechProcMapper extends BaseMapper { + +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/TechProcService.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/TechProcService.java new file mode 100644 index 0000000..5afb67c --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/TechProcService.java @@ -0,0 +1,28 @@ +package jnpf.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import jnpf.model.techproc.TechProcEntity; +import jnpf.model.techproc.TechProcForm; +import jnpf.model.techproc.TechProcPagination; + +import java.util.List; + +/** + * 工艺流程主数据 Service + */ +public interface TechProcService extends IService { + + List getList(TechProcPagination techProcPagination); + + TechProcEntity getInfo(String id); + + void delete(TechProcEntity entity); + + void create(TechProcEntity entity); + + boolean update(String id, TechProcEntity entity); + + String checkForm(TechProcForm form, int type); + + void saveOrUpdate(TechProcForm techProcForm, String id, boolean isSave) throws Exception; +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/StoreAreaServiceImpl.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/StoreAreaServiceImpl.java index b7f571a..4ffcb76 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/StoreAreaServiceImpl.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/StoreAreaServiceImpl.java @@ -38,6 +38,9 @@ public class StoreAreaServiceImpl extends ServiceImpl getList(StoreAreaPagination storeAreaPagination) { LambdaQueryWrapper storeAreaWrapper = new LambdaQueryWrapper<>(); + if (ObjectUtil.isNotEmpty(storeAreaPagination.getStoreType())) { + storeAreaWrapper.eq(StoreAreaEntity::getStoreType, storeAreaPagination.getStoreType()); + } if (ObjectUtil.isNotEmpty(storeAreaPagination.getStoreAreCd())) { storeAreaWrapper.like(StoreAreaEntity::getStoreAreCd, storeAreaPagination.getStoreAreCd()); } @@ -61,7 +64,7 @@ public class StoreAreaServiceImpl extends ServiceImpl getList(StoreHousePagination storeHousePagination) { LambdaQueryWrapper storeHouseWrapper = new LambdaQueryWrapper<>(); - + if (ObjectUtil.isNotEmpty(storeHousePagination.getStoreType())) { + storeHouseWrapper.eq(StoreHouseEntity::getStoreType, storeHousePagination.getStoreType()); + } if (ObjectUtil.isNotEmpty(storeHousePagination.getStoreHouseCd())) { storeHouseWrapper.like(StoreHouseEntity::getStoreHouseCd, storeHousePagination.getStoreHouseCd()); } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/TechProcServiceImpl.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/TechProcServiceImpl.java new file mode 100644 index 0000000..4ada8da --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/TechProcServiceImpl.java @@ -0,0 +1,139 @@ +package jnpf.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jnpf.base.UserInfo; +import jnpf.mapper.TechProcMapper; +import jnpf.model.techproc.TechProcEntity; +import jnpf.model.techproc.TechProcForm; +import jnpf.model.techproc.TechProcPagination; +import jnpf.service.TechProcService; +import jnpf.util.StringUtil; +import jnpf.util.UserProvider; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 工艺流程主数据 ServiceImpl + */ +@Service +public class TechProcServiceImpl extends ServiceImpl implements TechProcService { + + @Resource + private UserProvider userProvider; + + @Resource + private TechProcService self; + + @Override + public List getList(TechProcPagination techProcPagination) { + LambdaQueryWrapper techProcWrapper = new LambdaQueryWrapper<>(); + + if (ObjectUtil.isNotEmpty(techProcPagination.getTechProc())) { + techProcWrapper.like(TechProcEntity::getTechProc, techProcPagination.getTechProc()); + } + if (ObjectUtil.isNotEmpty(techProcPagination.getEnabledStatus())) { + techProcWrapper.eq(TechProcEntity::getEnabledStatus, techProcPagination.getEnabledStatus()); + } + techProcWrapper.eq(TechProcEntity::getDeleteMark, 0); + techProcWrapper.orderByDesc(TechProcEntity::getCreatorTime); + if ("0".equals(techProcPagination.getDataType())) { + Page page = new Page<>(techProcPagination.getCurrentPage(), techProcPagination.getPageSize()); + IPage userIPage = this.page(page, techProcWrapper); + return techProcPagination.setData(userIPage.getRecords(), userIPage.getTotal()); + } else { + return this.list(techProcWrapper); + } + } + + @Override + public TechProcEntity getInfo(String id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TechProcEntity::getId, id); + return this.getOne(queryWrapper); + } + + @Override + public void create(TechProcEntity entity) { + this.save(entity); + } + + @Override + public boolean update(String id, TechProcEntity entity) { + return this.updateById(entity); + } + + @Override + public void delete(TechProcEntity entity) { + if (entity != null) { + this.removeById(entity.getId()); + } + } + + /** + * 验证表单唯一字段,正则,非空 i-0新增-1修改 + */ + @Override + public String checkForm(TechProcForm form, int type) { + boolean isUp = StringUtil.isNotEmpty(form.getId()) && !form.getId().equals("0"); + String id = ""; + String countRecover = ""; + if (isUp) { + id = form.getId(); + } + + // 工艺流程唯一性验证 + if (ObjectUtil.isNotEmpty(form.getTechProc())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TechProcEntity::getTechProc, form.getTechProc()); + if (isUp) { + wrapper.ne(TechProcEntity::getId, id); + } + long count = this.count(wrapper); + if (count > 0) { + countRecover += "工艺流程已存在,请重新输入!"; + } + } + + return countRecover; + } + + /** + * 新增修改数据(事务回滚) + * + * @param id + * @param techProcForm + * @return + */ + @Override + @Transactional + public void saveOrUpdate(TechProcForm techProcForm, String id, boolean isSave) throws Exception { + UserInfo userInfo = userProvider.get(); + TechProcEntity entity; + + if (isSave) { + // 新增 + entity = new TechProcEntity(); + } else { + // 更新:先查询原数据 + entity = getInfo(id); + if (entity == null) { + throw new RuntimeException("数据不存在"); + } + } + + // 使用 BeanUtils.copyProperties 只复制 Form 中有的字段,保留系统字段 + BeanUtils.copyProperties(techProcForm, entity); + + // 通过注入的 self 调用,确保事务生效 + self.saveOrUpdate(entity); + } +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/TechProcController.java b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/TechProcController.java new file mode 100644 index 0000000..a8a0b73 --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/TechProcController.java @@ -0,0 +1,115 @@ +package jnpf.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jnpf.base.ActionResult; +import jnpf.base.vo.PageListVO; +import jnpf.base.vo.PaginationVO; +import jnpf.model.techproc.TechProcEntity; +import jnpf.model.techproc.TechProcForm; +import jnpf.model.techproc.TechProcPagination; +import jnpf.service.TechProcService; +import jnpf.util.JsonUtil; +import jnpf.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 工艺流程主数据 控制类 + */ +@Tag(name = "工艺流程主数据", description = "TechProc") +@RestController +@RequestMapping("/api/example/techproc") +public class TechProcController { + + @Autowired + private TechProcService techProcService; + + /** + * 列表 + * @param techProcPagination 分页查询对象 + * @return 列表结果集 + */ + @Operation(summary = "获取工艺流程列表") + @PostMapping("/getList") + public ActionResult getList(@RequestBody TechProcPagination techProcPagination) { + List list = techProcService.getList(techProcPagination); + List> realList = list.stream() + .map(JsonUtil::entityToMap) + .collect(Collectors.toList()); + + //返回对象 + PageListVO vo = new PageListVO(); + vo.setList(realList); + PaginationVO page = JsonUtil.getJsonToBean(techProcPagination, PaginationVO.class); + vo.setPagination(page); + return ActionResult.success(vo); + } + + /** + * 详情 + * @param id 主键 + * @return 详情结果集 + */ + @Operation(summary = "获取工艺流程详情") + @GetMapping("/{id}") + public ActionResult info(@PathVariable("id") String id) { + TechProcEntity entity = techProcService.getInfo(id); + if (entity != null) { + return ActionResult.success(JsonUtil.entityToMap(entity)); + } + return ActionResult.fail("数据不存在"); + } + + /** + * 新建 + * @param techProcForm 表单对象 + * @return 新建结果 + */ + @Operation(summary = "新建工艺流程") + @PostMapping + public ActionResult create(@RequestBody @Valid TechProcForm techProcForm) { + String b = techProcService.checkForm(techProcForm, 0); + if (StringUtil.isNotEmpty(b)) { + return ActionResult.fail(b); + } + try { + techProcService.saveOrUpdate(techProcForm, "", true); + return ActionResult.success("新建成功"); + } catch (Exception e) { + return ActionResult.fail("新建数据失败:" + e.getMessage()); + } + } + + /** + * 编辑 + * @param id 主键 + * @param techProcForm 表单对象 + * @return 编辑结果 + */ + @Operation(summary = "更新工艺流程") + @PutMapping("/{id}") + public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid TechProcForm techProcForm) { + techProcForm.setId(id); + String b = techProcService.checkForm(techProcForm, 1); + if (StringUtil.isNotEmpty(b)) { + return ActionResult.fail(b); + } + TechProcEntity entity = techProcService.getInfo(id); + if (entity != null) { + try { + techProcService.saveOrUpdate(techProcForm, id, false); + return ActionResult.success("更新成功"); + } catch (Exception e) { + return ActionResult.fail("更新数据失败:" + e.getMessage()); + } + } else { + return ActionResult.fail("更新失败,数据不存在"); + } + } +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaEntity.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaEntity.java index 481862d..fec186d 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaEntity.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaEntity.java @@ -56,8 +56,11 @@ public class StoreAreaEntity { private String remark; @TableField(value = "store_house_id", updateStrategy = FieldStrategy.IGNORED) - private String storeHouseId; + private Integer storeHouseId; @TableField(exist = false) private String storeHouseName; + + @TableField(value = "store_type") + private String storeType; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaForm.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaForm.java index a4cf2bc..7889192 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaForm.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaForm.java @@ -36,4 +36,6 @@ public class StoreAreaForm { @Schema(description = "流程任务ID") private String flowTaskId; + + private String storeType; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaPagination.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaPagination.java index 2ecca49..23841db 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaPagination.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreAreaPagination.java @@ -39,4 +39,7 @@ public class StoreAreaPagination extends Pagination { @Schema(description = "仓库id") private Integer storeHouseId; + + @Schema(description = "仓库类型") + private String storeType; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseEntity.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseEntity.java index 5901c35..cfb3efd 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseEntity.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseEntity.java @@ -40,4 +40,7 @@ public class StoreHouseEntity { @TableField(value = "remark", updateStrategy = FieldStrategy.IGNORED) private String remark; + @TableField(value = "store_type") + private String storeType; + } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseForm.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseForm.java index eda9b22..6e32a06 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseForm.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHouseForm.java @@ -30,4 +30,5 @@ public class StoreHouseForm { @Schema(description = "流程任务ID") private String flowTaskId; + private String storeType; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHousePagination.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHousePagination.java index 696e4df..7a31654 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHousePagination.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/store/StoreHousePagination.java @@ -31,4 +31,7 @@ public class StoreHousePagination extends Pagination { @Schema(description = "状态(1启用 2 未启用)") private Integer enabledStatus; + @Schema(description = "仓储类型") + private String storeType; + } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcEntity.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcEntity.java new file mode 100644 index 0000000..81acb9f --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcEntity.java @@ -0,0 +1,54 @@ +package jnpf.model.techproc; + + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 工艺流程主数据 + */ +@Data +@TableName("tba_tech_proc") +public class TechProcEntity { + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField(value = "f_creator_user_id", fill = FieldFill.INSERT) + private String creatorUserId; + + @TableField(value = "f_creator_time", fill = FieldFill.INSERT) + private Date creatorTime; + + @TableField(value = "f_last_modify_user_id", fill = FieldFill.INSERT_UPDATE) + private String lastModifyUserId; + + @TableField(value = "f_last_modify_time", fill = FieldFill.INSERT_UPDATE) + private Date lastModifyTime; + + @TableField(value = "f_delete_user_id", fill = FieldFill.UPDATE) + private String deleteUserId; + + @TableField(value = "f_delete_time", fill = FieldFill.UPDATE) + private Date deleteTime; + + @TableField(value = "f_delete_mark", updateStrategy = FieldStrategy.IGNORED) + private Integer deleteMark; + + @TableField(value = "f_flow_id", updateStrategy = FieldStrategy.IGNORED) + private String flowId; + + @TableField(value = "f_flow_task_id", updateStrategy = FieldStrategy.IGNORED) + private String flowTaskId; + + @TableField("tech_proc") + private String techProc; + + @TableField(value = "enabled_status", updateStrategy = FieldStrategy.IGNORED) + private Integer enabledStatus; + + @TableField(value = "remark", updateStrategy = FieldStrategy.IGNORED) + private String remark; +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcForm.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcForm.java new file mode 100644 index 0000000..d44a7c1 --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcForm.java @@ -0,0 +1,32 @@ +package jnpf.model.techproc; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 工艺流程主数据 Form + */ +@Data +public class TechProcForm { + + @Schema(description = "主键") + private String id; + + @NotBlank(message = "工艺流程不能为空") + @Schema(description = "工艺流程") + private String techProc; + + @Schema(description = "状态(1启用 2 未启用)") + private Integer enabledStatus; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "流程ID") + private String flowId; + + @Schema(description = "流程任务ID") + private String flowTaskId; +} diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcPagination.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcPagination.java new file mode 100644 index 0000000..7f750f7 --- /dev/null +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/techproc/TechProcPagination.java @@ -0,0 +1,37 @@ +package jnpf.model.techproc; + + +import jnpf.base.Pagination; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 工艺流程主数据分页查询 + */ +@Data +public class TechProcPagination extends Pagination { + + @Schema(description = "selectKey") + private String[] selectKey; + + @Schema(description = "json") + private String json; + + @Schema(description = "数据类型") + private String dataType; + + @Schema(description = "特殊查询json") + private String superQueryJson; + + @Schema(description = "模块id") + private String moduleId; + + @Schema(description = "菜单id") + private String menuId; + + @Schema(description = "工艺流程") + private String techProc; + + @Schema(description = "状态(1启用 2 未启用)") + private Integer enabledStatus; +} diff --git a/jnpf-java-boot/jnpf-web/src/views/example/customer/options.js b/jnpf-java-boot/jnpf-web/src/views/example/customer/options.js index d8330fe..0b8ed96 100644 --- a/jnpf-java-boot/jnpf-web/src/views/example/customer/options.js +++ b/jnpf-java-boot/jnpf-web/src/views/example/customer/options.js @@ -7,6 +7,9 @@ export const customerMaps = { creditRate: { '1': '优', '2': '良', '3': '中', '4': '差' }, payMeth: { '1': '预付', '2': '月付', '3': '承兑' }, enabledStatus: { '1': '启用', '2': '未启用' }, + + + storeType: { '1': '原料库', '2': '在制品库', '3': '成品库' }, } // 根据映射自动生成下拉选项 diff --git a/jnpf-java-boot/jnpf-web/src/views/example/storearea/form.vue b/jnpf-java-boot/jnpf-web/src/views/example/storearea/form.vue index 96546ab..e487371 100644 --- a/jnpf-java-boot/jnpf-web/src/views/example/storearea/form.vue +++ b/jnpf-java-boot/jnpf-web/src/views/example/storearea/form.vue @@ -8,6 +8,10 @@ >