diff --git a/ebike-gateway/src/main/java/com/cdzy/gateway/filters/CustomCipherTextFilter.java b/ebike-gateway/src/main/java/com/cdzy/gateway/filters/CustomCipherTextFilter.java index 1fc5a5a..8a1ccfc 100644 --- a/ebike-gateway/src/main/java/com/cdzy/gateway/filters/CustomCipherTextFilter.java +++ b/ebike-gateway/src/main/java/com/cdzy/gateway/filters/CustomCipherTextFilter.java @@ -152,9 +152,7 @@ public class CustomCipherTextFilter implements GlobalFilter, Ordered { return originalResponseBody; } ObjectMapper objectMapper = new ObjectMapper(); - ResponseDto responseDto = null; - - responseDto = objectMapper.readValue(originalResponseBody, ResponseDto.class); + ResponseDto responseDto = objectMapper.readValue(originalResponseBody, ResponseDto.class); // 只对data字段进行加密处理 Object data = responseDto.getData(); diff --git a/ebike-gateway/src/main/resources/application-dev.yml b/ebike-gateway/src/main/resources/application-dev.yml index d4a7c92..be08043 100644 --- a/ebike-gateway/src/main/resources/application-dev.yml +++ b/ebike-gateway/src/main/resources/application-dev.yml @@ -87,7 +87,7 @@ cdzy: gateway: secure: request-switch: - enable: true + enable: false response-switch: enable: false diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryController.java new file mode 100644 index 0000000..8c8dd0b --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryController.java @@ -0,0 +1,49 @@ +package com.cdzy.operations.controller; + +import com.cdzy.common.model.response.JsonResult; +import com.cdzy.operations.model.vo.EbikeInventoryVo; +import com.cdzy.operations.service.EbikeInventoryService; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 库存表 控制层。 + * + * @author attiya + * @since 2025-10-13 + */ +@RestController +@RequestMapping("/ebikeInventory") +public class EbikeInventoryController { + + @Resource + private EbikeInventoryService ebikeInventoryService; + + /** + * 添加库存。 + * + * @param ebikeInventory 库存表 + * @return {@code true} 添加成功,{@code false} 添加失败 + */ + @PostMapping("addInventory") + public JsonResult addInventory(@RequestBody EbikeInventoryVo ebikeInventory) { + ebikeInventoryService.addInventory(ebikeInventory); + return JsonResult.success(); + } + + /** + * 减少库存。 + * + * @param ebikeInventory 库存表 + * @return {@code true} 添加成功,{@code false} 添加失败 + */ + @PostMapping("reduceInventory") + public JsonResult reduceInventory(@RequestBody EbikeInventoryVo ebikeInventory) { + ebikeInventoryService.reduceInventory(ebikeInventory); + return JsonResult.success(); + } + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryRecordController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryRecordController.java new file mode 100644 index 0000000..3580e9a --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeInventoryRecordController.java @@ -0,0 +1,40 @@ +package com.cdzy.operations.controller; + +import com.cdzy.common.model.request.PageParam; +import com.cdzy.common.model.response.JsonResult; +import com.cdzy.operations.model.entity.EbikeInventoryRecord; +import com.cdzy.operations.service.EbikeInventoryRecordService; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 库存记录表 控制层。 + * + * @author attiya + * @since 2025-10-13 + */ +@RestController +@RequestMapping("/ebikeInventoryRecord") +public class EbikeInventoryRecordController { + + @Resource + private EbikeInventoryRecordService ebikeInventoryRecordService; + + + /** + * 分页查询库存记录表。 + * + * @param pageParam 分页对象 + * @param inventoryType 分页对象 + * @return 分页对象 + */ + @GetMapping("page") + public JsonResult page(PageParam pageParam, Integer inventoryType) { + Page page = ebikeInventoryRecordService.page(pageParam, inventoryType); + return JsonResult.success(page); + } + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryMapper.java b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryMapper.java new file mode 100644 index 0000000..0ecff51 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryMapper.java @@ -0,0 +1,14 @@ +package com.cdzy.operations.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cdzy.operations.model.entity.EbikeInventory; + +/** + * 库存表 映射层。 + * + * @author attiya + * @since 2025-10-13 + */ +public interface EbikeInventoryMapper extends BaseMapper { + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryRecordMapper.java b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryRecordMapper.java new file mode 100644 index 0000000..f326465 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/mapper/EbikeInventoryRecordMapper.java @@ -0,0 +1,14 @@ +package com.cdzy.operations.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cdzy.operations.model.entity.EbikeInventoryRecord; + +/** + * 库存记录表 映射层。 + * + * @author attiya + * @since 2025-10-13 + */ +public interface EbikeInventoryRecordMapper extends BaseMapper { + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventory.java b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventory.java new file mode 100644 index 0000000..ab41dee --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventory.java @@ -0,0 +1,51 @@ +package com.cdzy.operations.model.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 库存表 实体类。 + * + * @author attiya + * @since 2025-10-13 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_inventory") +public class EbikeInventory implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 库存ID + */ + @Id + private Long inventoryId; + + /** + * 运营商ID + */ + private Long operatorId; + + /** + * 库存类型 + */ + private Integer inventoryType; + + /** + * 库存数量 + */ + private Long inventoryNum; + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventoryRecord.java b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventoryRecord.java new file mode 100644 index 0000000..db8e351 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/entity/EbikeInventoryRecord.java @@ -0,0 +1,64 @@ +package com.cdzy.operations.model.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.sql.Timestamp; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 库存记录表 实体类。 + * + * @author attiya + * @since 2025-10-13 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_inventory_record") +public class EbikeInventoryRecord implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 库存记录ID + */ + @Id + private Long inventoryRecordId; + + /** + * 运营商ID + */ + private Long operatorId; + + /** + * 库存类型 + */ + private Integer inventoryType; + + /** + * 库存记录数(减少/增加的数量 + */ + private Long inventoryRecordNum; + + /** + * 创建人 + */ + private Long createdBy; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private Timestamp createdTime; + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeInventoryVo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeInventoryVo.java new file mode 100644 index 0000000..b5b19e0 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeInventoryVo.java @@ -0,0 +1,44 @@ +package com.cdzy.operations.model.vo; + +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 库存表 实体类。 + * + * @author attiya + * @since 2025-10-13 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeInventoryVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 库存类型 + */ + @NotNull(message = "库存部件类型不能为空") + private Integer inventoryType; + + /** + * 添加库存数量 + */ + @NotNull(message = "库存数量不能为空") + private Long inventoryNum; + + /** + * 运营商ID + */ + private Long operatorId; + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryRecordService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryRecordService.java new file mode 100644 index 0000000..600fa2e --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryRecordService.java @@ -0,0 +1,23 @@ +package com.cdzy.operations.service; + +import com.cdzy.common.model.request.PageParam; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.cdzy.operations.model.entity.EbikeInventoryRecord; + +/** + * 库存记录表 服务层。 + * + * @author attiya + * @since 2025-10-13 + */ +public interface EbikeInventoryRecordService extends IService { + + /** + * 分页查询入库记录 + * @param pageParam 分页参数 + * @param inventoryType 类型 + * @return 结果 + */ + Page page(PageParam pageParam, Integer inventoryType); +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryService.java new file mode 100644 index 0000000..6f70c92 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeInventoryService.java @@ -0,0 +1,26 @@ +package com.cdzy.operations.service; + +import com.cdzy.operations.model.vo.EbikeInventoryVo; +import com.mybatisflex.core.service.IService; +import com.cdzy.operations.model.entity.EbikeInventory; + +/** + * 库存表 服务层。 + * + * @author attiya + * @since 2025-10-13 + */ +public interface EbikeInventoryService extends IService { + + /** + * 添加库存 + * @param ebikeInventory 库存信息 + */ + void addInventory(EbikeInventoryVo ebikeInventory); + + /** + * 减少库存 + * @param ebikeInventory 库存信息 + */ + void reduceInventory(EbikeInventoryVo ebikeInventory); +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryRecordServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryRecordServiceImpl.java new file mode 100644 index 0000000..689845d --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryRecordServiceImpl.java @@ -0,0 +1,32 @@ +package com.cdzy.operations.service.impl; + +import com.cdzy.common.model.request.PageParam; +import com.cdzy.operations.mapper.EbikeInventoryRecordMapper; +import com.cdzy.operations.model.entity.EbikeInventoryRecord; +import com.cdzy.operations.service.EbikeInventoryRecordService; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +import static com.cdzy.operations.model.entity.table.EbikeInventoryRecordTableDef.EBIKE_INVENTORY_RECORD; + +/** + * 库存记录表 服务层实现。 + * + * @author attiya + * @since 2025-10-13 + */ +@Service +public class EbikeInventoryRecordServiceImpl extends ServiceImpl implements EbikeInventoryRecordService{ + + @Override + public Page page(PageParam pageParam, Integer inventoryType) { + QueryWrapper queryWrapper = QueryWrapper + .create() + .where(EBIKE_INVENTORY_RECORD.INVENTORY_TYPE.eq(inventoryType, Objects.nonNull(inventoryType))); + return this.mapper.paginate(pageParam.getPage(), queryWrapper); + } +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryServiceImpl.java new file mode 100644 index 0000000..4b5a506 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeInventoryServiceImpl.java @@ -0,0 +1,94 @@ +package com.cdzy.operations.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.cdzy.common.ex.EbikeException; +import com.cdzy.operations.mapper.EbikeInventoryMapper; +import com.cdzy.operations.mapper.EbikeInventoryRecordMapper; +import com.cdzy.operations.model.entity.EbikeInventory; +import com.cdzy.operations.model.entity.EbikeInventoryRecord; +import com.cdzy.operations.model.vo.EbikeInventoryVo; +import com.cdzy.operations.service.EbikeInventoryService; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import static com.cdzy.operations.model.entity.table.EbikeInventoryTableDef.EBIKE_INVENTORY; + +/** + * 库存表 服务层实现。 + * + * @author attiya + * @since 2025-10-13 + */ +@Service +public class EbikeInventoryServiceImpl extends ServiceImpl implements EbikeInventoryService { + + @Resource + EbikeInventoryRecordMapper recordMapper; + + + @Override + @Transactional + public void addInventory(EbikeInventoryVo ebikeInventory) { + if (ebikeInventory.getInventoryNum() <= 0){ + throw new EbikeException("添加库存时填入数量不能小于/等于0"); + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_INVENTORY.INVENTORY_TYPE.eq(ebikeInventory.getInventoryType())); + EbikeInventory inventory = this.mapper.selectOneByQuery(queryWrapper); + if (inventory != null) { + long num = inventory.getInventoryNum() + ebikeInventory.getInventoryNum(); + inventory.setInventoryNum(num); + this.mapper.update(inventory); + }else { + inventory = new EbikeInventory(); + inventory.setOperatorId(ebikeInventory.getOperatorId()); + inventory.setInventoryType(ebikeInventory.getInventoryType()); + inventory.setInventoryNum(ebikeInventory.getInventoryNum()); + this.mapper.insert(inventory); + } + EbikeInventoryRecord inventoryRecord = EbikeInventoryRecord.builder() + .operatorId(ebikeInventory.getOperatorId()) + .inventoryType(ebikeInventory.getInventoryType()) + .inventoryRecordNum(ebikeInventory.getInventoryNum()) + .createdBy(StpUtil.getLoginIdAsLong()) + .build(); + recordMapper.insert(inventoryRecord); + //该类型值存入字典 + if (ebikeInventory.getInventoryType() == 1){ + //TODO:二维码生产, + } + } + + @Override + @Transactional + public void reduceInventory(EbikeInventoryVo ebikeInventory) { + if (ebikeInventory.getInventoryNum() <= 0){ + throw new EbikeException("添加库存时填入数量不能大于/等于0"); + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_INVENTORY.INVENTORY_TYPE.eq(ebikeInventory.getInventoryType())); + EbikeInventory inventory = this.mapper.selectOneByQuery(queryWrapper); + if (inventory != null) { + long num = inventory.getInventoryNum() + ebikeInventory.getInventoryNum(); + if (num < 0){ + throw new EbikeException("当前库存总数不足"); + } + inventory.setInventoryNum(num); + this.mapper.update(inventory); + }else { + if (ebikeInventory.getInventoryNum() < 0){ + throw new EbikeException("暂无库存"); + } + } + EbikeInventoryRecord inventoryRecord = EbikeInventoryRecord.builder() + .operatorId(ebikeInventory.getOperatorId()) + .inventoryType(ebikeInventory.getInventoryType()) + .inventoryRecordNum(ebikeInventory.getInventoryNum()) + .createdBy(StpUtil.getLoginIdAsLong()) + .build(); + recordMapper.insert(inventoryRecord); + } +}