diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java index 57f3db87..2abfebf2 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/CacheKey.java @@ -71,4 +71,5 @@ public interface CacheKey { * 商品库存 */ String PRODUCT = "PRODUCT:"; + String SONG_URL = "song:"; } diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml index 4c7b7ef9..8984287d 100644 --- a/eladmin-system/pom.xml +++ b/eladmin-system/pom.xml @@ -128,6 +128,13 @@ + + com.aliyun + dysmsapi20170525 + 2.0.21 + + + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/config/RabbitConfig.java b/eladmin-system/src/main/java/cn/ysk/cashier/config/RabbitConfig.java new file mode 100644 index 00000000..1bfae312 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/config/RabbitConfig.java @@ -0,0 +1,30 @@ +package cn.ysk.cashier.config; + +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.DirectExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class RabbitConfig { + public static final String QUEUE_STOCK_RECORD_SALE = "queue.stock.record.sale"; + public static final String EXCHANGE_STOCK_RECORD = "exchange.stock.record"; + public static final String ROUTING_STOCK_RECORD_SALE = "routing.stock.record.sale"; + + @Bean + Queue stockRecordSaleQueue() { + return new Queue(QUEUE_STOCK_RECORD_SALE); + } + + @Bean + DirectExchange stockRecordExchange() { + return new DirectExchange(EXCHANGE_STOCK_RECORD); + } + + @Bean + Binding binding(Queue stockRecordSaleQueue, DirectExchange stockRecordExchange) { + return BindingBuilder.bind(stockRecordSaleQueue).to(stockRecordExchange).with(ROUTING_STOCK_RECORD_SALE); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/config/security/rest/AuthorizationController.java b/eladmin-system/src/main/java/cn/ysk/cashier/config/security/rest/AuthorizationController.java index 0b06ef99..a2ffbffe 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/config/security/rest/AuthorizationController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/config/security/rest/AuthorizationController.java @@ -87,10 +87,10 @@ public class AuthorizationController { String code = (String) redisUtils.get(authUser.getUuid()); // 清除验证码 redisUtils.del(authUser.getUuid()); - if (StringUtils.isBlank(code)) { + if (authUser.isChecked() && StringUtils.isBlank(code)) { throw new BadRequestException("验证码不存在或已过期"); } - if (StringUtils.isBlank(authUser.getCode()) || !authUser.getCode().equalsIgnoreCase(code)) { + if (authUser.isChecked() && StringUtils.isBlank(authUser.getCode()) || authUser.isChecked() && !authUser.getCode().equalsIgnoreCase(code)) { throw new BadRequestException("验证码错误"); } //生成token diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/config/security/service/dto/AuthUserDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/config/security/service/dto/AuthUserDto.java index 9969bb6d..147abc97 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/config/security/service/dto/AuthUserDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/config/security/service/dto/AuthUserDto.java @@ -36,4 +36,6 @@ public class AuthUserDto { private String code; private String uuid = ""; + + private boolean checked = true; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConCheck.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConCheck.java index 2ce2ea3d..18c93002 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConCheck.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConCheck.java @@ -72,6 +72,11 @@ public class TbConCheck implements Serializable { @ApiModelProperty(value = "createTime") private Timestamp createTime; + + @Column(name = "`remark`") + @ApiModelProperty(value = "备注") + private String remark; + public void copy(TbConCheck source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConUnit.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConUnit.java new file mode 100644 index 00000000..dae078ec --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConUnit.java @@ -0,0 +1,82 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.domain; + +import lombok.Data; +import cn.hutool.core.bean.BeanUtil; +import io.swagger.annotations.ApiModelProperty; +import cn.hutool.core.bean.copier.CopyOptions; +import javax.persistence.*; +import javax.validation.constraints.*; +import java.sql.Timestamp; +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-12 +**/ +@Entity +@Data +@Table(name="tb_con_unit") +public class TbConUnit implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "`id`") + @ApiModelProperty(value = "id") + private Integer id; + + @Column(name = "`name`",nullable = false) + @NotBlank + @ApiModelProperty(value = "单位名称") + private String name; + + @Column(name = "`value`",nullable = false) + @NotNull + @ApiModelProperty(value = "单位值") + private BigDecimal value; + + + @Column(name = "`parent_id`",nullable = false) + @ApiModelProperty(value = "父级单位值") + private Integer parentId; + + + + @Column(name = "`is_consume`",nullable = false) + @ApiModelProperty(value = "是否按照当前单位消耗 1 是 0 否") + private String isConsume; + + + @Column(name = "`status`",nullable = false) + @NotBlank + @ApiModelProperty(value = "状态 1 启用 0 禁用") + private String status; + + @Column(name = "`create_time`",nullable = false) + @NotNull + @ApiModelProperty(value = "createTime") + private Timestamp createTime; + + @Column(name = "`update_time`") + @ApiModelProperty(value = "updateTime") + private Timestamp updateTime; + + public void copy(TbConUnit source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfoFlow.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfoFlow.java index a01f2483..2def2fa8 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfoFlow.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsInfoFlow.java @@ -87,6 +87,17 @@ public class TbConsInfoFlow implements Serializable { @ApiModelProperty(value = "店铺id") private Integer shopId; + + + @Column(name = "`order_id`") + @ApiModelProperty(value = "订单id") + private Integer orderId; + + + @Column(name = "`order_no`") + @ApiModelProperty(value = "订单编号") + private String orderNo; + @Transient @TableField(exist = false) private String productName; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsType.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsType.java index 6978bcc6..2485c1d0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsType.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbConsType.java @@ -64,6 +64,9 @@ public class TbConsType implements Serializable { @ApiModelProperty(value = "店铺id") private Integer shopId; + @Transient + private int productNum; + public void copy(TbConsType source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbHandover.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbHandover.java new file mode 100644 index 00000000..0cda8182 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/TbHandover.java @@ -0,0 +1,147 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.domain; + +import lombok.Data; +import cn.hutool.core.bean.BeanUtil; +import io.swagger.annotations.ApiModelProperty; +import cn.hutool.core.bean.copier.CopyOptions; +import javax.persistence.*; +import javax.validation.constraints.*; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-25 +**/ +@Entity +@Data +@Table(name="tb_handover") +public class TbHandover implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "`id`") + @ApiModelProperty(value = "id") + private Integer id; + + @Column(name = "`trade_day`") + @ApiModelProperty(value = "交班日期") + private String tradeDay; + + @Column(name = "`print_no`") + @ApiModelProperty(value = "打印机编号") + private String printNo; + + @Column(name = "`duty_id`") + @ApiModelProperty(value = "dutyId") + private Integer dutyId; + + @Column(name = "`shop_id`") + @ApiModelProperty(value = "shopId") + private Integer shopId; + + @Column(name = "`merchant_name`") + @ApiModelProperty(value = "merchantName") + private String merchantName; + + @Column(name = "`start_time`") + @ApiModelProperty(value = "startTime") + private String startTime; + + @Column(name = "`end_time`") + @ApiModelProperty(value = "endTime") + private String endTime; + + @Column(name = "`staff_id`") + @ApiModelProperty(value = "staffId") + private Integer staffId; + + @Column(name = "`staff_name`") + @ApiModelProperty(value = "staffName") + private String staffName; + + @Column(name = "`pay_infos`") + @ApiModelProperty(value = "payInfos") + private String payInfos; + + @Column(name = "`member_data`") + @ApiModelProperty(value = "memberData") + private String memberData; + + @Column(name = "`product_categories`") + @ApiModelProperty(value = "productCategories") + private String productCategories; + + @Column(name = "`total_amount`") + @ApiModelProperty(value = "totalAmount") + private String totalAmount; + + @Column(name = "`imprest`") + @ApiModelProperty(value = "imprest") + private String imprest; + + @Column(name = "`payable`") + @ApiModelProperty(value = "payable") + private String payable; + + @Column(name = "`hand_in`") + @ApiModelProperty(value = "handIn") + private String handIn; + + + + @Column(name = "`return_amount`") + @ApiModelProperty(value = "returnAmount") + private String returnAmount; + + + @Column(name = "`order_num`") + @ApiModelProperty(value = "orderNum") + private String orderNum; + + + + @Column(name = "`quick_amount`") + @ApiModelProperty(value = "quickAmount") + private String quickAmount; + + + + @Column(name = "`product_info_pos`") + @ApiModelProperty(value = "productInfoPos") + private String productInfoPos; + + + + @Column(name = "`product_infos`") + @ApiModelProperty(value = "productInfos") + private String productInfos; + + + + @Column(name = "`create_time`") + @ApiModelProperty(value = "createTime") + private Timestamp createTime; + + + + + public void copy(TbHandover source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConInfoFlow.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConInfoFlow.java new file mode 100644 index 00000000..c7efd392 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/domain/ViewConInfoFlow.java @@ -0,0 +1,92 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.domain; + +import lombok.Data; +import cn.hutool.core.bean.BeanUtil; +import io.swagger.annotations.ApiModelProperty; +import cn.hutool.core.bean.copier.CopyOptions; +import javax.persistence.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-17 +**/ +@Entity +@Data +@Table(name="view_con_info_flow") +public class ViewConInfoFlow implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "`cons_id`") + @ApiModelProperty(value = "耗材id") + private Integer consId; + + @Column(name = "`con_name`") + @ApiModelProperty(value = "耗材名称") + private String conName; + + + @Column(name = "`shop_id`") + @ApiModelProperty(value = "店铺id") + private Integer shopId; + + @Column(name = "`con_return`",nullable = false) + @NotNull + @ApiModelProperty(value = "con_return") + private BigDecimal conReturn; + + @Column(name = "`con_in`",nullable = false) + @NotNull + @ApiModelProperty(value = "con_in") + private BigDecimal conIn; + + @Column(name = "`con_consume`",nullable = false) + @NotNull + @ApiModelProperty(value = "con_consume") + private BigDecimal conConsume; + + @Column(name = "`con_out`",nullable = false) + @NotNull + @ApiModelProperty(value = "con_out") + private BigDecimal conOut; + + @Column(name = "`balance`",nullable = false) + @NotNull + @ApiModelProperty(value = "balance") + private BigDecimal balance; + + + + @Column(name = "`product_id`") + @ApiModelProperty(value = "商品id") + private String productId; + + + @Column(name = "`product_name`") + @ApiModelProperty(value = "商品名称") + private String productName; + + + + public void copy(ViewConInfoFlow source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConUnitRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConUnitRepository.java new file mode 100644 index 00000000..c18295b6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConUnitRepository.java @@ -0,0 +1,13 @@ +package cn.ysk.cashier.cons.repository; + +import cn.ysk.cashier.cons.domain.TbConUnit; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* @website https://eladmin.vip +* @author admin +* @date 2024-07-12 +**/ +public interface TbConUnitRepository extends JpaRepository, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoFlowRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoFlowRepository.java index 2af7ea91..90c0a8d6 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoFlowRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsInfoFlowRepository.java @@ -1,7 +1,6 @@ package cn.ysk.cashier.cons.repository; import cn.ysk.cashier.cons.domain.TbConsInfoFlow; -import org.apache.ibatis.annotations.Select; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; @@ -17,9 +16,10 @@ public interface TbConsInfoFlowRepository extends JpaRepository int countByConCode(String conCode); + + List findByConTypeId(Integer typeId); + + TbConsInfo findByConCode(String conCode); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java index fafa597f..25b7904d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbConsTypeRepository.java @@ -3,6 +3,7 @@ package cn.ysk.cashier.cons.repository; import cn.ysk.cashier.cons.domain.TbConsType; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; /** * @website https://eladmin.vip @@ -12,4 +13,9 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; public interface TbConsTypeRepository extends JpaRepository, JpaSpecificationExecutor { int countByConTypeCode(String conTypeCode); -} \ No newline at end of file + + TbConsType findByConTypeCode(String conTypeCode); + + @Query("SELECT count(*) FROM TbProskuCon c LEFT JOIN TbConsInfo i ON c.conInfoId = i.id WHERE i.conTypeId = :id") + int countProByTypeId(Integer id); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbHandoverRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbHandoverRepository.java new file mode 100644 index 00000000..cc761c1c --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/TbHandoverRepository.java @@ -0,0 +1,13 @@ +package cn.ysk.cashier.cons.repository; + +import cn.ysk.cashier.cons.domain.TbHandover; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* @website https://eladmin.vip +* @author admin +* @date 2024-07-25 +**/ +public interface TbHandoverRepository extends JpaRepository, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/ViewConInfoFlowRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/ViewConInfoFlowRepository.java new file mode 100644 index 00000000..37fd00c6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/repository/ViewConInfoFlowRepository.java @@ -0,0 +1,13 @@ +package cn.ysk.cashier.cons.repository; + +import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +/** +* @website https://eladmin.vip +* @author admin +* @date 2024-07-17 +**/ +public interface ViewConInfoFlowRepository extends JpaRepository, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConUnitController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConUnitController.java new file mode 100644 index 00000000..4fef292f --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConUnitController.java @@ -0,0 +1,83 @@ +package cn.ysk.cashier.cons.rest; + +import cn.hutool.core.util.ObjectUtil; +import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.cons.domain.TbConUnit; +import cn.ysk.cashier.cons.service.TbConUnitService; +import cn.ysk.cashier.cons.service.dto.TbConUnitQueryCriteria; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Objects; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-12 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "耗材单位添加管理") +@RequestMapping("/api/tbConUnit") +public class TbConUnitController { + + private final TbConUnitService tbConUnitService; + + @Log("导出数据") + @ApiOperation("导出数据") + @GetMapping(value = "/download") + public void exportTbConUnit(HttpServletResponse response, TbConUnitQueryCriteria criteria) throws IOException { + tbConUnitService.download(tbConUnitService.queryAll(criteria), response); + } + + @GetMapping + @Log("查询耗材单位添加") + @ApiOperation("查询耗材单位添加") + public ResponseEntity queryTbConUnit(TbConUnitQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(tbConUnitService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增耗材单位添加") + @ApiOperation("新增耗材单位添加") + public ResponseEntity createTbConUnit(@Validated @RequestBody TbConUnit resources){ + + if(ObjectUtil.isEmpty(resources.getParentId())|| Objects.isNull(resources.getParentId())){ + resources.setParentId(0); + } + resources.setStatus("0"); + resources.setCreateTime(new Timestamp(System.currentTimeMillis())); + return new ResponseEntity<>(tbConUnitService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改耗材单位添加") + @ApiOperation("修改耗材单位添加") + public ResponseEntity updateTbConUnit(@Validated @RequestBody TbConUnit resources){ + + resources.setUpdateTime(new Timestamp(System.currentTimeMillis())); + tbConUnitService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @Log("删除耗材单位添加") + @ApiOperation("删除耗材单位添加") + public ResponseEntity deleteTbConUnit(@RequestBody Integer[] ids) { + tbConUnitService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + + + @RequestMapping("queryTbConUnitInfo") + public ResponseEntity queryTbConUnitInfo(TbConUnitQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(tbConUnitService.queryAllInfo(criteria,pageable),HttpStatus.OK); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java index b9132067..4c7a5062 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbConsInfoController.java @@ -6,14 +6,19 @@ import cn.ysk.cashier.cons.domain.TbConsInfo; import cn.ysk.cashier.cons.domain.TbConsSuppFlow; import cn.ysk.cashier.cons.service.TbConsInfoService; import cn.ysk.cashier.cons.service.dto.TbConsInfoQueryCriteria; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; +import org.springframework.web.multipart.MultipartFile; + import java.io.IOException; +import java.util.List; import javax.servlet.http.HttpServletResponse; /** @@ -39,20 +44,21 @@ public class TbConsInfoController { @Log("查询耗材信息") @ApiOperation("查询耗材信息") public ResponseEntity queryTbConsInfo(TbConsInfoQueryCriteria criteria, Pageable pageable){ + pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("createTime").descending()); return new ResponseEntity<>(tbConsInfoService.queryAll(criteria,pageable),HttpStatus.OK); } @PostMapping @Log("新增耗材信息") @ApiOperation("新增耗材信息") - public ResponseEntity createTbConsInfo(@Validated @RequestBody TbConsInfo resources) throws Exception { + public ResponseEntity createTbConsInfo(@Validated @RequestBody List resources) throws Exception { return new ResponseEntity<>(tbConsInfoService.create(resources),HttpStatus.CREATED); } @PutMapping @Log("修改耗材信息") @ApiOperation("修改耗材信息") - public ResponseEntity updateTbConsInfo(@Validated @RequestBody TbConsInfo resources) throws Exception { + public ResponseEntity updateTbConsInfo(@Validated @RequestBody List resources) throws Exception { tbConsInfoService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -72,4 +78,16 @@ public class TbConsInfoController { tbConsInfoService.stockInOut(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + + + + @PostMapping("inputStock") + public ResponseEntity inputStock(@RequestParam String shopId,@RequestParam("file") MultipartFile file){ + try { + tbConsInfoService.inputStock(shopId,file); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbHandoverController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbHandoverController.java new file mode 100644 index 00000000..baafaa7c --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbHandoverController.java @@ -0,0 +1,65 @@ +package cn.ysk.cashier.cons.rest; + +import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.cons.domain.TbHandover; +import cn.ysk.cashier.cons.service.TbHandoverService; +import cn.ysk.cashier.cons.service.dto.TbHandoverQueryCriteria; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-25 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "查询交班记录管理") +@RequestMapping("/api/tbHandover") +public class TbHandoverController { + + private final TbHandoverService tbHandoverService; + + @Log("导出数据") + @ApiOperation("导出数据") + @GetMapping(value = "/download") + public void exportTbHandover(HttpServletResponse response, TbHandoverQueryCriteria criteria) throws IOException { + tbHandoverService.download(tbHandoverService.queryAll(criteria), response); + } + + @GetMapping + @Log("查询查询交班记录") + @ApiOperation("查询查询交班记录") + public ResponseEntity queryTbHandover(TbHandoverQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(tbHandoverService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增查询交班记录") + @ApiOperation("新增查询交班记录") + public ResponseEntity createTbHandover(@Validated @RequestBody TbHandover resources){ + return new ResponseEntity<>(tbHandoverService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改查询交班记录") + @ApiOperation("修改查询交班记录") + public ResponseEntity updateTbHandover(@Validated @RequestBody TbHandover resources){ + tbHandoverService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @Log("删除查询交班记录") + @ApiOperation("删除查询交班记录") + public ResponseEntity deleteTbHandover(@RequestBody Integer[] ids) { + tbHandoverService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java index 623a318b..7311119b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java @@ -5,6 +5,7 @@ import cn.ysk.cashier.cons.domain.TbProskuCon; import cn.ysk.cashier.cons.service.TbProskuConService; import cn.ysk.cashier.cons.service.dto.ProskuInfo; import cn.ysk.cashier.cons.service.dto.TbProskuConQueryCriteria; +import cn.ysk.cashier.exception.BadRequestException; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -13,6 +14,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.List; import javax.servlet.http.HttpServletResponse; /** @@ -44,8 +46,14 @@ public class TbProskuConController { @PostMapping @Log("新增商品规格耗材信息") @ApiOperation("新增商品规格耗材信息") - public ResponseEntity createTbProskuCon(@Validated @RequestBody ProskuInfo resources) throws Exception { - return new ResponseEntity<>(tbProskuConService.create(resources),HttpStatus.CREATED); + public ResponseEntity createTbProskuCon(@Validated @RequestBody List resources) throws Exception { + try { + return new ResponseEntity<>(tbProskuConService.create(resources),HttpStatus.CREATED); + } catch (BadRequestException be) { + throw new Exception(be.getMessage()); + }catch (Exception e){ + throw new Exception("相同商品耗材信息不允许添加"); + } } @PutMapping diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java new file mode 100644 index 00000000..e5558da6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/ViewConInfoFlowController.java @@ -0,0 +1,65 @@ +package cn.ysk.cashier.cons.rest; + +import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +import cn.ysk.cashier.cons.service.ViewConInfoFlowService; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowQueryCriteria; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-17 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "获取耗材流水信息管理") +@RequestMapping("/api/viewConInfoFlow") +public class ViewConInfoFlowController { + + private final ViewConInfoFlowService viewConInfoFlowService; + + @Log("导出数据") + @ApiOperation("导出数据") + @GetMapping(value = "/download") + public void exportViewConInfoFlow(HttpServletResponse response, ViewConInfoFlowQueryCriteria criteria) throws IOException { + viewConInfoFlowService.download(viewConInfoFlowService.queryAll(criteria), response); + } + + @GetMapping + @Log("查询获取耗材流水信息") + @ApiOperation("查询获取耗材流水信息") + public ResponseEntity queryViewConInfoFlow(ViewConInfoFlowQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(viewConInfoFlowService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增获取耗材流水信息") + @ApiOperation("新增获取耗材流水信息") + public ResponseEntity createViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ + return new ResponseEntity<>(viewConInfoFlowService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改获取耗材流水信息") + @ApiOperation("修改获取耗材流水信息") + public ResponseEntity updateViewConInfoFlow(@Validated @RequestBody ViewConInfoFlow resources){ + viewConInfoFlowService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @Log("删除获取耗材流水信息") + @ApiOperation("删除获取耗材流水信息") + public ResponseEntity deleteViewConInfoFlow(@RequestBody Integer[] ids) { + viewConInfoFlowService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConUnitService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConUnitService.java new file mode 100644 index 00000000..57f11561 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConUnitService.java @@ -0,0 +1,70 @@ +package cn.ysk.cashier.cons.service; + +import cn.ysk.cashier.cons.domain.TbConUnit; +import cn.ysk.cashier.cons.service.dto.TbConUnitDto; +import cn.ysk.cashier.cons.service.dto.TbConUnitQueryCriteria; +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-12 +**/ +public interface TbConUnitService { + + /** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(TbConUnitQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(TbConUnitQueryCriteria criteria); + + /** + * 根据ID查询 + * @param id ID + * @return TbConUnitDto + */ + TbConUnitDto findById(Integer id); + + /** + * 创建 + * @param resources / + * @return TbConUnitDto + */ + TbConUnitDto create(TbConUnit resources); + + /** + * 编辑 + * @param resources / + */ + void update(TbConUnit resources); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Integer[] ids); + + /** + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; + + + + Map queryAllInfo(TbConUnitQueryCriteria criteria, Pageable pageable); +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java index 3260b05d..144bd73f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbConsInfoService.java @@ -6,6 +6,9 @@ import cn.ysk.cashier.cons.domain.TbConsSuppFlow; import cn.ysk.cashier.cons.service.dto.TbConsInfoDto; import cn.ysk.cashier.cons.service.dto.TbConsInfoQueryCriteria; import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + import java.util.Map; import java.util.List; import java.io.IOException; @@ -44,13 +47,13 @@ public interface TbConsInfoService { * @param resources / * @return TbConsInfoDto */ - TbConsInfoDto create(TbConsInfo resources) throws Exception; + TbConsInfoDto create(List resources) throws Exception; /** * 编辑 * @param resources / */ - void update(TbConsInfo resources) throws Exception; + void update(List resources) throws Exception; /** * 多选删除 @@ -68,4 +71,7 @@ public interface TbConsInfoService { void stockInOut(SuppFlow resources) throws Exception; + + + void inputStock(String shopId, MultipartFile file) throws Exception; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbHandoverService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbHandoverService.java new file mode 100644 index 00000000..ddee2f65 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbHandoverService.java @@ -0,0 +1,66 @@ +package cn.ysk.cashier.cons.service; + +import cn.ysk.cashier.cons.domain.TbHandover; +import cn.ysk.cashier.cons.service.dto.TbHandoverDto; +import cn.ysk.cashier.cons.service.dto.TbHandoverQueryCriteria; +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-25 +**/ +public interface TbHandoverService { + + /** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(TbHandoverQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(TbHandoverQueryCriteria criteria); + + /** + * 根据ID查询 + * @param id ID + * @return TbHandoverDto + */ + TbHandoverDto findById(Integer id); + + /** + * 创建 + * @param resources / + * @return TbHandoverDto + */ + TbHandoverDto create(TbHandover resources); + + /** + * 编辑 + * @param resources / + */ + void update(TbHandover resources); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Integer[] ids); + + /** + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java index c59dc515..f95aaec0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/TbProskuConService.java @@ -43,7 +43,7 @@ public interface TbProskuConService { * @param resources / * @return TbProskuConDto */ - TbProskuConDto create(ProskuInfo resources) throws Exception; + TbProskuConDto create(List resources) throws Exception; /** * 编辑 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/ViewConInfoFlowService.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/ViewConInfoFlowService.java new file mode 100644 index 00000000..5e95fff2 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/ViewConInfoFlowService.java @@ -0,0 +1,66 @@ +package cn.ysk.cashier.cons.service; + +import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowDto; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowQueryCriteria; +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author admin +* @date 2024-07-17 +**/ +public interface ViewConInfoFlowService { + + /** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(ViewConInfoFlowQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(ViewConInfoFlowQueryCriteria criteria); + + /** + * 根据ID查询 + * @param consId ID + * @return ViewConInfoFlowDto + */ + ViewConInfoFlowDto findById(Integer consId); + + /** + * 创建 + * @param resources / + * @return ViewConInfoFlowDto + */ + ViewConInfoFlowDto create(ViewConInfoFlow resources); + + /** + * 编辑 + * @param resources / + */ + void update(ViewConInfoFlow resources); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Integer[] ids); + + /** + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ConUnitPO.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ConUnitPO.java new file mode 100644 index 00000000..77134e42 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ConUnitPO.java @@ -0,0 +1,30 @@ +package cn.ysk.cashier.cons.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.List; + +@Data +public class ConUnitPO implements Serializable { + + + private Integer id; + + private String name; + + private BigDecimal value; + + private String isConsume; + + private Timestamp createTime; + + private Timestamp updateTime; + + + private List childConUnit; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConCheckDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConCheckDto.java index 57db6407..9c09f2ee 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConCheckDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConCheckDto.java @@ -44,4 +44,6 @@ public class TbConCheckDto implements Serializable { private BigDecimal acStockNumber; private Timestamp createTime; + + private String remark; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitDto.java new file mode 100644 index 00000000..83f0b899 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitDto.java @@ -0,0 +1,52 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.validation.constraints.NotNull; +import java.sql.Timestamp; +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-12 +**/ +@Data +public class TbConUnitDto implements Serializable { + + private Integer id; + + /** 主单位名称 */ + private String name; + + /** 主单位值 */ + private BigDecimal value; + + private Integer parentId; + + private String isConsume; + + /** 状态 1 启用 0 禁用 */ + private String status; + + private Timestamp createTime; + + private Timestamp updateTime; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitQueryCriteria.java new file mode 100644 index 00000000..17259f4f --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConUnitQueryCriteria.java @@ -0,0 +1,25 @@ +package cn.ysk.cashier.cons.service.dto; + +import lombok.Data; +import java.util.List; +import cn.ysk.cashier.annotation.Query; + +/** +* @author admin +* @date 2024-07-12 +**/ +@Data +public class TbConUnitQueryCriteria{ + + /** 模糊 */ + @Query(type = Query.Type.INNER_LIKE) + private String name; + + /** 精确 */ + @Query + private Integer parentId; + + /** 精确 */ + @Query + private String status; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java index 5000fb99..59c33687 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoDto.java @@ -68,12 +68,13 @@ public class TbConsInfoDto implements Serializable { private Integer shopId; - - private BigDecimal price; private String status; private BigDecimal stockConsume; + + + private String contypeCode; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowDto.java index 627ea21a..b2c628f8 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowDto.java @@ -15,7 +15,10 @@ */ package cn.ysk.cashier.cons.service.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import javax.persistence.Column; import java.sql.Timestamp; import java.math.BigDecimal; import java.io.Serializable; @@ -60,4 +63,9 @@ public class TbConsInfoFlowDto implements Serializable { private Integer shopId; private String productName; + + + private Integer orderId; + + private String orderNo; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowQueryCriteria.java index 3f34192e..7e44066c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsInfoFlowQueryCriteria.java @@ -1,6 +1,8 @@ package cn.ysk.cashier.cons.service.dto; import lombok.Data; + +import java.math.BigDecimal; import java.util.List; import cn.ysk.cashier.annotation.Query; @@ -22,4 +24,12 @@ public class TbConsInfoFlowQueryCriteria{ /** 精确 */ @Query private Integer shopId; + + + @Query + private String orderNo; + + + @Query(type = Query.Type.NOT_EQUAL) + private BigDecimal amount; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsTypeDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsTypeDto.java index 40b1a917..07bc9767 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsTypeDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbConsTypeDto.java @@ -45,4 +45,5 @@ public class TbConsTypeDto implements Serializable { /** 店铺id */ private Integer shopId; -} \ No newline at end of file + private int productNum; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverDto.java new file mode 100644 index 00000000..bc1a6775 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverDto.java @@ -0,0 +1,85 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.service.dto; + +import lombok.Data; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-25 +**/ +@Data +public class TbHandoverDto implements Serializable { + + private Integer id; + + /** 交班日期 */ + private String tradeDay; + + /** 打印机编号 */ + private String printNo; + + private Integer dutyId; + + private Integer shopId; + + private String merchantName; + + private String startTime; + + private String endTime; + + private Integer staffId; + + private String staffName; + + private String payInfos; + + private String memberData; + + private String productCategories; + + private String totalAmount; + + private String imprest; + + private String payable; + + private String handIn; + + + private String returnAmount; + + /** 交班日期 */ + + private String orderNum; + + /** 打印机编号 */ + + private String quickAmount; + + + private String productInfoPos; + + + private String productInfos; + + + private Timestamp createTime; + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverQueryCriteria.java new file mode 100644 index 00000000..8cc0d25a --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/TbHandoverQueryCriteria.java @@ -0,0 +1,29 @@ +package cn.ysk.cashier.cons.service.dto; + +import lombok.Data; +import java.util.List; +import cn.ysk.cashier.annotation.Query; + +/** +* @author admin +* @date 2024-07-25 +**/ +@Data +public class TbHandoverQueryCriteria{ + + /** 精确 */ + @Query + private String tradeDay; + + /** 精确 */ + @Query + private String printNo; + + /** 精确 */ + @Query + private Integer shopId; + + /** 精确 */ + @Query + private String merchantName; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowDto.java new file mode 100644 index 00000000..158170a4 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowDto.java @@ -0,0 +1,52 @@ +/* +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package cn.ysk.cashier.cons.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import java.math.BigDecimal; +import java.io.Serializable; + +/** +* @author admin +* @date 2024-07-17 +**/ +@Data +public class ViewConInfoFlowDto implements Serializable { + + /** 耗材id */ + private Integer consId; + + /** 耗材名称 */ + private String conName; + + private BigDecimal conReturn; + + private BigDecimal conIn; + + private BigDecimal conConsume; + + private BigDecimal conOut; + + private BigDecimal balance; + + + private String productId; + + private String productName; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowQueryCriteria.java new file mode 100644 index 00000000..5540ebe5 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/dto/ViewConInfoFlowQueryCriteria.java @@ -0,0 +1,21 @@ +package cn.ysk.cashier.cons.service.dto; + +import lombok.Data; +import java.util.List; +import cn.ysk.cashier.annotation.Query; + +/** +* @author admin +* @date 2024-07-17 +**/ +@Data +public class ViewConInfoFlowQueryCriteria{ + + /** 模糊 */ + @Query(type = Query.Type.INNER_LIKE) + private String conName; + + + @Query + private String shopId; +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConCheckServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConCheckServiceImpl.java index 2bc9b1ad..a5c50c38 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConCheckServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConCheckServiceImpl.java @@ -82,6 +82,7 @@ public class TbConCheckServiceImpl implements TbConCheckService { conCheck.setLpNum(resources.getLpNum()); conCheck.setLpAmount(consInfo.getPrice().multiply(resources.getLpNum())); conCheck.setCreateTime(new Timestamp(System.currentTimeMillis())); + conCheck.setRemark(resources.getRemark()); return tbConCheckMapper.toDto(tbConCheckRepository.save(conCheck)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConUnitServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConUnitServiceImpl.java new file mode 100644 index 00000000..ac7d4697 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConUnitServiceImpl.java @@ -0,0 +1,138 @@ +package cn.ysk.cashier.cons.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.ysk.cashier.cons.domain.TbConUnit; +import cn.ysk.cashier.cons.service.dto.ConUnitPO; +import cn.ysk.cashier.utils.FileUtil; +import cn.ysk.cashier.utils.PageUtil; +import cn.ysk.cashier.utils.QueryHelp; +import cn.ysk.cashier.utils.ValidationUtil; +import lombok.RequiredArgsConstructor; +import cn.ysk.cashier.cons.repository.TbConUnitRepository; +import cn.ysk.cashier.cons.service.TbConUnitService; +import cn.ysk.cashier.cons.service.dto.TbConUnitDto; +import cn.ysk.cashier.cons.service.dto.TbConUnitQueryCriteria; +import cn.ysk.cashier.cons.service.mapstruct.TbConUnitMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.*; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @website https://eladmin.vip +* @description 服务实现 +* @author admin +* @date 2024-07-12 +**/ +@Service +@RequiredArgsConstructor +public class TbConUnitServiceImpl implements TbConUnitService { + + private final TbConUnitRepository tbConUnitRepository; + private final TbConUnitMapper tbConUnitMapper; + + @Override + public Map queryAll(TbConUnitQueryCriteria criteria, Pageable pageable){ + Page page = tbConUnitRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(tbConUnitMapper::toDto)); + } + + @Override + public List queryAll(TbConUnitQueryCriteria criteria){ + return tbConUnitMapper.toDto(tbConUnitRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + + @Override + @Transactional + public TbConUnitDto findById(Integer id) { + TbConUnit tbConUnit = tbConUnitRepository.findById(id).orElseGet(TbConUnit::new); + ValidationUtil.isNull(tbConUnit.getId(),"TbConUnit","id",id); + return tbConUnitMapper.toDto(tbConUnit); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public TbConUnitDto create(TbConUnit resources) { + return tbConUnitMapper.toDto(tbConUnitRepository.save(resources)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(TbConUnit resources) { + TbConUnit tbConUnit = tbConUnitRepository.findById(resources.getId()).orElseGet(TbConUnit::new); + ValidationUtil.isNull( tbConUnit.getId(),"TbConUnit","id",resources.getId()); + tbConUnit.copy(resources); + tbConUnitRepository.save(tbConUnit); + } + + @Override + public void deleteAll(Integer[] ids) { + for (Integer id : ids) { + tbConUnitRepository.deleteById(id); + } + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (TbConUnitDto tbConUnit : all) { + Map map = new LinkedHashMap<>(); + map.put("主单位名称", tbConUnit.getName()); + map.put("主单位值", tbConUnit.getValue()); + map.put("状态 1 启用 0 禁用", tbConUnit.getStatus()); + map.put(" createTime", tbConUnit.getCreateTime()); + map.put(" updateTime", tbConUnit.getUpdateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public Map queryAllInfo(TbConUnitQueryCriteria criteria, Pageable pageable) { + List list=new ArrayList<>(); + if(ObjectUtil.isEmpty(criteria.getParentId())){ + criteria.setParentId(0); + } + Page page = tbConUnitRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + if(Objects.nonNull(page)&&Objects.nonNull(page.getContent())){ + page.getContent().parallelStream().forEach(it->{ + ConUnitPO po=new ConUnitPO(); + po.setId(it.getId()); + po.setName(it.getName()); + po.setValue(it.getValue()); + po.setIsConsume(it.getIsConsume()); + po.setCreateTime(it.getCreateTime()); + po.setUpdateTime(it.getUpdateTime()); + + criteria.setParentId(it.getId()); + criteria.setName(null); + criteria.setStatus(null); + Page childPage = tbConUnitRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + if(Objects.nonNull(childPage)&&Objects.nonNull(childPage.getContent())){ + List list1=new ArrayList<>(); + for (TbConUnit tbConUnit : childPage.getContent()) { + ConUnitPO child=new ConUnitPO(); + child.setId(tbConUnit.getId()); + child.setName(tbConUnit.getName()); + child.setValue(tbConUnit.getValue()); + child.setIsConsume(tbConUnit.getIsConsume()); + child.setCreateTime(tbConUnit.getCreateTime()); + child.setUpdateTime(tbConUnit.getUpdateTime()); + list1.add(child); + } + po.setChildConUnit(list1); + } + list.add(po); + }); + } + Map map = new LinkedHashMap<>(2); + map.put("content",list); + map.put("totalElements",page.getTotalElements()); + return map; + + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoFlowServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoFlowServiceImpl.java index 43d101d9..7ad1151f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoFlowServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoFlowServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import java.math.BigDecimal; import java.util.*; import java.io.IOException; import javax.servlet.http.HttpServletResponse; @@ -38,12 +39,13 @@ public class TbConsInfoFlowServiceImpl implements TbConsInfoFlowService { @Override public Map queryAll(TbConsInfoFlowQueryCriteria criteria, Pageable pageable){ + criteria.setAmount(BigDecimal.ZERO); Sort sort = Sort.by(Sort.Direction.DESC, "id"); pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), sort); Page page = tbConsInfoFlowRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); page.get().forEach(it->{ - String name= tbConsInfoFlowRepository.selectByPskId(it.getConsId()); + String name= tbConsInfoFlowRepository.selectByPskId(it.getProSkuId()); if(Objects.nonNull(name)){ it.setProductName(name); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java index 030cb50e..92efc32a 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.cons.service.impl; +import cn.hutool.core.util.ObjectUtil; import cn.ysk.cashier.cons.domain.*; import cn.ysk.cashier.cons.repository.TbConsInfoFlowRepository; import cn.ysk.cashier.cons.repository.TbConsInfoRepository; @@ -17,26 +18,31 @@ import cn.ysk.cashier.repository.product.TbProductStockOperateRepository; import cn.ysk.cashier.repository.shop.TbShopInfoRepository; import cn.ysk.cashier.repository.shop.TbShopPurveyorRepository; import cn.ysk.cashier.repository.shop.TbShopPurveyorTransactRepository; -import cn.ysk.cashier.utils.FileUtil; -import cn.ysk.cashier.utils.PageUtil; -import cn.ysk.cashier.utils.QueryHelp; -import cn.ysk.cashier.utils.ValidationUtil; +import cn.ysk.cashier.utils.*; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Timestamp; import java.util.*; +import static cn.ysk.cashier.utils.StringCodeUtil.TYPE.LETTER_CAPITAL_NUMBER; + /** * @author admin * @website https://eladmin.vip @@ -64,6 +70,7 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { private final TbProductStockOperateRepository tbProductStockOperateRepository; + @Override public Map queryAll(TbConsInfoQueryCriteria criteria, Pageable pageable) { Page page = tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); @@ -72,7 +79,14 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { @Override public List queryAll(TbConsInfoQueryCriteria criteria) { - return tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); + + List list= tbConsInfoMapper.toDto(tbConsInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); + if(Objects.nonNull(list)&&list.size()>0){ + list.parallelStream().forEach(it->{ + it.setContypeCode(tbConsTypeRepository.findById(it.getConTypeId()).orElseGet(TbConsType::new).getConTypeCode()); + }); + } + return list; } @Override @@ -85,47 +99,52 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { @Override @Transactional(rollbackFor = Exception.class) - public TbConsInfoDto create(TbConsInfo resources) throws Exception { + public TbConsInfoDto create(List resources) throws Exception { - TbConsType tbConsType = tbConsTypeRepository.getById(resources.getConTypeId()); - if (Objects.isNull(tbConsType)) { - throw new Exception("不存在的耗材类型"); + for (TbConsInfo resource : resources) { + TbConsType tbConsType = tbConsTypeRepository.getById(resource.getConTypeId()); + if (Objects.isNull(tbConsType)) { + throw new Exception("不存在的耗材类型"); + } + +// int count = tbConsInfoRepository.countByConCode(resources.getConCode()); +// if (count > 0) { +// throw new Exception("耗材代码不允许重复"); +// } + + + resource.setConCode(StringCodeUtil.getRandom(8,LETTER_CAPITAL_NUMBER)); + resource.setConTypeName(tbConsType.getConTypeName()); + resource.setLasterInStock(BigDecimal.ZERO); + resource.setStockNumber(BigDecimal.ZERO); + resource.setStatus("1"); + resource.setStockConsume(BigDecimal.ZERO); + resource.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoRepository.save(resource); } - - - int count = tbConsInfoRepository.countByConCode(resources.getConCode()); - if (count > 0) { - throw new Exception("耗材代码不允许重复"); - } - - resources.setConTypeName(tbConsType.getConTypeName()); - resources.setLasterInStock(BigDecimal.ZERO); - resources.setStockNumber(BigDecimal.ZERO); - resources.setStatus("1"); - resources.setStockConsume(BigDecimal.ZERO); - resources.setCreateTime(new Timestamp(System.currentTimeMillis())); - return tbConsInfoMapper.toDto(tbConsInfoRepository.save(resources)); + return tbConsInfoMapper.toDto(new TbConsInfo()); } @Override @Transactional(rollbackFor = Exception.class) - public void update(TbConsInfo resources) throws Exception { - TbConsInfo tbConsInfo = tbConsInfoRepository.findById(resources.getId()).orElseGet(TbConsInfo::new); + public void update(List resources) throws Exception { + for (TbConsInfo resource : resources) { + TbConsInfo tbConsInfo = tbConsInfoRepository.findById(resource.getId()).orElseGet(TbConsInfo::new); - if (Objects.isNull(tbConsInfo)) { - throw new Exception("耗材信息不存在"); + if (Objects.isNull(tbConsInfo)) { + throw new Exception("耗材信息不存在"); + } + + tbConsInfo.setConName(resource.getConName()); + tbConsInfo.setPrice(resource.getPrice()); + tbConsInfo.setConUnit(resource.getConUnit()); + tbConsInfo.setConWarning(resource.getConWarning()); + tbConsInfo.setStatus(resource.getStatus()); + tbConsInfo.setUpdateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoRepository.save(tbConsInfo); } - - tbConsInfo.setConCode(resources.getConCode()); - tbConsInfo.setConName(resources.getConName()); - tbConsInfo.setPrice(resources.getPrice()); - tbConsInfo.setConUnit(resources.getConUnit()); - tbConsInfo.setConWarning(resources.getConWarning()); - tbConsInfo.setStatus(resources.getStatus()); - tbConsInfo.setUpdateTime(new Timestamp(System.currentTimeMillis())); - tbConsInfoRepository.save(tbConsInfo); } @Override @@ -140,17 +159,13 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { List> list = new ArrayList<>(); for (TbConsInfoDto tbConsInfo : all) { Map map = new LinkedHashMap<>(); - map.put("耗材类型id", tbConsInfo.getConTypeId()); - map.put("耗材类型名称", tbConsInfo.getConTypeName()); map.put("耗材代码", tbConsInfo.getConCode()); map.put("耗材名称", tbConsInfo.getConName()); - map.put("库存值", tbConsInfo.getStockNumber()); - map.put("单位值", tbConsInfo.getConUnit()); - map.put("最近一次入库量", tbConsInfo.getLasterInStock()); - map.put("创建时间", tbConsInfo.getCreateTime()); - map.put("耗材预警值", tbConsInfo.getConWarning()); - map.put("更新时间", tbConsInfo.getUpdateTime()); - map.put("店铺id", tbConsInfo.getShopId()); + map.put("耗材类型代码", tbConsInfo.getContypeCode()); + map.put("单位", tbConsInfo.getConUnit()); + map.put("价格",tbConsInfo.getPrice()); + map.put("耗材预警值",tbConsInfo.getConWarning()); + map.put("库存",tbConsInfo.getStockNumber().subtract(tbConsInfo.getStockConsume())); list.add(map); } FileUtil.downloadExcel(list, response); @@ -255,6 +270,7 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { purveyorTransact.setPaidAmount(resources.getActualPayment()); purveyorTransact.setWaitAmount((resources.getAccountsPayable().subtract(resources.getActualPayment())).negate()); purveyorTransact.setType("cons_out"); + object.put("number",conInfos.getStockNumber()); } @@ -302,8 +318,177 @@ public class TbConsInfoServiceImpl implements TbConsInfoService { stockOperate.setBatchNumber(""); stockOperate.setStockSnap(array.toJSONString()); tbProductStockOperateRepository.save(stockOperate); + } + @Override + @Transactional + public void inputStock(String shopId, MultipartFile file) throws Exception { + + + //根据路径获取这个操作excel的实例 + XSSFWorkbook xssfWorkbook = new XSSFWorkbook(file.getInputStream()); + //根据页面index 获取sheet页 + XSSFSheet sheet = xssfWorkbook.getSheetAt(0); + XSSFRow row = null; + + List consInfos=new ArrayList<>(); + for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) { + row = sheet.getRow(i); + if (row != null) { + XSSFCell cell0 = row.getCell(0); + XSSFCell cell1 = row.getCell(1); + if (ObjectUtil.isEmpty(cell1)) { + log.info("耗材名称为空:{}", cell1); + continue; + } + + + XSSFCell cell2 = row.getCell(2); + + if (ObjectUtil.isEmpty(cell2)) { + log.info("耗材类型为空:{}", cell2); + continue; + } + + + XSSFCell cell3 = row.getCell(3); + + if (ObjectUtil.isEmpty(cell3)) { + log.info("耗材单位为空:{}", cell3); + continue; + } + + + XSSFCell cell4 = row.getCell(4); + + if (ObjectUtil.isEmpty(cell4)) { + log.info("耗材价格为空:{}", cell4); + continue; + } + + + XSSFCell cell5 = row.getCell(5); + + if (ObjectUtil.isEmpty(cell5)) { + log.info("耗材预警值为空:{}", cell5); + continue; + } + + + XSSFCell cell6 = row.getCell(6); + + if (ObjectUtil.isEmpty(cell6)) { + log.info("耗材库存为空:{}", cell6); + continue; + } + + + TbConsType tbConsType = tbConsTypeRepository.findByConTypeCode(cell2.toString()); + if (Objects.isNull(tbConsType)) { + log.info("不存在的耗材类型:{}", cell2.toString()); + continue; + } + + + if (ObjectUtil.isNotEmpty(cell0)) { + + TbConsInfo consInfo = tbConsInfoRepository.findByConCode(cell0.toString()); + if (ObjectUtil.isEmpty(consInfo) || ObjectUtil.isNull(consInfo)) { + consInfo = new TbConsInfo(); + consInfo.setConCode(StringCodeUtil.getRandom(8,LETTER_CAPITAL_NUMBER)); + consInfo.setShopId(Integer.valueOf(shopId)); + consInfo.setConTypeId(tbConsType.getId()); + consInfo.setConTypeName(tbConsType.getConTypeName()); + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setStatus("1"); + consInfo.setConUnit(cell3.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + + + } else { + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setConUnit(cell3.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setUpdateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + } + } else { + TbConsInfo consInfo = new TbConsInfo(); + consInfo.setConCode(StringCodeUtil.getRandom(8,LETTER_CAPITAL_NUMBER)); + consInfo.setShopId(Integer.valueOf(shopId)); + consInfo.setConTypeId(tbConsType.getId()); + consInfo.setConTypeName(tbConsType.getConTypeName()); + consInfo.setConName(cell1.toString()); + consInfo.setPrice(new BigDecimal(cell4.toString())); + consInfo.setStockNumber(new BigDecimal(cell6.toString())); + consInfo.setStockConsume(BigDecimal.ZERO); + consInfo.setStatus("1"); + consInfo.setConUnit(cell3.toString()); + consInfo.setLasterInStock(consInfo.getStockNumber()); + consInfo.setConWarning(new BigDecimal(cell5.toString())); + consInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); + consInfo = tbConsInfoRepository.save(consInfo); + + + TbConsInfoFlow flow = new TbConsInfoFlow(); + flow.setBizCode("stockOtherIn"); + flow.setBizName("导入库存"); + flow.setBizType("+"); + flow.setConsId(consInfo.getId()); + flow.setShopId(consInfo.getShopId()); + flow.setConName(consInfo.getConName()); + flow.setAmount(consInfo.getStockNumber()); + flow.setBalance(consInfo.getStockNumber()); + + flow.setCreateTime(new Timestamp(System.currentTimeMillis())); + tbConsInfoFlowRepository.save(flow); + + } + } + + } } -} \ No newline at end of file + public static void main(String[] args){ + System.out.println(UUID.randomUUID().toString()); + } + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsTypeServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsTypeServiceImpl.java index fb789d33..821c93ff 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsTypeServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbConsTypeServiceImpl.java @@ -1,10 +1,9 @@ package cn.ysk.cashier.cons.service.impl; +import cn.ysk.cashier.cons.domain.TbConsInfo; import cn.ysk.cashier.cons.domain.TbConsType; -import cn.ysk.cashier.utils.FileUtil; -import cn.ysk.cashier.utils.PageUtil; -import cn.ysk.cashier.utils.QueryHelp; -import cn.ysk.cashier.utils.ValidationUtil; +import cn.ysk.cashier.cons.repository.TbConsInfoRepository; +import cn.ysk.cashier.utils.*; import lombok.RequiredArgsConstructor; import cn.ysk.cashier.cons.repository.TbConsTypeRepository; import cn.ysk.cashier.cons.service.TbConsTypeService; @@ -15,12 +14,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import java.util.List; -import java.util.Map; + +import java.util.*; import java.io.IOException; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.LinkedHashMap; + +import static cn.ysk.cashier.utils.StringCodeUtil.TYPE.LETTER_CAPITAL_NUMBER; /** * @website https://eladmin.vip @@ -35,10 +34,22 @@ public class TbConsTypeServiceImpl implements TbConsTypeService { private final TbConsTypeRepository tbConsTypeRepository; private final TbConsTypeMapper tbConsTypeMapper; + private final TbConsInfoRepository tbConsInfoRepository; + @Override public Map queryAll(TbConsTypeQueryCriteria criteria, Pageable pageable){ - Page page = tbConsTypeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); - return PageUtil.toPage(page.map(tbConsTypeMapper::toDto)); + Page page = tbConsTypeRepository + .findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + + for (TbConsType tbConsType : page.getContent()) { + tbConsType.setProductNum(tbConsTypeRepository.countProByTypeId(tbConsType.getId())); + } + + Map map = new LinkedHashMap<>(2); + map.put("content",page.getContent()); + map.put("totalElements",page.getTotalElements()); + + return map; } @Override @@ -59,11 +70,7 @@ public class TbConsTypeServiceImpl implements TbConsTypeService { public TbConsTypeDto create(TbConsType resources) throws Exception { - int count= tbConsTypeRepository.countByConTypeCode(resources.getConTypeCode()); - if(count>0){ - throw new Exception("耗材类型代码不允许重复"); - } - + resources.setConTypeCode(StringCodeUtil.getRandom(8,LETTER_CAPITAL_NUMBER)); return tbConsTypeMapper.toDto(tbConsTypeRepository.save(resources)); } @@ -74,6 +81,16 @@ public class TbConsTypeServiceImpl implements TbConsTypeService { ValidationUtil.isNull( tbConsType.getId(),"TbConsType","id",resources.getId()); tbConsType.copy(resources); tbConsTypeRepository.save(tbConsType); + + List tbConsInfos=tbConsInfoRepository.findByConTypeId(tbConsType.getId()); + if(Objects.nonNull(tbConsInfos)){ + tbConsInfos.stream().forEach(it->{ + it.setConTypeName(resources.getConTypeName()); + }); + } + + tbConsInfoRepository.saveAll(tbConsInfos); + } @Override @@ -98,4 +115,4 @@ public class TbConsTypeServiceImpl implements TbConsTypeService { } FileUtil.downloadExcel(list, response); } -} \ No newline at end of file +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbHandoverServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbHandoverServiceImpl.java new file mode 100644 index 00000000..26fb13b8 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbHandoverServiceImpl.java @@ -0,0 +1,132 @@ +package cn.ysk.cashier.cons.service.impl; + +import cn.ysk.cashier.cons.domain.TbHandover; +import cn.ysk.cashier.utils.FileUtil; +import cn.ysk.cashier.utils.PageUtil; +import cn.ysk.cashier.utils.QueryHelp; +import cn.ysk.cashier.utils.ValidationUtil; +import lombok.RequiredArgsConstructor; +import cn.ysk.cashier.cons.repository.TbHandoverRepository; +import cn.ysk.cashier.cons.service.TbHandoverService; +import cn.ysk.cashier.cons.service.dto.TbHandoverDto; +import cn.ysk.cashier.cons.service.dto.TbHandoverQueryCriteria; +import cn.ysk.cashier.cons.service.mapstruct.TbHandoverMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; + +/** +* @website https://eladmin.vip +* @description 服务实现 +* @author admin +* @date 2024-07-25 +**/ +@Service +@RequiredArgsConstructor +public class TbHandoverServiceImpl implements TbHandoverService { + + private final TbHandoverRepository tbHandoverRepository; + private final TbHandoverMapper tbHandoverMapper; + + @Override + public Map queryAll(TbHandoverQueryCriteria criteria, Pageable pageable){ + Page page = tbHandoverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(tbHandoverMapper::toDto)); + } + + @Override + public List queryAll(TbHandoverQueryCriteria criteria){ + return tbHandoverMapper.toDto(tbHandoverRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + + @Override + @Transactional + public TbHandoverDto findById(Integer id) { + TbHandover tbHandover = tbHandoverRepository.findById(id).orElseGet(TbHandover::new); + ValidationUtil.isNull(tbHandover.getId(),"TbHandover","id",id); + return tbHandoverMapper.toDto(tbHandover); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public TbHandoverDto create(TbHandover resources) { + return tbHandoverMapper.toDto(tbHandoverRepository.save(resources)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(TbHandover resources) { + TbHandover tbHandover = tbHandoverRepository.findById(resources.getId()).orElseGet(TbHandover::new); + ValidationUtil.isNull( tbHandover.getId(),"TbHandover","id",resources.getId()); + tbHandover.copy(resources); + tbHandoverRepository.save(tbHandover); + } + + @Override + public void deleteAll(Integer[] ids) { + for (Integer id : ids) { + tbHandoverRepository.deleteById(id); + } + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (TbHandoverDto tbHandover : all) { + Map map = new LinkedHashMap<>(); + map.put("交班日期", tbHandover.getTradeDay()); + map.put("打印机编号", tbHandover.getPrintNo()); + map.put(" dutyId", tbHandover.getDutyId()); + map.put(" shopId", tbHandover.getShopId()); + map.put(" merchantName", tbHandover.getMerchantName()); + map.put(" startTime", tbHandover.getStartTime()); + map.put(" endTime", tbHandover.getEndTime()); + map.put(" staffId", tbHandover.getStaffId()); + map.put(" staffName", tbHandover.getStaffName()); + map.put(" payInfos", tbHandover.getPayInfos()); + map.put(" memberData", tbHandover.getMemberData()); + map.put(" productCategories", tbHandover.getProductCategories()); + map.put(" totalAmount", tbHandover.getTotalAmount()); + map.put(" imprest", tbHandover.getImprest()); + map.put(" payable", tbHandover.getPayable()); + map.put(" handIn", tbHandover.getHandIn()); + map.put(" returnAmount", tbHandover.getReturnAmount()); + map.put("交班日期", tbHandover.getTradeDay()); + map.put(" orderNum", tbHandover.getOrderNum()); + map.put("打印机编号", tbHandover.getPrintNo()); + map.put(" quickAmount", tbHandover.getQuickAmount()); + map.put(" dutyId", tbHandover.getDutyId()); + map.put(" productInfoPos", tbHandover.getProductInfoPos()); + map.put(" shopId", tbHandover.getShopId()); + map.put(" productInfos", tbHandover.getProductInfos()); + map.put(" merchantName", tbHandover.getMerchantName()); + map.put(" createTime", tbHandover.getCreateTime()); + map.put(" startTime", tbHandover.getStartTime()); + map.put(" endTime", tbHandover.getEndTime()); + map.put(" staffId", tbHandover.getStaffId()); + map.put(" staffName", tbHandover.getStaffName()); + map.put(" payInfos", tbHandover.getPayInfos()); + map.put(" memberData", tbHandover.getMemberData()); + map.put(" productCategories", tbHandover.getProductCategories()); + map.put(" totalAmount", tbHandover.getTotalAmount()); + map.put(" imprest", tbHandover.getImprest()); + map.put(" payable", tbHandover.getPayable()); + map.put(" handIn", tbHandover.getHandIn()); + map.put(" returnAmount", tbHandover.getReturnAmount()); + map.put(" orderNum", tbHandover.getOrderNum()); + map.put(" quickAmount", tbHandover.getQuickAmount()); + map.put(" productInfoPos", tbHandover.getProductInfoPos()); + map.put(" productInfos", tbHandover.getProductInfos()); + map.put(" createTime", tbHandover.getCreateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java index 91d58937..8d8815af 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/TbProskuConServiceImpl.java @@ -6,20 +6,19 @@ import cn.ysk.cashier.cons.domain.TbConsSuppFlow; import cn.ysk.cashier.cons.domain.TbProskuCon; import cn.ysk.cashier.cons.repository.TbConsInfoRepository; import cn.ysk.cashier.cons.service.dto.ProskuInfo; +import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.pojo.product.TbProduct; import cn.ysk.cashier.pojo.product.TbProductSku; import cn.ysk.cashier.repository.product.TbProductRepository; import cn.ysk.cashier.repository.product.TbProductSkuRepository; -import cn.ysk.cashier.utils.FileUtil; -import cn.ysk.cashier.utils.PageUtil; -import cn.ysk.cashier.utils.QueryHelp; -import cn.ysk.cashier.utils.ValidationUtil; +import cn.ysk.cashier.utils.*; import lombok.RequiredArgsConstructor; import cn.ysk.cashier.cons.repository.TbProskuConRepository; import cn.ysk.cashier.cons.service.TbProskuConService; import cn.ysk.cashier.cons.service.dto.TbProskuConDto; import cn.ysk.cashier.cons.service.dto.TbProskuConQueryCriteria; import cn.ysk.cashier.cons.service.mapstruct.TbProskuConMapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; @@ -38,6 +37,7 @@ import javax.servlet.http.HttpServletResponse; **/ @Service @RequiredArgsConstructor +@Slf4j public class TbProskuConServiceImpl implements TbProskuConService { private final TbProskuConRepository tbProskuConRepository; @@ -70,65 +70,85 @@ public class TbProskuConServiceImpl implements TbProskuConService { @Override @Transactional(rollbackFor = Exception.class) - public TbProskuConDto create(ProskuInfo resources) throws Exception { + public TbProskuConDto create(List resources) throws BadRequestException,Exception { + for (ProskuInfo resource : resources) { + TbProduct product= tbProductRepository.getById(resource.getProductId()); + if(Objects.isNull(product)){ + throw new BadRequestException("对应的商品信息不存在"); + } + List list=new ArrayList<>(); + if(product.getIsDistribute().intValue()==1){ - TbProduct product= tbProductRepository.getById(resources.getProductId()); - if(Objects.isNull(product)){ - throw new Exception("对应的商品信息不存在"); - } + TbConsInfo tbConsInfo= tbConsInfoRepository.findById(resource.getConsInfoId()).orElseGet(TbConsInfo::new); - TbConsInfo tbConsInfo= tbConsInfoRepository.getById(resources.getConsInfoId()); - if(Objects.isNull(tbConsInfo)){ - throw new Exception("对应的耗材信息不存在"); - } + log.info("product.getIsDistribute().intValue():{}", JSONUtil.toJSONString(tbConsInfo)); + if(ObjectUtil.isNull(tbConsInfo)||ObjectUtil.isNull(tbConsInfo.getId())){ + throw new BadRequestException("对应的耗材信息不存在"); + } - List list=new ArrayList<>(); - if(product.getIsDistribute().intValue()==1){ - //查询商品对应的所有规格 - List skuList= tbProductSkuRepository.searchSku(product.getId().toString()); - if(Objects.nonNull(skuList)&&skuList.size()>0){ - for (TbProductSku tbProductSku : skuList) { - int count=tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resources.getConsInfoId(), tbProductSku.getId(), Integer.valueOf(tbProductSku.getShopId()), Integer.valueOf(tbProductSku.getProductId())); + //查询商品对应的所有规格 + List skuList= tbProductSkuRepository.searchSku(product.getId().toString()); + if(Objects.nonNull(skuList)&&skuList.size()>0){ + for (TbProductSku tbProductSku : skuList) { + int count=tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resource.getConsInfoId(), tbProductSku.getId(), Integer.valueOf(tbProductSku.getShopId()), Integer.valueOf(tbProductSku.getProductId())); + if(count<=0){ + TbProskuCon tbProskuCon=new TbProskuCon(); + + tbProskuCon.setShopId(Integer.valueOf(tbProductSku.getShopId())); + tbProskuCon.setConInfoId(tbConsInfo.getId()); + tbProskuCon.setProductId(Integer.valueOf(tbProductSku.getProductId())); + tbProskuCon.setProductSkuId(tbProductSku.getId()); + tbProskuCon.setSurplusStock(resource.getSurplusStock()); + tbProskuCon.setStatus("1"); + tbProskuCon.setCreateTime(new Timestamp(System.currentTimeMillis())); + list.add(tbProskuCon); + }else { + throw new BadRequestException(product.getName().concat("对应的耗材信息已存在")); + } + } + } + + }else { + for (ProskuInfo.SkuInfo skuInfo : resource.getSkuInfos()) { + + + TbConsInfo tbConsInfo= tbConsInfoRepository.findById(skuInfo.getConInfoId()).orElseGet(TbConsInfo::new); + + log.info("skuInfo:{}", JSONUtil.toJSONString(tbConsInfo)); + + if(ObjectUtil.isNull(tbConsInfo)||ObjectUtil.isNull(tbConsInfo.getId())){ + throw new BadRequestException("对应的耗材信息不存在"); + } + + TbProductSku tbProductSku= tbProductSkuRepository.findById(skuInfo.getSkuId()).orElseGet(TbProductSku::new); + if(ObjectUtil.isNull(tbProductSku)||ObjectUtil.isNull(tbProductSku.getId())){ + throw new BadRequestException("规格信息不存在"); + } + + int count=tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resource.getConsInfoId(), skuInfo.getSkuId(), skuInfo.getShopId(), resource.getProductId()); if(count<=0){ TbProskuCon tbProskuCon=new TbProskuCon(); - - tbProskuCon.setShopId(Integer.valueOf(tbProductSku.getShopId())); - tbProskuCon.setConInfoId(resources.getConsInfoId()); - tbProskuCon.setProductId(Integer.valueOf(tbProductSku.getProductId())); - tbProskuCon.setProductSkuId(tbProductSku.getId()); - tbProskuCon.setSurplusStock(resources.getSurplusStock()); + tbProskuCon.setShopId(Integer.valueOf(skuInfo.getShopId())); + tbProskuCon.setConInfoId(tbConsInfo.getId()); + tbProskuCon.setProductId(resource.getProductId()); + tbProskuCon.setProductSkuId(skuInfo.getSkuId()); + tbProskuCon.setSurplusStock(skuInfo.getSurplusStock()); tbProskuCon.setStatus("1"); tbProskuCon.setCreateTime(new Timestamp(System.currentTimeMillis())); list.add(tbProskuCon); }else { - throw new Exception(product.getName().concat("对应的耗材信息已存在")); + TbProductSku sku= tbProductSkuRepository.getById(skuInfo.getSkuId()); + throw new BadRequestException(product.getName().concat("商品对应的").concat(Objects.nonNull(sku.getSpecSnap())?sku.getSpecSnap():"").concat("规格已存在")); } } - } - }else { - for (ProskuInfo.SkuInfo skuInfo : resources.getSkuInfos()) { - int count=tbProskuConRepository.countByConInfoIdAndProductSkuIdAndShopId(resources.getConsInfoId(), skuInfo.getSkuId(), skuInfo.getShopId(), resources.getProductId()); - if(count<=0){ - TbProskuCon tbProskuCon=new TbProskuCon(); - tbProskuCon.setShopId(Integer.valueOf(skuInfo.getShopId())); - tbProskuCon.setConInfoId(skuInfo.getConInfoId()); - tbProskuCon.setProductId(resources.getProductId()); - tbProskuCon.setProductSkuId(skuInfo.getSkuId()); - tbProskuCon.setSurplusStock(skuInfo.getSurplusStock()); - tbProskuCon.setStatus("1"); - tbProskuCon.setCreateTime(new Timestamp(System.currentTimeMillis())); - list.add(tbProskuCon); - }else { - TbProductSku sku= tbProductSkuRepository.getById(skuInfo.getSkuId()); - throw new Exception(product.getName().concat("商品对应的").concat(Objects.nonNull(sku.getSpecSnap())?sku.getSpecSnap():"").concat("规格已存在")); - } } + if(Objects.nonNull(list)&&list.size()>0){ + tbProskuConRepository.saveAll(list); + } + } + - } - if(Objects.nonNull(list)&&list.size()>0){ - tbProskuConRepository.saveAll(list); - } return new TbProskuConDto(); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/ViewConInfoFlowServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/ViewConInfoFlowServiceImpl.java new file mode 100644 index 00000000..6f335b0c --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/impl/ViewConInfoFlowServiceImpl.java @@ -0,0 +1,94 @@ +package cn.ysk.cashier.cons.service.impl; + +import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +import cn.ysk.cashier.utils.FileUtil; +import cn.ysk.cashier.utils.PageUtil; +import cn.ysk.cashier.utils.QueryHelp; +import cn.ysk.cashier.utils.ValidationUtil; +import lombok.RequiredArgsConstructor; +import cn.ysk.cashier.cons.repository.ViewConInfoFlowRepository; +import cn.ysk.cashier.cons.service.ViewConInfoFlowService; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowDto; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowQueryCriteria; +import cn.ysk.cashier.cons.service.mapstruct.ViewConInfoFlowMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; + +/** +* @website https://eladmin.vip +* @description 服务实现 +* @author admin +* @date 2024-07-17 +**/ +@Service +@RequiredArgsConstructor +public class ViewConInfoFlowServiceImpl implements ViewConInfoFlowService { + + private final ViewConInfoFlowRepository viewConInfoFlowRepository; + private final ViewConInfoFlowMapper viewConInfoFlowMapper; + + @Override + public Map queryAll(ViewConInfoFlowQueryCriteria criteria, Pageable pageable){ + Page page = viewConInfoFlowRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(viewConInfoFlowMapper::toDto)); + } + + @Override + public List queryAll(ViewConInfoFlowQueryCriteria criteria){ + return viewConInfoFlowMapper.toDto(viewConInfoFlowRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + + @Override + @Transactional + public ViewConInfoFlowDto findById(Integer consId) { + ViewConInfoFlow viewConInfoFlow = viewConInfoFlowRepository.findById(consId).orElseGet(ViewConInfoFlow::new); + ValidationUtil.isNull(viewConInfoFlow.getConsId(),"ViewConInfoFlow","consId",consId); + return viewConInfoFlowMapper.toDto(viewConInfoFlow); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ViewConInfoFlowDto create(ViewConInfoFlow resources) { + return viewConInfoFlowMapper.toDto(viewConInfoFlowRepository.save(resources)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ViewConInfoFlow resources) { + ViewConInfoFlow viewConInfoFlow = viewConInfoFlowRepository.findById(resources.getConsId()).orElseGet(ViewConInfoFlow::new); + ValidationUtil.isNull( viewConInfoFlow.getConsId(),"ViewConInfoFlow","id",resources.getConsId()); + viewConInfoFlow.copy(resources); + viewConInfoFlowRepository.save(viewConInfoFlow); + } + + @Override + public void deleteAll(Integer[] ids) { + for (Integer consId : ids) { + viewConInfoFlowRepository.deleteById(consId); + } + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (ViewConInfoFlowDto viewConInfoFlow : all) { + Map map = new LinkedHashMap<>(); + map.put("耗材名称", viewConInfoFlow.getConName()); + map.put(" conreturn", viewConInfoFlow.getConReturn()); + map.put(" conin", viewConInfoFlow.getConIn()); + map.put(" conconsume", viewConInfoFlow.getConConsume()); + map.put(" conout", viewConInfoFlow.getConOut()); + map.put(" balance", viewConInfoFlow.getBalance()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbConUnitMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbConUnitMapper.java new file mode 100644 index 00000000..915e25e3 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbConUnitMapper.java @@ -0,0 +1,16 @@ +package cn.ysk.cashier.cons.service.mapstruct; + +import cn.ysk.cashier.base.BaseMapper; +import cn.ysk.cashier.cons.domain.TbConUnit; +import cn.ysk.cashier.cons.service.dto.TbConUnitDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author admin +* @date 2024-07-12 +**/ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface TbConUnitMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbHandoverMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbHandoverMapper.java new file mode 100644 index 00000000..1e9badd9 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/TbHandoverMapper.java @@ -0,0 +1,16 @@ +package cn.ysk.cashier.cons.service.mapstruct; + +import cn.ysk.cashier.base.BaseMapper; +import cn.ysk.cashier.cons.domain.TbHandover; +import cn.ysk.cashier.cons.service.dto.TbHandoverDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author admin +* @date 2024-07-25 +**/ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface TbHandoverMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/ViewConInfoFlowMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/ViewConInfoFlowMapper.java new file mode 100644 index 00000000..92c1dc35 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/service/mapstruct/ViewConInfoFlowMapper.java @@ -0,0 +1,16 @@ +package cn.ysk.cashier.cons.service.mapstruct; + +import cn.ysk.cashier.base.BaseMapper; +import cn.ysk.cashier.cons.domain.ViewConInfoFlow; +import cn.ysk.cashier.cons.service.dto.ViewConInfoFlowDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author admin +* @date 2024-07-17 +**/ +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface ViewConInfoFlowMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java index 2e06cb39..9fbe1b22 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java @@ -16,18 +16,31 @@ package cn.ysk.cashier.controller; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.pojo.TbUserInfo; +import cn.ysk.cashier.pojo.shop.TbMerchantAccount; +import cn.ysk.cashier.repository.TbUserInfoRepository; +import cn.ysk.cashier.repository.shop.TbMerchantAccountRepository; import cn.ysk.cashier.service.TbUserInfoService; import cn.ysk.cashier.dto.TbUserInfoQueryCriteria; +import cn.ysk.cashier.utils.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.Map; +import java.util.Objects; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** @@ -75,4 +88,98 @@ public class TbUserInfoController { tbUserInfoService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + @Autowired + ValidateCodeUtil validateCodeUtil; + + @Autowired + RedisUtils redisUtils; + + @GetMapping("sendMsg") + public Object sendMsg(){ + Object o= SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if(Objects.isNull(o)){ + throw new BadRequestException("用户登录信息失效"); + } + JSONObject object=JSON.parseObject(JSON.toJSONString(o)); + if(Objects.isNull(object)){ + throw new BadRequestException("用户登录信息失效"); + } + String regex="^\\d{11}$"; + + if(!object.containsKey("username")||Objects.isNull(object.getString("username"))|| + !object.getString("username").matches(regex) + ){ + throw new BadRequestException("用户登录信息失效"); + } + String phone=object.getString("username"); + + String tempcode="SMS_244665149"; + + String random = StringUtil.random(6); + try { + validateCodeUtil.requestValidateCodeAli(phone, random,tempcode); + redisUtils.set(phone.concat("#").concat(tempcode),random,300L); + return "{\n" + + " \"code\": 0,\n" + + " \"msg\": \"成功\"\n" + + "}"; + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + + } + + + @Autowired + TbMerchantAccountRepository tbMerchantAccountRepository; + + + @RequestMapping(value = "modfiyUserInfo",method = RequestMethod.POST) + public ResponseEntity modfiyUserInfo(@RequestBody Map map){ + Object o= SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if(Objects.isNull(o)){ + throw new BadRequestException("用户登录信息失效"); + } + JSONObject object=JSON.parseObject(JSON.toJSONString(o)); + if(Objects.isNull(object)){ + throw new BadRequestException("用户登录信息失效"); + } + String regex="^\\d{11}$"; + + if(!object.containsKey("username")||Objects.isNull(object.getString("username"))|| + !object.getString("username").matches(regex) + ){ + throw new BadRequestException("用户登录信息失效"); + } + + String tempcode="SMS_244665149"; + String phone=object.getString("username"); + Object redisCode= redisUtils.get(phone.concat("#").concat(tempcode)); + if(Objects.isNull(redisCode)){ + throw new BadRequestException("短信验证码已过期"); + } + + + String code= map.get("code"); + + if(!redisCode.toString().equals(code)){ + throw new BadRequestException("短信验证码错误"); + } + redisUtils.del(phone.concat("#").concat(tempcode)); + String pwd= map.get("pwd"); + + TbMerchantAccount account= tbMerchantAccountRepository.findByAccount(phone); + if(Objects.isNull(account)){ + throw new BadRequestException("账户不存在"); + } + + account.setPwd(MD5Utils.md5(pwd.concat(account.getAccount()).concat(account.getId().toString()))); + account.setUpdatedAt(System.currentTimeMillis()); + tbMerchantAccountRepository.save(account); + + + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java index f8cbe8fe..8c37a261 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbOrderInfoController.java @@ -1,21 +1,8 @@ -/* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + package cn.ysk.cashier.controller.order; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; import cn.ysk.cashier.dto.order.TbOrderInfoDto; import cn.ysk.cashier.dto.order.TbOrderInfoQueryCriteria; import cn.ysk.cashier.dto.order.TbPayCountQueryCriteria; @@ -55,6 +42,7 @@ public class TbOrderInfoController { @PostMapping("/date") @ApiOperation("查询订单") + @AnonymousPostMapping public ResponseEntity queryTbOrderInfo(@RequestBody TbOrderInfoQueryCriteria criteria){ return new ResponseEntity<>(tbOrderInfoService.queryAllPage(criteria),HttpStatus.OK); } @@ -90,4 +78,4 @@ public class TbOrderInfoController { // tbOrderInfoService.deleteAll(ids); // return new ResponseEntity<>(HttpStatus.OK); // } -} \ No newline at end of file +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbShopSongOrderController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbShopSongOrderController.java new file mode 100644 index 00000000..f01c4eaf --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/order/TbShopSongOrderController.java @@ -0,0 +1,97 @@ +package cn.ysk.cashier.controller.order; + +import cn.ysk.cashier.annotation.rest.AnonymousGetMapping; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; +import cn.ysk.cashier.dto.shop.TbShopSongOrderQueryCriteria; +import cn.ysk.cashier.exception.BadRequestException; +import cn.ysk.cashier.utils.CacheKey; +import cn.ysk.cashier.utils.RedisUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import cn.ysk.cashier.mybatis.entity.TbShopSongOrder; +import cn.ysk.cashier.mybatis.service.TbShopSongOrderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * (TbShopSongOrder)表控制层 + * + * @author ww + * @since 2024-07-08 09:24:23 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "歌曲订单管理") +@RequestMapping("/api/tbShopSongOrder") +public class TbShopSongOrderController{ + private final RedisUtils redisUtils; + /** + * 服务对象 + */ + @Resource + private TbShopSongOrderService tbShopSongOrderService; + + /** + * 分页查询所有数据 + * @param tbShopSongOrder 查询实体 + * @return 所有数据 + */ + @GetMapping + @ApiOperation("获取歌曲列表 分页") + @AnonymousGetMapping + public ResponseEntity selectAll(TbShopSongOrderQueryCriteria tbShopSongOrder) { + return new ResponseEntity<>(tbShopSongOrderService.queryAll(tbShopSongOrder), HttpStatus.OK); + } + + /** + * 通过主键查询单条数据 + * + * @param id 主键 + * @return 单条数据 + */ + @GetMapping("{id}") + @ApiOperation("订单详情") + public ResponseEntity selectOne(@PathVariable Serializable id) { + return new ResponseEntity<>(tbShopSongOrderService.getById(id),HttpStatus.OK); + } + + /** + * 歌手页 歌曲列表 + * @param key 有效key + * @return 所有数据 + */ + @GetMapping("songs") + @AnonymousGetMapping + public ResponseEntity singerSongs(String key) { + String shopId=""; + if (redisUtils.hasKey(CacheKey.SONG_URL + key)) { + shopId = (String)redisUtils.get(CacheKey.SONG_URL + key); + }else { + throw new BadRequestException("地址已失效,请重新获取地址。"); + } + return new ResponseEntity<>(tbShopSongOrderService.singerSongs(Integer.valueOf(shopId)), HttpStatus.OK); + } + + /** + * 下一首 + * @param shopId 店铺Id + */ + @PostMapping("next") + @AnonymousPostMapping + public ResponseEntity next(@RequestBody Integer shopId) { + tbShopSongOrderService.next(shopId); + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/StockController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/StockController.java index 538e4b44..dbf8901f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/StockController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/StockController.java @@ -1,6 +1,7 @@ package cn.ysk.cashier.controller.product; import cn.hutool.core.util.StrUtil; +import cn.ysk.cashier.annotation.AnonymousAccess; import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; import cn.ysk.cashier.dto.product.StockQueryDto; @@ -106,11 +107,24 @@ public class StockController { if (stockV2Vos.getContent().isEmpty()) { dataMap.put("warnLine", 0); }else { - dataMap.put("warnLine", stockV2Vos.getContent().get(0).getWarnLine()); + StockV2Vo stockV2Vo = stockV2Vos.getContent().stream().filter(item -> item.getWarnLine() != null).findFirst().orElse(null); + dataMap.put("warnLine", stockV2Vo != null ? stockV2Vo.getWarnLine() : 0); } return new ResponseEntity<>(dataMap, HttpStatus.OK); } + @AnonymousAccess + @PutMapping("/grounding") + @ApiOperation("上下架商品") + public ResponseEntity grounding( + @RequestParam Integer shopId, + @RequestParam Integer skuId, + @RequestParam Boolean isGrounding + ){ + stockService.grounding(shopId,skuId, isGrounding); + return ResponseEntity.ok("success"); + } + @GetMapping("/sku") @ApiOperation("查询库存") public ResponseEntity queryProductSku(String productId){ diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java index 7be97e0c..5e78001a 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductController.java @@ -1,6 +1,5 @@ package cn.ysk.cashier.controller.product; -import cn.ysk.cashier.annotation.AnonymousAccess; import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.dto.product.TbProductSortCriteria; import cn.ysk.cashier.vo.TbProductVo; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductStockDetailController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductStockDetailController.java index 7bd4110e..e9774b71 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductStockDetailController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/product/TbProductStockDetailController.java @@ -15,6 +15,7 @@ */ package cn.ysk.cashier.controller.product; +import cn.ysk.cashier.annotation.AnonymousAccess; import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.pojo.product.TbProductStockDetail; import cn.ysk.cashier.service.product.TbProductStockDetailService; @@ -91,4 +92,4 @@ public class TbProductStockDetailController { tbProductStockDetailService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } -} \ No newline at end of file +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java index b1110f52..1ec74bb4 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java @@ -1,7 +1,5 @@ package cn.ysk.cashier.controller.shop; -import cn.ysk.cashier.annotation.AnonymousAccess; -import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.dto.ShopSummaryDto; import cn.ysk.cashier.service.SummaryService; import cn.ysk.cashier.vo.TbOrderPayCountVo; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbPlussShopStaffController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbPlussShopStaffController.java index ec8dd15f..6607c755 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbPlussShopStaffController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbPlussShopStaffController.java @@ -76,6 +76,14 @@ public class TbPlussShopStaffController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @PutMapping("updateStatus") + @Log("修改员工状态:#resources.name") + @ApiOperation("修改/shop/shopStaff") + public ResponseEntity updateStatus(@Validated @RequestBody TbPlussShopStaff resources){ + tbPlussShopStaffService.updateStatus(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @DeleteMapping @Log("删除员工:#ids") @ApiOperation("删除/shop/shopStaff") diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java new file mode 100644 index 00000000..2a1f6172 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopExtendController.java @@ -0,0 +1,75 @@ +package cn.ysk.cashier.controller.shop; + + +import cn.ysk.cashier.annotation.rest.AnonymousDeleteMapping; +import cn.ysk.cashier.annotation.rest.AnonymousGetMapping; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; +import cn.ysk.cashier.annotation.rest.AnonymousPutMapping; +import cn.ysk.cashier.mybatis.entity.TbShopExtend; +import cn.ysk.cashier.mybatis.service.TbShopExtendService; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.ApiOperation; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import cn.ysk.cashier.dto.shop.TbShopExtendQueryCriteria; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 店铺扩展信息(TbShopExtend)表控制层 + * + * @author ww + * @since 2024-07-18 11:10:16 + */ +@RestController +@RequestMapping("tbShopExtend") +public class TbShopExtendController { + /** + * 服务对象 + */ + @Resource + private TbShopExtendService tbShopExtendService; + + @GetMapping + @ApiOperation("分页查询") + @AnonymousGetMapping + public ResponseEntity selectAll(TbShopExtendQueryCriteria criteria) { + return new ResponseEntity<>(tbShopExtendService.queryAll(criteria), HttpStatus.OK); + } + + @GetMapping("{id}") + @ApiOperation("通过Id查询详情") + @AnonymousGetMapping + public TbShopExtend selectOne(@PathVariable Serializable id) { + return tbShopExtendService.getById(id); + } + + @PostMapping + @ApiOperation("新增") + @AnonymousPostMapping + public ResponseEntity insert(@RequestBody TbShopExtend tbShopExtend) { + tbShopExtend.setCreateTime(new Date()); + return new ResponseEntity<>(tbShopExtendService.save(tbShopExtend), HttpStatus.CREATED); + } + + @PutMapping + @ApiOperation("通过id修改") + @AnonymousPutMapping + public ResponseEntity update(@RequestBody TbShopExtend tbShopExtend) { + tbShopExtend.setUpdateTime(new Date()); + tbShopExtendService.updateById(tbShopExtend); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + @ApiOperation("删除") + @AnonymousDeleteMapping + public ResponseEntity delete(@RequestParam("idList") List idList) { + tbShopExtendService.removeByIds(idList); + return new ResponseEntity<>(HttpStatus.OK); + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopSongController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopSongController.java index 1babf030..d5fe5cb0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopSongController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopSongController.java @@ -1,13 +1,17 @@ package cn.ysk.cashier.controller.shop; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; import cn.ysk.cashier.dto.shop.TbShopSongQueryCriteria; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.mybatis.entity.TbShopSong; import cn.ysk.cashier.mybatis.service.TbShopSongService; +import cn.ysk.cashier.utils.CacheKey; +import cn.ysk.cashier.utils.RedisUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; +import java.util.Map; @RestController @@ -23,12 +28,33 @@ import java.util.List; @Api(tags = "歌曲管理") @RequestMapping("/api/tbShopSong") public class TbShopSongController { + private final RedisUtils redisUtils; private final TbShopSongService tbShopSongService; @GetMapping @ApiOperation("查询歌曲列表") public ResponseEntity queryTbShopPurveyor(TbShopSongQueryCriteria criteria){ - return new ResponseEntity<>(tbShopSongService.queryAll(criteria), HttpStatus.OK); + String code = ""; + if(redisUtils.hasKey(CacheKey.SONG_URL + criteria.getShopId())){ + code = (String) redisUtils.get(CacheKey.SONG_URL + criteria.getShopId()); + }else { + code = RandomStringUtils.randomAlphanumeric(12); + redisUtils.set(CacheKey.SONG_URL + criteria.getShopId(), code); + redisUtils.set(CacheKey.SONG_URL + code, criteria.getShopId()); + } + Map stringObjectMap = tbShopSongService.queryAll(criteria); + stringObjectMap.put("songUrl",code); + return new ResponseEntity<>(stringObjectMap, HttpStatus.OK); + } + + @PostMapping("createUrl") + @ApiOperation("更新歌手页地址") + @AnonymousPostMapping + public ResponseEntity createUrl(String shopId) { + String key = RandomStringUtils.randomAlphanumeric(12); + redisUtils.set(CacheKey.SONG_URL + shopId, key); + redisUtils.set(CacheKey.SONG_URL + key, shopId); + return new ResponseEntity<>(key,HttpStatus.OK); } @PostMapping diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopUserController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopUserController.java index f194ed06..0dbe5f8b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopUserController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/TbShopUserController.java @@ -2,6 +2,9 @@ package cn.ysk.cashier.controller.shop; import cn.hutool.core.util.StrUtil; import cn.ysk.cashier.annotation.AnonymousAccess; +import cn.ysk.cashier.annotation.rest.AnonymousGetMapping; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; +import cn.ysk.cashier.dto.shop.TbShopRechargeListDto; import cn.ysk.cashier.dto.shop.TbShopUserQueryCriteria; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.mybatis.service.TbMShopUserService; @@ -20,10 +23,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** -* @website https://eladmin.vip -* @author lyf -* @date 2024-03-01 -**/ + * @author lyf + * @website https://eladmin.vip + * @date 2024-03-01 + **/ @RestController @RequiredArgsConstructor @Api(tags = "/shop/user管理") @@ -41,35 +44,36 @@ public class TbShopUserController { @GetMapping @ApiOperation("查询/shop/user") - public ResponseEntity queryTbShopUser(TbShopUserQueryCriteria criteria, Pageable pageable){ - return new ResponseEntity<>(tbShopUserService.queryAll(criteria,pageable),HttpStatus.OK); + public ResponseEntity queryTbShopUser(TbShopUserQueryCriteria criteria, Pageable pageable) { + return new ResponseEntity<>(tbShopUserService.queryAll(criteria, pageable), HttpStatus.OK); } @GetMapping("queryAllShopUser") @ApiOperation("查询商家用户") - public ResponseEntity queryAllShopUser(TbShopUserQueryCriteria criteria){ - return new ResponseEntity<>(tbShopUserService.queryShopUser(criteria),HttpStatus.OK); + @AnonymousGetMapping + public ResponseEntity queryAllShopUser(TbShopUserQueryCriteria criteria) { + return new ResponseEntity<>(tbShopUserService.queryShopUser(criteria), HttpStatus.OK); } @GetMapping("summary") @ApiOperation("查询会员概述") - public ResponseEntity summary(TbShopUserQueryCriteria criteria){ + public ResponseEntity summary(TbShopUserQueryCriteria criteria) { if (StrUtil.isBlank(criteria.getShopId())) { throw new BadRequestException("店铺id不为空"); } - return new ResponseEntity<>(tbMShopUserService.summary(criteria),HttpStatus.OK); + return new ResponseEntity<>(tbMShopUserService.summary(criteria), HttpStatus.OK); } @PostMapping @ApiOperation("新增/shop/user") - public ResponseEntity createTbShopUser(@Validated @RequestBody TbShopUser resources){ - return new ResponseEntity<>(tbShopUserService.create(resources),HttpStatus.CREATED); + public ResponseEntity createTbShopUser(@Validated @RequestBody TbShopUser resources) { + return new ResponseEntity<>(tbShopUserService.create(resources), HttpStatus.CREATED); } @PutMapping @ApiOperation("修改/shop/user") - public ResponseEntity updateTbShopUser(@Validated @RequestBody TbShopUser resources){ + public ResponseEntity updateTbShopUser(@Validated @RequestBody TbShopUser resources) { tbShopUserService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -80,4 +84,16 @@ public class TbShopUserController { tbShopUserService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + @GetMapping("/recharge") + @ApiOperation("充值记录") + public ResponseEntity rechargeList(TbShopRechargeListDto criteria, Pageable pageable) { + return new ResponseEntity<>(tbShopUserService.rechargeList(criteria, pageable), HttpStatus.OK); + } + + @PostMapping("/recharge/download") + @ApiOperation("导出充值记录") + public void rechargeListDownload(HttpServletResponse response, @RequestBody TbShopRechargeListDto criteria) throws IOException { + tbShopUserService.rechargeListDownload(response, criteria); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoQueryCriteria.java index 6bc87bab..b5753431 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbOrderInfoQueryCriteria.java @@ -19,6 +19,7 @@ import lombok.Data; import java.util.List; import cn.ysk.cashier.annotation.Query; +import org.apache.commons.lang3.StringUtils; /** * @website https://eladmin.vip @@ -68,4 +69,14 @@ public class TbOrderInfoQueryCriteria{ /** BETWEEN */ @Query(type = Query.Type.BETWEEN) private List createdAt; -} \ No newline at end of file + + + @Query + private String tableName; + + private String productName; + + public void setProductName(String productName) { + if(StringUtils.isNotBlank(productName)) this.productName = productName; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbPayCountQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbPayCountQueryCriteria.java index 60395400..164d6a7f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbPayCountQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/TbPayCountQueryCriteria.java @@ -6,6 +6,11 @@ import java.util.List; @Data public class TbPayCountQueryCriteria { + + private String shopId; + + private String tableName; + private List createdAt; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/StockCountDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/StockCountDTO.java index c342314d..c27b489d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/StockCountDTO.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/StockCountDTO.java @@ -16,4 +16,5 @@ public class StockCountDTO { private String unitName; private Integer stockCount; private Integer stockNumber; + private String specSnap; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSkuDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSkuDto.java index b2f0c612..44683d80 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSkuDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSkuDto.java @@ -56,6 +56,8 @@ public class TbProductSkuDto implements Serializable { /** 进货参考价 */ private BigDecimal guidePrice; + private Integer suit; + private BigDecimal strategyPrice; /** 库存数量 */ diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSpecQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSpecQueryCriteria.java index 9f793adf..e20296fc 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSpecQueryCriteria.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/product/TbProductSpecQueryCriteria.java @@ -30,4 +30,7 @@ public class TbProductSpecQueryCriteria{ */ @Query private String shopId; + + @Query(type = Query.Type.INNER_LIKE) + private String name; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbPlussShopStaffDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbPlussShopStaffDto.java index c5045081..2167d8b0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbPlussShopStaffDto.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbPlussShopStaffDto.java @@ -15,6 +15,7 @@ */ package cn.ysk.cashier.dto.shop; +import cn.ysk.cashier.system.service.dto.RoleSmallDto; import cn.ysk.cashier.system.service.dto.UserDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -22,6 +23,7 @@ import lombok.Data; import javax.persistence.Column; import java.math.BigDecimal; import java.io.Serializable; +import java.util.Set; /** * @website https://eladmin.vip @@ -70,7 +72,10 @@ public class TbPlussShopStaffDto implements Serializable { */ private Integer isPc; - private UserDto user; +// private UserDto user; +// private RoleSmallDto roles; + private Long roleId; + private String phone; private Long createdAt; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopExtendQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopExtendQueryCriteria.java new file mode 100644 index 00000000..667ee2b7 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopExtendQueryCriteria.java @@ -0,0 +1,36 @@ +package cn.ysk.cashier.dto.shop; + +import lombok.Data; + + +/** + * 店铺扩展信息(TbShopExtend)表查询类 + * + * @author ww + * @since 2024-07-18 10:46:57 + */ +@Data +public class TbShopExtendQueryCriteria { + private Integer shopId; + //img:图片;text:文本; + private String type; + //自定义key + private String autokey; + //值 + private String value; + private long page = 1; + private long size = 10; + + public void setPage(long page) { + if (page != 0) { + this.page = page; + } + } + + public void setSize(long size) { + if (size != 0) { + this.size = size; + } + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeListDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeListDto.java new file mode 100644 index 00000000..1be68f5a --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeListDto.java @@ -0,0 +1,18 @@ +package cn.ysk.cashier.dto.shop; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author GYJ + */ +@Data +public class TbShopRechargeListDto { + private String shopId; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeRespDto.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeRespDto.java new file mode 100644 index 00000000..120744fa --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopRechargeRespDto.java @@ -0,0 +1,36 @@ +package cn.ysk.cashier.dto.shop; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author GYJ + */ +@Data +public class TbShopRechargeRespDto { + private Integer id; + private String shopId; + private String shopName; + private String userId; + private String userName; + private String userPhone; + private Object rechargeAmount; + private String rechargeType; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date rechargeTime; + + public TbShopRechargeRespDto(Integer id, String shopId, String shopName, String userId, String userName, String userPhone, + String rechargeAmount, String rechargeType, Date rechargeTime) { + this.id = id; + this.shopId = shopId; + this.shopName = shopName; + this.userId = userId; + this.userName = userName; + this.userPhone = userPhone; + this.rechargeAmount = rechargeAmount; + this.rechargeType = rechargeType; + this.rechargeTime = rechargeTime; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopSongOrderQueryCriteria.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopSongOrderQueryCriteria.java new file mode 100644 index 00000000..145a904f --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/shop/TbShopSongOrderQueryCriteria.java @@ -0,0 +1,42 @@ +package cn.ysk.cashier.dto.shop; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +@Data +public class TbShopSongOrderQueryCriteria { + + private String shopId; + private String orderNo; + private String name; + private Integer state; + /** + * 从1开始 + */ + private Long page = 1L; + /** + * 展示数量 + */ + private Long size = 10L; + + public void setShopId(String shopId) { + if (StringUtils.isNotBlank(shopId) && !shopId.equals("1")) { + this.shopId = shopId; + } + } + + public void setOrderNo(String orderNo) { + if (StringUtils.isNotBlank(orderNo)) + this.orderNo = orderNo; + } + + public void setName(String name) { + if (StringUtils.isNotBlank(name)) + this.name = name; + } + + public void setState(Integer state) { + if (state!=null) + this.state = state; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java new file mode 100644 index 00000000..a49b186b --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopExtend.java @@ -0,0 +1,88 @@ +package cn.ysk.cashier.mybatis.entity; + +import java.util.Date; + +import com.baomidou.mybatisplus.extension.activerecord.Model; + + +/** + * 店铺扩展信息(TbShopExtend)表实体类 + * + * @author ww + * @since 2024-07-18 11:10:16 + */ +@SuppressWarnings("serial") +public class TbShopExtend extends Model { + //自增id + private Integer id; + //商户Id + private Integer shopId; + //img:图片;text:文本; + private String type; + //自定义key + private String autokey; + //值 + private String value; + //更新时间 + private Date updateTime; + //创建时间 + private Date createTime; + + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getShopId() { + return shopId; + } + + public void setShopId(Integer shopId) { + this.shopId = shopId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getAutokey() { + return autokey; + } + + public void setAutokey(String autokey) { + this.autokey = autokey; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopSongOrder.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopSongOrder.java new file mode 100644 index 00000000..17188bbc --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopSongOrder.java @@ -0,0 +1,148 @@ +package cn.ysk.cashier.mybatis.entity; + +import java.util.Date; + +import com.baomidou.mybatisplus.extension.activerecord.Model; + +import java.io.Serializable; + +/** + * (TbShopSongOrder)表实体类 + * + * @author ww + * @since 2024-07-08 09:24:27 + */ +@SuppressWarnings("serial") +public class TbShopSongOrder extends Model { + + private Integer id; + //歌曲id + private Integer songId; + private Integer shopId; + //歌曲名称 + private String songName; + //用户id + private Integer userId; + //支付金额 + private Double payMoney; + //状态 -1 未支付 0 已取消 1 已支付 2 演唱中 3 已演唱 + private Integer state; + //创建时间 + private Date createTime; + //下单来源 + private Integer clientType; + //订单编号 + private String orderNo; + //点歌人 + private String fromName; + //收歌人 + private String toName; + //祝福语 + private String note; + + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getSongId() { + return songId; + } + + public void setSongId(Integer songId) { + this.songId = songId; + } + + public String getSongName() { + return songName; + } + + public void setSongName(String songName) { + this.songName = songName; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public Double getPayMoney() { + return payMoney; + } + + public void setPayMoney(Double payMoney) { + this.payMoney = payMoney; + } + + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Integer getClientType() { + return clientType; + } + + public void setClientType(Integer clientType) { + this.clientType = clientType; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getFromName() { + return fromName; + } + + public void setFromName(String fromName) { + this.fromName = fromName; + } + + public String getToName() { + return toName; + } + + public void setToName(String toName) { + this.toName = toName; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public Integer getShopId() { + return shopId; + } + + public void setShopId(Integer shopId) { + this.shopId = shopId; + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopUserFlow.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopUserFlow.java index d030469a..75152a2f 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopUserFlow.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/entity/TbShopUserFlow.java @@ -5,16 +5,22 @@ import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; import lombok.EqualsAndHashCode; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; import java.math.BigDecimal; import java.util.Date; /** * @author GYJ */ +@Entity @Data @EqualsAndHashCode(callSuper = true) @TableName("tb_shop_user_flow") +@Table(name="tb_shop_user_flow") public class TbShopUserFlow extends Model { + @Id private Integer id; private Integer shopUserId; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/ShopUserMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/ShopUserMapper.java index 3c94530b..0d6fa038 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/ShopUserMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/ShopUserMapper.java @@ -1,5 +1,7 @@ package cn.ysk.cashier.mybatis.mapper; +import cn.ysk.cashier.dto.shop.TbShopRechargeListDto; +import cn.ysk.cashier.dto.shop.TbShopRechargeRespDto; import cn.ysk.cashier.dto.shop.TbShopUserQueryCriteria; import cn.ysk.cashier.pojo.shop.TbShopUser; import cn.ysk.cashier.vo.ShopUserInfoVo; @@ -17,18 +19,38 @@ public interface ShopUserMapper extends BaseMapper { "FROM tb_shop_user su " + "LEFT JOIN tb_user_info u ON su.user_id = u.id " + " " + - "su.user_id is not null and su.user_id != ''" + "" + "AND su.shop_id = #{param.shopId} " + "" + "" + - "AND (u.nick_name like concat('%', #{param.name}, '%') or u.telephone like concat('%', #{param.name}, '%'))" + + "AND (u.nick_name like concat('%', #{param.name}, '%') or su.name LIKE concat( '%', #{param.name}, '%' ) " + + " or u.telephone like concat('%', #{param.name}, '%') or su.telephone like concat('%', #{param.name}, '%'))" + "" + - "" + - "AND su.is_vip=#{param.isVip}" + + "" + + "AND su.is_vip=#{isVip}" + "" + "" + "") - IPage queryUser(TbShopUserQueryCriteria param, Page pageInfo); + IPage queryUser(TbShopUserQueryCriteria param, Integer isVip, Page pageInfo); + + @Select("") + IPage queryRechargeList(TbShopRechargeListDto param, Page pageInfo); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbMShopUserMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbMShopUserMapper.java index 868584a3..1b7c89a4 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbMShopUserMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbMShopUserMapper.java @@ -16,19 +16,23 @@ import java.util.Map; */ public interface TbMShopUserMapper extends BaseMapper { @Select("") Map selectUserSummary(@Param("shopId") String shopId, @Param("isVip") Integer isVip); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopExtendMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopExtendMapper.java new file mode 100644 index 00000000..970a9ba4 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopExtendMapper.java @@ -0,0 +1,15 @@ +package cn.ysk.cashier.mybatis.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.ysk.cashier.mybatis.entity.TbShopExtend; + +/** + * 店铺扩展信息(TbShopExtend)表数据库访问层 + * + * @author ww + * @since 2024-07-18 11:10:16 + */ +public interface TbShopExtendMapper extends BaseMapper { + +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopSongOrderMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopSongOrderMapper.java new file mode 100644 index 00000000..fc1ae864 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopSongOrderMapper.java @@ -0,0 +1,47 @@ +package cn.ysk.cashier.mybatis.mapper; + +import cn.ysk.cashier.mybatis.entity.TbShopSongOrder; +import cn.ysk.cashier.mybatis.vo.SingerSongVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +/** + * (TbShopSongOrder)表数据库访问层 + * + * @author ww + * @since 2024-07-08 09:24:26 + */ +public interface TbShopSongOrderMapper extends BaseMapper { + + + @Select("select " + + "song.img,song.name as songName,song.origin_singer as originSinger,orders.from_name as fromName," + + "orders.to_name as toName,orders.note " + + "from tb_shop_song_order orders " + + "left join tb_shop_song song on orders.song_id=song.id " + + "where state = #{state} and orders.shop_id=#{shopId} order by orders.create_time limit 12") + List findByState(@Param("state") Integer state, @Param("shopId") Integer shopId); + + + @Update("update tb_shop_song_order set state=3 where state=2 and shop_id=#{shopId}") + int upState(@Param("shopId") Integer shopId); + + @Update("update tb_shop_song_order " + + "set state = 2 " + + "where id = (" + + " select id " + + " from (" + + " select id " + + " from tb_shop_song_order " + + " where state = 1 and shop_id = #{shopId}" + + " order by create_time " + + " limit 1" + + " ) as subquery" + + ")") + int setDuringSinging(@Param("shopId") Integer shopId); +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopUserFlowMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopUserFlowMapper.java index 2aceffa4..51a9334c 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopUserFlowMapper.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbShopUserFlowMapper.java @@ -19,23 +19,26 @@ public interface TbShopUserFlowMapper extends BaseMapper { * @param shopId 店铺ID * @param startTime 开始时间 * @param endTime 结束时间 - * @param types 流水类型 * @return 用户流水总金额 */ @Select("") BigDecimal sumUserFlowAmountByConditions(@Param("shopId") Long shopId, @Param("startTime") String startTime, - @Param("endTime") String endTime, - @Param("types") List types); + @Param("endTime") String endTime); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java new file mode 100644 index 00000000..61a6b174 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopExtendService.java @@ -0,0 +1,20 @@ +package cn.ysk.cashier.mybatis.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import cn.ysk.cashier.mybatis.entity.TbShopExtend; +import cn.ysk.cashier.dto.shop.TbShopExtendQueryCriteria; + +import java.util.Map; + +/** + * 店铺扩展信息(TbShopExtend)表服务接口 + * + * @author ww + * @since 2024-07-18 11:10:16 + */ +public interface TbShopExtendService extends IService { + + Map queryAll(TbShopExtendQueryCriteria criteria); + +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopSongOrderService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopSongOrderService.java new file mode 100644 index 00000000..89b58178 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopSongOrderService.java @@ -0,0 +1,24 @@ +package cn.ysk.cashier.mybatis.service; + +import cn.ysk.cashier.dto.shop.TbShopSongOrderQueryCriteria; +import cn.ysk.cashier.dto.shop.TbShopSongQueryCriteria; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.ysk.cashier.mybatis.entity.TbShopSongOrder; + +import java.util.Map; + +/** + * (TbShopSongOrder)表服务接口 + * + * @author ww + * @since 2024-07-08 09:24:27 + */ +public interface TbShopSongOrderService extends IService { + + Map queryAll(TbShopSongOrderQueryCriteria criteria); + + Map singerSongs(Integer shopId); + + void next(Integer shopId); +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopUserFlowService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopUserFlowService.java index c55bbddc..ae55eb02 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopUserFlowService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbShopUserFlowService.java @@ -12,5 +12,5 @@ import java.util.List; */ public interface TbShopUserFlowService extends IService { - BigDecimal sumUserFlowAmountByConditions(Long shopId, String startTime, String endTime, List types); + BigDecimal sumUserFlowAmountByConditions(Long shopId, String startTime, String endTime); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java new file mode 100644 index 00000000..fe7bc2cc --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopExtendServiceImpl.java @@ -0,0 +1,45 @@ +package cn.ysk.cashier.mybatis.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.ysk.cashier.mybatis.mapper.TbShopExtendMapper; +import cn.ysk.cashier.mybatis.entity.TbShopExtend; +import cn.ysk.cashier.mybatis.service.TbShopExtendService; +import org.springframework.stereotype.Service; +import org.apache.commons.lang3.StringUtils; +import cn.ysk.cashier.dto.shop.TbShopExtendQueryCriteria; +import org.springframework.beans.factory.annotation.Autowired; +import cn.ysk.cashier.utils.PageUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.util.Map; + +/** + * 店铺扩展信息(TbShopExtend)表服务实现类 + * + * @author ww + * @since 2024-07-18 10:57:39 + */ +@Service("tbShopExtendService") +public class TbShopExtendServiceImpl extends ServiceImpl implements TbShopExtendService { + + @Autowired + private TbShopExtendMapper tbShopExtendmapper; + + @Override + public Map queryAll(TbShopExtendQueryCriteria criteria) { + Page page = new Page<>(criteria.getPage(), criteria.getSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("shop_id", criteria.getShopId()); + if (StringUtils.isNotBlank(criteria.getType())) { + wrapper.eq("type",criteria.getType()); + } + if (StringUtils.isNotBlank(criteria.getAutokey())) { + wrapper.like("autokey",criteria.getAutokey()); + } + wrapper.orderByDesc("create_time"); + Page ipage = tbShopExtendmapper.selectPage(page, wrapper); + return PageUtil.toPage(ipage.getRecords(), ipage.getTotal()); + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopSongOrderServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopSongOrderServiceImpl.java new file mode 100644 index 00000000..39e0d3d6 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopSongOrderServiceImpl.java @@ -0,0 +1,80 @@ +package cn.ysk.cashier.mybatis.service.impl; + +import cn.ysk.cashier.dto.shop.TbShopSongOrderQueryCriteria; +import cn.ysk.cashier.dto.shop.TbShopSongQueryCriteria; +import cn.ysk.cashier.mybatis.entity.TbShopSong; +import cn.ysk.cashier.mybatis.mapper.TbShopSongMapper; +import cn.ysk.cashier.mybatis.vo.SingerSongVo; +import cn.ysk.cashier.utils.PageUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.ysk.cashier.mybatis.mapper.TbShopSongOrderMapper; +import cn.ysk.cashier.mybatis.entity.TbShopSongOrder; +import cn.ysk.cashier.mybatis.service.TbShopSongOrderService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * (TbShopSongOrder)表服务实现类 + * + * @author ww + * @since 2024-07-08 09:24:27 + */ +@Service("tbShopSongOrderService") +public class TbShopSongOrderServiceImpl extends ServiceImpl implements TbShopSongOrderService { + + @Autowired + private TbShopSongOrderMapper tbShopSongOrderMapper; + @Override + public Map queryAll(TbShopSongOrderQueryCriteria criteria) { + Page page = new Page<>( + criteria.getPage(), + criteria.getSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + if (StringUtils.isNotBlank(criteria.getShopId())) { + wrapper.eq("shop_id", criteria.getShopId()); + } + if (StringUtils.isNotBlank(criteria.getOrderNo())) { + wrapper.eq("order_no", criteria.getOrderNo()); + } + if (criteria.getState() != null) { + wrapper.eq("state", criteria.getState()); + } + if (StringUtils.isNotBlank(criteria.getName())) { + wrapper.like("song_name", criteria.getName()); + } + wrapper.orderByDesc("create_time"); + Page tbShopSongPage = tbShopSongOrderMapper.selectPage(page, wrapper); + return PageUtil.toPage(tbShopSongPage.getRecords(), tbShopSongPage.getTotal()); + } + + @Override + public Map singerSongs(Integer shopId) { + Map map = new LinkedHashMap<>(3); + map.put("shopId",shopId); + List byState = tbShopSongOrderMapper.findByState(2, shopId); + if(CollectionUtils.isEmpty(byState)){ + map.put("afoot","");//演唱中 + }else { + map.put("afoot",byState.get(0));//演唱中 + } + map.put("Waiting",tbShopSongOrderMapper.findByState(1,shopId)); + return map; + } + + @Override + @Transactional + public void next(Integer shopId) { + tbShopSongOrderMapper.upState(shopId); + tbShopSongOrderMapper.setDuringSinging(shopId); + } +} + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopUserFlowServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopUserFlowServiceImpl.java index 7a051c64..eec93bd5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopUserFlowServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbShopUserFlowServiceImpl.java @@ -15,7 +15,7 @@ import java.util.List; @Service public class TbShopUserFlowServiceImpl extends ServiceImpl implements TbShopUserFlowService { @Override - public BigDecimal sumUserFlowAmountByConditions(Long shopId, String startTime, String endTime, List types) { - return baseMapper.sumUserFlowAmountByConditions(shopId, startTime, endTime, types); + public BigDecimal sumUserFlowAmountByConditions(Long shopId, String startTime, String endTime) { + return baseMapper.sumUserFlowAmountByConditions(shopId, startTime, endTime); } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/SingerSongVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/SingerSongVo.java new file mode 100644 index 00000000..0a590e5f --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/vo/SingerSongVo.java @@ -0,0 +1,14 @@ +package cn.ysk.cashier.mybatis.vo; + +import lombok.Data; + +@Data +public class SingerSongVo { + private String img; + private String songName; + private String originSinger; + private String fromName; + private String toName; + private String note; + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProductSku.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProductSku.java index 4c83db0a..a108fafc 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProductSku.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/product/TbProductSku.java @@ -1,33 +1,17 @@ -/* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ package cn.ysk.cashier.pojo.product; -import cn.hutool.json.JSON; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; -import cn.hutool.core.bean.copier.CopyOptions; +import lombok.Data; + import javax.persistence.*; -import javax.validation.constraints.*; -import java.math.BigDecimal; +import javax.validation.constraints.NotBlank; import java.io.Serializable; +import java.math.BigDecimal; /** * @website https://eladmin.vip @@ -85,6 +69,9 @@ public class TbProductSku implements Serializable { @ApiModelProperty(value = "进货参考价") private BigDecimal guidePrice; + @ApiModelProperty(value = "起售数量 默认为1") + private Integer suit = 1; + @Column(name = "`strategy_price`") @ApiModelProperty(value = "strategyPrice") private BigDecimal strategyPrice; @@ -132,13 +119,27 @@ public class TbProductSku implements Serializable { @Column(name = "`updated_at`") @ApiModelProperty(value = "updatedAt") private Long updatedAt; - public void copy(TbProductSku source){ - BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); - } + + @Column(name = "`is_del`") + private Integer isDel = 0; @Column(name = "`is_pause_sale`") @ApiModelProperty(value = "是否暂停销售") private Integer isPauseSale = 0; + @Column(name = "`is_grounding`") + @ApiModelProperty(value = "是否上架") + private Integer isGrounding = 1; + + public void setIsDel(Integer isDel) { + if(isDel!=null){ + this.isDel = isDel; + } + } + + public void copy(TbProductSku source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } + } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java index f2518932..83b4a4b5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java @@ -127,6 +127,10 @@ public class TbMerchantAccount implements Serializable { @ApiModelProperty(value = "updatedAt") private Long updatedAt; + @Column(name = "`pwd`") + @ApiModelProperty(value = "操作密码") + private String pwd; + public void copy(TbMerchantAccount source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbPlussShopStaff.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbPlussShopStaff.java index 240e76ec..8f36c074 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbPlussShopStaff.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbPlussShopStaff.java @@ -15,6 +15,7 @@ */ package cn.ysk.cashier.pojo.shop; +import cn.ysk.cashier.system.service.dto.RoleSmallDto; import lombok.Data; import cn.hutool.core.bean.BeanUtil; import io.swagger.annotations.ApiModelProperty; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/rabbit/StockListener.java b/eladmin-system/src/main/java/cn/ysk/cashier/rabbit/StockListener.java new file mode 100644 index 00000000..9fc4ada5 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/rabbit/StockListener.java @@ -0,0 +1,36 @@ +package cn.ysk.cashier.rabbit; + +import cn.ysk.cashier.config.RabbitConfig; +import cn.ysk.cashier.pojo.product.TbProductStockDetail; +import cn.ysk.cashier.service.product.TbProductStockDetailService; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class StockListener { + + private final TbProductStockDetailService productStockDetailService; + + public StockListener(TbProductStockDetailService productStockDetailService) { + this.productStockDetailService = productStockDetailService; + } + + @RabbitListener(queues = RabbitConfig.QUEUE_STOCK_RECORD_SALE) + public void recordSaleHandler(String message) { + log.info("接收到下单保存库存信息mq消息,消息内容: {}", message); + JSONObject jsonObject = JSONObject.parseObject(message); + if (!jsonObject.containsKey("orderId")) { + log.info("mq消息体有误,确实orderId"); + return; + } + try { + productStockDetailService.addSaleRecord(jsonObject.getInteger("orderId")); + }catch (Exception e) { + log.error("执行保存库存mq失败", e); + } + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java index 8c57c7c3..eb0554df 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java @@ -25,4 +25,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2023-11-13 **/ public interface TbUserInfoRepository extends JpaRepository, JpaSpecificationExecutor { + + } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/StockCountRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/StockCountRepository.java index 0f3e8353..929bf2e0 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/StockCountRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/StockCountRepository.java @@ -2,6 +2,7 @@ package cn.ysk.cashier.repository.order; import cn.ysk.cashier.dto.product.StockCountDTO; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -32,4 +33,35 @@ public interface StockCountRepository extends JpaRepository countStock( @Param("startTime") String startTime, @Param("endTime") String endTime); -} \ No newline at end of file + @Query(value = "SELECT\n" + + "pro.shop_id AS shop_id,\n" + + "pro.id AS pro_id,\n" + + "info.product_name AS pro_name,\n" + + "pro.is_stock,\n" + + "info.product_sku_name AS sku_name,\n" + + "unit.NAME AS unit_name,\n" + + "SUM( CASE WHEN orders.order_type != 'return' THEN info.num ELSE 0 END ) - SUM( CASE WHEN orders.order_type = 'return' THEN info.num ELSE 0 END ) AS stock_count,\n" + + "CASE\n" + + "\n" + + "WHEN pro.is_distribute = 0 THEN\n" + + "sku.stock_number ELSE pro.stock_number \n" + + "END AS stock_number, ifnull(sku.spec_snap, '')\n" + + "FROM\n" + + "tb_order_detail info\n" + + "LEFT JOIN tb_order_info orders ON orders.id = info.order_id\n" + + "LEFT JOIN tb_product pro ON info.product_id = pro.id\n" + + "LEFT JOIN tb_product_sku sku ON info.product_sku_id = sku.id\n" + + "LEFT JOIN tb_shop_unit unit ON unit.id = pro.unit_id \n" + + "WHERE\n" + + "orders.id = :orderId \n" + + "AND ( info.STATUS = 'closed' OR info.STATUS = 'refund' ) \n" + + "GROUP BY\n" + + "info.product_id,\n" + + "pro.shop_id,\n" + + "pro.id,\n" + + "info.product_name,\n" + + "pro.is_stock,\n" + + "info.product_sku_name,\n" + + "unit.NAME;",nativeQuery = true) + List countStockById(Integer orderId); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java index 5e705237..e8cdda21 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java @@ -136,4 +136,13 @@ public interface TbOrderDetailRepository extends JpaRepository findOrderIdsByProductNameLike(@Param("productName") String productName, @Param("shop_id") String shopId, + @Param("startTime") Date startTime, @Param("endTime") Date endTime); + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java index ec595db9..0e2f6781 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java @@ -1,18 +1,18 @@ /* - * Copyright 2019-2020 Zheng Jie - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +* Copyright 2019-2020 Zheng Jie +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ package cn.ysk.cashier.repository.order; import cn.ysk.cashier.pojo.order.TbOrderInfo; @@ -32,26 +32,26 @@ import java.util.Date; import java.util.List; /** - * @author lyf - * @website https://eladmin.vip - * @date 2024-03-02 - **/ +* @website https://eladmin.vip +* @author lyf +* @date 2024-03-02 +**/ public interface TbOrderInfoRepository extends JpaRepository, JpaSpecificationExecutor { @Query("SELECT new cn.ysk.cashier.vo.TbOrderPayCountVo(info.payType, SUM(info.orderAmount)) " + "FROM TbOrderInfo info " + - "WHERE info.shopId = :shopId " + + "WHERE 1=1 and (:tableName is null or info.tableName=:tableName ) and info.shopId = :shopId " + "AND info.createdAt>:start AND info.createdAt<:end " + "AND ((info.status = 'closed') OR (info.status = 'refund' AND info.orderType != 'return')) " + "GROUP BY info.payType") - List queryTbOrderPayCount(@Param("shopId") String shopId, @Param("start") Long start, @Param("end") Long end); + List queryTbOrderPayCount(@Param("shopId")String shopId,@Param("tableName") String tableName ,@Param("start") Long start, @Param("end") Long end); @Query("SELECT new cn.ysk.cashier.vo.TbOrderPayCountVo('refund', SUM(info.orderAmount)) " + "FROM TbOrderInfo info " + - "WHERE info.shopId = :shopId " + + "WHERE 1=1 and (:tableName is null or info.tableName=:tableName ) and info.shopId = :shopId " + "AND info.status = 'refund' AND info.orderType = 'return' " + "AND info.createdAt>:start AND info.createdAt<:end") - TbOrderPayCountVo queryTbOrderRefund(@Param("shopId") String shopId, @Param("start") Long start, @Param("end") Long end); + TbOrderPayCountVo queryTbOrderRefund(@Param("shopId")String shopId, @Param("tableName") String tableName ,@Param("start") Long start, @Param("end") Long end); @Query(value = "SELECT COUNT(1) ,pay_type AS payType FROM tb_order_info Where shop_id = :shopId AND " + " created_at BETWEEN :startTime AND :endTime AND status='closed'AND order_type <>'return' GROUP BY pay_type", nativeQuery = true) @@ -191,4 +191,4 @@ public interface TbOrderInfoRepository extends JpaRepository queryShopTableIds(@Param("shopId") Integer shopId); -} +} \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductRepository.java index 4538c363..aa50c29b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductRepository.java @@ -55,4 +55,7 @@ public interface TbProductRepository extends JpaRepository, @Modifying @Query("update TbProduct set stockNumber=stockNumber+:num where id=:id") void incrStock(@Param("id") Integer id, @Param("num") Integer num); + + @Query("select product from TbProduct product where product.id=:id and product.shopId=:shopId") + TbProduct selectByShopIdAndId(Integer id, String shopId); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductSkuRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductSkuRepository.java index 6b11ddce..7cf13c48 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductSkuRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/product/TbProductSkuRepository.java @@ -3,6 +3,7 @@ package cn.ysk.cashier.repository.product; import cn.ysk.cashier.pojo.product.TbProductSku; import cn.ysk.cashier.vo.StockV2Vo; import cn.ysk.cashier.vo.StockVo; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Update; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -10,7 +11,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import javax.transaction.Transactional; import java.math.BigDecimal; @@ -23,10 +23,10 @@ import java.util.List; **/ public interface TbProductSkuRepository extends JpaRepository, JpaSpecificationExecutor { - @Query("SELECT sku FROM TbProductSku sku WHERE sku.productId IN :productId") + @Query("SELECT sku FROM TbProductSku sku WHERE sku.productId IN :productId and sku.isDel=0") List searchSku(@Param("productId")List productId); - @Query("SELECT sku FROM TbProductSku sku WHERE sku.productId = :productId") + @Query("SELECT sku FROM TbProductSku sku WHERE sku.productId = :productId and sku.isDel=0") List searchSku(@Param("productId")String productId); @Transactional @@ -34,7 +34,12 @@ public interface TbProductSkuRepository extends JpaRepository searchProStockV2(@Param("shopId") String shopId, @Param("proName") String proName, @Param("isStock")Integer isStock); + List searchProStockV2(@Param("shopId") String shopId, @Param("proName") String proName, @Param("isStock")Integer isStock, + @Param("categoryId") String categoryId); @Query("SELECT new cn.ysk.cashier.vo.StockV2Vo(" + - "sku.id,pro.id,pro.coverImg,pro.name,unit.name,pro.typeEnum,sku.specSnap,pro.isStock,sku.stockNumber, 1, sku.isPauseSale, false, 0, sku.salePrice" + + "sku.id,pro.id,pro.coverImg,pro.name," + + "unit.name,pro.typeEnum,sku.specSnap,pro.isStock,sku.stockNumber, 1, sku.isPauseSale, false, 0, sku.salePrice, CASE WHEN sku.isGrounding=1 THEN true ELSE false END" + ") " + "from " + "TbProductSku sku " + @@ -104,6 +115,7 @@ public interface TbProductSkuRepository extends JpaRepository @Query("SELECT user.userId from TbShopUser user where user.shopId = :shopId") List getUserIdByShopId(String shopId); - - } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java index 58b86039..9ac0c4e8 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java @@ -80,4 +80,7 @@ public interface TbUserInfoService { * @throws IOException / */ void download(List all, HttpServletResponse response) throws IOException; + + + } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java index e5efa3ec..a8bf5b37 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java @@ -379,8 +379,7 @@ public class SummaryServiceImpl implements SummaryService { BigDecimal recharge = tbShopUserFlowService.sumUserFlowAmountByConditions(Long.valueOf(summaryDto.getShopId()), tbOrderPayCountByDayVo.getTradeDay() + " 00:00:00", - tbOrderPayCountByDayVo.getTradeDay() + " 23:59:59", - Arrays.asList("cashMemberIn", "scanMemberIn")); + tbOrderPayCountByDayVo.getTradeDay() + " 23:59:59"); tbOrderPayCountByDayVo.setRecharge(recharge); BigDecimal decimal = tbOrderInfoRepository.queryRefundOrderAmountByTradeDay(summaryDto.getShopId(), tbOrderPayCountByDayVo.getTradeDay()); @@ -463,7 +462,7 @@ public class SummaryServiceImpl implements SummaryService { endTime = new Date(); } TbOrderPayCountVo payCount = tbOrderInfoRepository.queryOrderPayCount(shopId, start, end); - TbOrderPayCountVo refCount = tbOrderInfoRepository.queryTbOrderRefund(shopId, start, end); + TbOrderPayCountVo refCount = tbOrderInfoRepository.queryTbOrderRefund(shopId, null,start, end); payCount.setPayAmount(new BigDecimal(payCount.getPayAmount().toString()).subtract(new BigDecimal(refCount.getPayAmount().toString()))); payCount.setIcon("el-icon-coin"); list.add(payCount); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java index 5a498eb9..95aebda8 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/order/TbOrderInfoServiceImpl.java @@ -1,10 +1,12 @@ package cn.ysk.cashier.service.impl.order; +import cn.hutool.core.date.DateTime; import cn.hutool.core.util.ObjectUtil; import cn.ysk.cashier.cons.rabbit.RabbitConstants; import cn.ysk.cashier.dto.order.TbOrderInfoDto; import cn.ysk.cashier.dto.order.TbOrderInfoQueryCriteria; import cn.ysk.cashier.dto.order.TbPayCountQueryCriteria; +import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.mapper.order.TbOrderInfoMapper; import cn.ysk.cashier.mapper.product.TbProductMapper; import cn.ysk.cashier.mapper.product.TbProductSkuMapper; @@ -96,6 +98,39 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { if (StringUtils.isBlank(criteria.getStatus()) && StringUtils.isBlank(criteria.getSource())) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.notEqual(root.get("orderType"), "return")); } + + if (StringUtils.isNotBlank(criteria.getProductName())) { + Date startTime, endTime; + DateTime offsetMonth = cn.hutool.core.date.DateUtil.offsetMonth(new Date(), 3); + if (criteria.getCreatedAt() != null && criteria.getCreatedAt().size() == 2) { + if (criteria.getCreatedAt().get(0) < System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 90L) { + throw new BadRequestException("查询时间范围不能超过三个月"); + } + Long startLong = criteria.getCreatedAt().get(0); + Long endLong = criteria.getCreatedAt().get(1); + + startTime = new Date(startLong); + endTime = new Date(endLong); + + // 如果开始时间小于三个月前,不查询 +// if (startTime.before(offsetMonth)) { +// throw new BadRequestException("查询时间范围不能超过三个月"); +// } + } else { + startTime = offsetMonth; + endTime = new Date(); + } + + List productIds = tbOrderDetailRepository.findOrderIdsByProductNameLike(criteria.getProductName(), + criteria.getShopId(), startTime, endTime); + + if (productIds.isEmpty()) { + predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("id"), 0)); + } else { + predicate = criteriaBuilder.and(predicate, root.get("id").in(productIds)); + } + } + return predicate; }, pageable); @@ -121,11 +156,12 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { detail.setRefundNumber(refundNumber); } }); - }else { + } else { details.parallelStream().forEach(detail -> { detail.setRefundNumber(detail.getNum()); }); } + orderInfoVo.setTableName(tbOrderInfo.getTableName()); orderInfoVo.setDetailList(details); BeanUtils.copyProperties(tbOrderInfo, orderInfoVo); orderInfoVo.setRefundAmount(refundAmount); @@ -150,7 +186,10 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { end = createdAt.get(1); } } - List payCountVoList = tbOrderInfoRepository.queryTbOrderPayCount(criteria.getShopId(), start, end); + if (ObjectUtil.isEmpty(criteria.getTableName())) { + criteria.setTableName(null); + } + List payCountVoList = tbOrderInfoRepository.queryTbOrderPayCount(criteria.getShopId(), criteria.getTableName(), start, end); BigDecimal totalPayAmount = BigDecimal.ZERO; for (TbOrderPayCountVo payCount : payCountVoList) { totalPayAmount = totalPayAmount.add(new BigDecimal(payCount.getPayAmount().toString())); @@ -167,7 +206,7 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { result.add(payCount); } } - TbOrderPayCountVo payRufund = tbOrderInfoRepository.queryTbOrderRefund(criteria.getShopId(), start, end); + TbOrderPayCountVo payRufund = tbOrderInfoRepository.queryTbOrderRefund(criteria.getShopId(), criteria.getTableName(), start, end); if (payRufund != null) { totalPayAmount = totalPayAmount.subtract(new BigDecimal(payRufund.getPayAmount().toString())); payRufund.setPayType("退单"); @@ -185,6 +224,7 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { criteria.setOrderType(null); } } + List dto = tbOrderInfoMapper.toDto(tbOrderInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); for (TbOrderInfoDto tbOrderInfo : dto) { List details = tbOrderDetailRepository.searchDetailByOrderId(tbOrderInfo.getId()); @@ -226,7 +266,7 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { dto.setIsRefund(0); dto.setRefundAmount(BigDecimal.ZERO); List tbOrderInfos = tbOrderInfoRepository.selTbOrdersBysource(tbOrderInfo.getId(), tbOrderInfo.getShopId()); - if(!CollectionUtils.isEmpty(tbOrderInfos)){ + if (!CollectionUtils.isEmpty(tbOrderInfos)) { dto.setIsRefund(1); dto.setRefundAmount(tbOrderInfos.stream().map(TbOrderInfo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add)); } @@ -245,15 +285,15 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { @Transactional(rollbackFor = Exception.class) public void expired(String orderId) { //修改耗材数据 - JSONObject jsonObject1=new JSONObject(); - jsonObject1.put("type","delete"); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("type", "delete"); Optional byId = tbOrderInfoRepository.findById(Integer.valueOf(orderId)); if (byId != null && byId.isPresent()) { TbOrderInfo tbOrderInfo = byId.get(); if (tbOrderInfo.getStatus().equals("unpaid")) { upOrderStatus(tbOrderInfo); - jsonObject1.put("orderId",tbOrderInfo.getId()); + jsonObject1.put("orderId", tbOrderInfo.getId()); // 发送取消订单mq消息 rabbitTemplate.convertAndSend(RabbitConstants.CONS_COLLECT_PUT, RabbitConstants.CONS_COLLECT_ROUTINGKEY_PUT, jsonObject1.toJSONString(), new CorrelationData(UUID.randomUUID().toString())); @@ -269,7 +309,7 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { redisUtils.set(CacheKey.ORDER_EXPIRED + tbOrderInfo.getId(), tbOrderInfo.getId(), 60 * 2); } else { upOrderStatus(tbOrderInfo); - jsonObject1.put("orderId",tbOrderInfo.getId()); + jsonObject1.put("orderId", tbOrderInfo.getId()); // 发送取消订单mq消息 rabbitTemplate.convertAndSend(RabbitConstants.CONS_COLLECT_PUT, RabbitConstants.CONS_COLLECT_ROUTINGKEY_PUT, @@ -354,6 +394,8 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); + + all = all.stream().sorted(Comparator.comparing(TbOrderInfoDto::getId).reversed()).collect(Collectors.toList()); for (TbOrderInfoDto tbOrderInfo : all) { Map map = new LinkedHashMap<>(); map.put("订单编号", tbOrderInfo.getOrderNo()); @@ -400,6 +442,28 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { .collect(Collectors.joining("/")); map.put("商品信息", productNames); // + + if (ObjectUtil.isNotEmpty(tbOrderInfo.getPayType()) && ObjectUtil.isNotNull(tbOrderInfo.getPayType())) { + switch (tbOrderInfo.getPayType()) { + case "scanCode": + tbOrderInfo.setPayType("收款码支付"); + break; + case "deposit": + tbOrderInfo.setPayType("会员卡支付"); + break; + case "cash": + tbOrderInfo.setPayType("现金支付"); + break; + case "wx_lite": + tbOrderInfo.setPayType("微信支付"); + break; + + } + } else { + tbOrderInfo.setPayType(""); + } + + map.put("支付类型", tbOrderInfo.getPayType()); map.put("订单金额", tbOrderInfo.getOrderAmount()); map.put("退单金额", tbOrderInfo.getRefundAmount()); @@ -442,6 +506,7 @@ public class TbOrderInfoServiceImpl implements TbOrderInfoService { map.put("状态", tbOrderInfo.getStatus()); map.put("创建日期", DateUtil.timeStampFormatyMdHms(tbOrderInfo.getCreatedAt())); map.put("备注", tbOrderInfo.getRemark()); + map.put("台桌", tbOrderInfo.getTableName()); list.add(map); } FileUtil.downloadExcel(list, response); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/StockServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/StockServiceImpl.java index 670bab09..25363231 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/StockServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/StockServiceImpl.java @@ -4,10 +4,12 @@ import cn.ysk.cashier.dto.product.OutAndOnDto; import cn.ysk.cashier.dto.product.StockQueryDto; import cn.ysk.cashier.dto.product.TbProductDto; import cn.ysk.cashier.exception.BadRequestException; +import cn.ysk.cashier.pojo.product.TbProduct; import cn.ysk.cashier.pojo.product.TbProductSku; import cn.ysk.cashier.pojo.product.TbProductStockDetail; import cn.ysk.cashier.pojo.shop.TbShopInfo; import cn.ysk.cashier.pojo.shop.TbShopUnit; +import cn.ysk.cashier.repository.product.TbProductRepository; import cn.ysk.cashier.repository.product.TbProductSkuRepository; import cn.ysk.cashier.repository.product.TbProductStockDetailRepository; import cn.ysk.cashier.repository.shop.TbShopInfoRepository; @@ -15,7 +17,6 @@ import cn.ysk.cashier.repository.shop.TbShopUnitRepository; import cn.ysk.cashier.service.TbProductStockOperateService; import cn.ysk.cashier.service.product.StockService; import cn.ysk.cashier.service.product.TbProductService; -import cn.ysk.cashier.service.product.TbProductStockDetailService; import cn.ysk.cashier.utils.CacheKey; import cn.ysk.cashier.utils.FileUtil; import cn.ysk.cashier.utils.RedisUtils; @@ -60,6 +61,7 @@ public class StockServiceImpl implements StockService { private final TbShopInfoRepository tbShopInfoRepository; private final TbShopUnitRepository shopUnitRepository; private final TbProductStockDetailRepository tbProductStockDetailRepository; + private final TbProductRepository tbProductRepository; @PersistenceContext private EntityManager em; @@ -102,7 +104,8 @@ public class StockServiceImpl implements StockService { @Override public void downloadV2(StockQueryDto summaryDto, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); - List stockVos = tbProductSkuRepository.searchProStockV2(summaryDto.getShopId(), summaryDto.getName(), summaryDto.getIsStock()); + List stockVos = tbProductSkuRepository.searchProStockV2(summaryDto.getShopId(), summaryDto.getName(), + summaryDto.getIsStock(), summaryDto.getCategoryId()); for (StockV2Vo all : stockVos) { if (all.getIsDistribute().equals(1)) { Map map = new LinkedHashMap<>(); @@ -383,4 +386,19 @@ public class StockServiceImpl implements StockService { } tbProductSkuRepository.updateWarnLineByShopId(stockUpdateWarnLineVO.getWarnLine(), stockUpdateWarnLineVO.getShopId()); } + + @Override + public void grounding(Integer shopId, Integer skuId, Boolean isGrounding) { + TbProductSku tbProductSku = skuRepository.findById(skuId).orElse(null); + if (tbProductSku == null) { + throw new BadRequestException("商品不存在,skuId: " + skuId); + } + TbProduct product = tbProductRepository.selectByShopIdAndId(Integer.parseInt(tbProductSku.getProductId()), String.valueOf(shopId)); + // 共享库存下架所有sku + if (product.getIsDistribute().equals(1)) { + tbProductSkuRepository.updateGroundingByProId(product.getId().toString(), isGrounding ? 1 : 0); + }else { + tbProductSkuRepository.updateGrounding(skuId, isGrounding ? 1 : 0); + } + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java index 1f5c4dc5..566b0e5b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductServiceImpl.java @@ -341,6 +341,9 @@ public class TbProductServiceImpl implements TbProductService { // } product.setCategoryId(String.valueOf(resources.getCategoryId())); } + if (product.getUnitId() == null) { + throw new BadRequestException("商品单位未填写"); + } if (!CollectionUtils.isEmpty(resources.getImages())) { product.setImages(resources.getImages().toString()); } @@ -350,9 +353,6 @@ public class TbProductServiceImpl implements TbProductService { product.setStatus(1); product.setCreatedAt(Instant.now().toEpochMilli()); product.setUpdatedAt(Instant.now().toEpochMilli()); - if (resources.getUnitId() != null) { - product.setUnitId(resources.getUnitId()); - } if ("sku".equals(resources.getTypeEnum())) { List collect = resources.getSkuList().stream().map(TbProductSku::getSalePrice).sorted().collect(Collectors.toList()); product.setLowPrice(collect.get(0)); @@ -387,6 +387,7 @@ public class TbProductServiceImpl implements TbProductService { sku.setShopId(save.getShopId()); sku.setCreatedAt(Instant.now().toEpochMilli()); sku.setUpdatedAt(Instant.now().toEpochMilli()); + sku.setIsGrounding(1); skuList.add(sku); } List tbProductSkus = tbProductSkuRepository.saveAll(skuList); @@ -458,24 +459,33 @@ public class TbProductServiceImpl implements TbProductService { //sku if (resources.getSkuList() != null) { - List skuList = new ArrayList<>(); - for (TbProductSku sku : resources.getSkuList()) { - TbProductSku tbProductSku = tbProductSkuRepository.searchBarCode(sku.getBarCode()); - if (tbProductSku != null) { - tbProductSkuRepository.updateByBarCode(sku.getBarCode(), sku.getCostPrice(), sku.getCoverImg(), sku.getFirstShared(), sku.getMemberPrice(), - sku.getOriginPrice(), sku.getSalePrice(), sku.getSpecSnap(), tbProductSku.getId()); - } else { - if ("sku".equals(save.getTypeEnum())) { - tbProductSkuRepository.deleteByProductId(String.valueOf(save.getId())); +// List skuList = new ArrayList<>(); +// for (TbProductSku sku : resources.getSkuList()) { +// TbProductSku tbProductSku = tbProductSkuRepository.searchBarCode(sku.getBarCode()); +// if (tbProductSku != null) { +// tbProductSkuRepository.updateByBarCode(sku.getBarCode(), sku.getCostPrice(), sku.getCoverImg(), sku.getFirstShared(), sku.getMemberPrice(), +// sku.getOriginPrice(), sku.getSalePrice(), sku.getSpecSnap(), tbProductSku.getId()); +// } else { +// if ("sku".equals(save.getTypeEnum())) { +// tbProductSkuRepository.deleteByProductId(String.valueOf(save.getId())); +// } +// sku.setProductId(String.valueOf(save.getId())); +// sku.setShopId(save.getShopId()); +// sku.setCreatedAt(Instant.now().toEpochMilli()); +// sku.setUpdatedAt(Instant.now().toEpochMilli()); +// skuList.add(sku); +// } +// } + if ("sku".equals(save.getTypeEnum())) { + List collect = resources.getSkuList().stream().map(TbProductSku::getId).collect(Collectors.toList()); + List tbProductSkus = tbProductSkuRepository.searchSku(resources.getId().toString()); + for (TbProductSku productSkus : tbProductSkus) { + if (!collect.contains(productSkus.getId())) { + tbProductSkuRepository.deleteBySkuId(productSkus.getId()); } - sku.setProductId(String.valueOf(save.getId())); - sku.setShopId(save.getShopId()); - sku.setCreatedAt(Instant.now().toEpochMilli()); - sku.setUpdatedAt(Instant.now().toEpochMilli()); - skuList.add(sku); } } - tbProductSkuRepository.saveAll(skuList); + tbProductSkuRepository.saveAll(resources.getSkuList()); } //保存到sku_result if ("sku".equals(resources.getTypeEnum())) { diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockDetailServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockDetailServiceImpl.java index 8fee6605..f5445202 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockDetailServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/productimpl/TbProductStockDetailServiceImpl.java @@ -15,27 +15,31 @@ */ package cn.ysk.cashier.service.impl.productimpl; +import cn.hutool.core.util.StrUtil; +import cn.ysk.cashier.dto.product.StockCountDTO; +import cn.ysk.cashier.pojo.order.TbOrderInfo; import cn.ysk.cashier.pojo.product.TbProductStockDetail; -import cn.ysk.cashier.utils.ValidationUtil; -import cn.ysk.cashier.utils.FileUtil; +import cn.ysk.cashier.repository.order.StockCountRepository; +import cn.ysk.cashier.repository.order.TbOrderInfoRepository; +import cn.ysk.cashier.utils.*; import lombok.RequiredArgsConstructor; import cn.ysk.cashier.repository.product.TbProductStockDetailRepository; import cn.ysk.cashier.service.product.TbProductStockDetailService; import cn.ysk.cashier.dto.product.TbProductStockDetailDto; import cn.ysk.cashier.dto.product.TbProductStockDetailQueryCriteria; import cn.ysk.cashier.mapper.product.TbProductStockDetailMapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import cn.ysk.cashier.utils.PageUtil; -import cn.ysk.cashier.utils.QueryHelp; import java.math.BigDecimal; import java.util.*; import java.io.IOException; +import javax.persistence.EntityManager; import javax.servlet.http.HttpServletResponse; /** @@ -46,11 +50,17 @@ import javax.servlet.http.HttpServletResponse; **/ @Service @RequiredArgsConstructor +@Slf4j public class TbProductStockDetailServiceImpl implements TbProductStockDetailService { private final TbProductStockDetailRepository tbProductStockDetailRepository; private final TbProductStockDetailMapper tbProductStockDetailMapper; + private final StockCountRepository stockCountRepository; + private final EntityManager entityManager; + private final TbOrderInfoRepository tbOrderInfoRepository; + + @Override public Map queryAll(TbProductStockDetailQueryCriteria criteria, Pageable pageable){ Page page = tbProductStockDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); @@ -66,10 +76,24 @@ public class TbProductStockDetailServiceImpl implements TbProductStockDetailServ Page page = tbProductStockDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); Page map = page.map(tbProductStockDetailMapper::toDto); + + ArrayList> contents = new ArrayList<>(); for (TbProductStockDetailDto tbProductStockDetailDto : map.getContent()) { + Map map1 = BeanUtil.transBean2Map(tbProductStockDetailDto); + if (StrUtil.isNotBlank(tbProductStockDetailDto.getOrderId())) { + TbOrderInfo tbOrderInfo = tbOrderInfoRepository.findById(Integer.valueOf(tbProductStockDetailDto.getOrderId())).orElse(null); + if (tbOrderInfo != null) { + map1.put("orderNo", tbOrderInfo.getOrderNo()); + } + } + contents.add(map1); + tbProductStockDetailDto.setTypes(); } - return PageUtil.toPage(map); + Map info = new LinkedHashMap<>(2); + info.put("content",contents); + info.put("totalElements",page.getTotalElements()); + return info; } @@ -152,4 +176,33 @@ public class TbProductStockDetailServiceImpl implements TbProductStockDetailServ } FileUtil.downloadExcel(list, response); } -} \ No newline at end of file + + @Override + public void addSaleRecord(Integer orderId) { + List stockCountDTOS = stockCountRepository.countStockById(orderId); + log.info("查询到订单id: {}的所有库存数据: {}", orderId, stockCountDTOS); + stockCountDTOS.forEach(s->{ + if (s.getStockCount() > 0) { + TbProductStockDetail productStockDetail = new TbProductStockDetail(); + productStockDetail.setCreatedAt(System.currentTimeMillis()); + productStockDetail.setUpdatedAt(System.currentTimeMillis()); + productStockDetail.setShopId(s.getShopId()); + productStockDetail.setProductId(s.getProId().toString()); + productStockDetail.setProductName(s.getProName()); + productStockDetail.setOrderId(orderId.toString()); +// productStockDetail.setSkuId(s.getSkuId().toString()); + productStockDetail.setIsStock(s.getIsStock());//是否开启库存 + productStockDetail.setLeftNumber(s.getStockNumber()+s.getStockCount());//原库存 + productStockDetail.setSpecSnap(s.getSpecSnap()); + productStockDetail.setUnitName(s.getUnitName()); + productStockDetail.setStockNumber(-Double.valueOf(s.getStockCount())); + productStockDetail.setSourcePath("NORMAL"); + productStockDetail.setType("售出记录"); + productStockDetail.setRemark("售出记录:" + orderId); + productStockDetail.setSubType(-1); + tbProductStockDetailRepository.save(productStockDetail); + } + + }); + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbPlussShopStaffServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbPlussShopStaffServiceImpl.java index 010f349c..0fb4aecb 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbPlussShopStaffServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbPlussShopStaffServiceImpl.java @@ -23,6 +23,7 @@ import cn.ysk.cashier.system.domain.Role; import cn.ysk.cashier.system.domain.User; import cn.ysk.cashier.system.repository.UserRepository; import cn.ysk.cashier.system.service.UserService; +import cn.ysk.cashier.system.service.dto.RoleSmallDto; import cn.ysk.cashier.system.service.dto.UserDto; import cn.ysk.cashier.utils.*; import lombok.RequiredArgsConstructor; @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.util.CollectionUtils; import java.time.Instant; import java.util.*; @@ -77,22 +79,32 @@ public class TbPlussShopStaffServiceImpl implements TbPlussShopStaffService { ValidationUtil.isNull(tbPlussShopStaff.getId(),"TbPlussShopStaff","id",id); TbPlussShopStaffDto dto = tbPlussShopStaffMapper.toDto(tbPlussShopStaff); UserDto userDto = userService.findByName(tbPlussShopStaff.getAccount()); - dto.setUser(userDto); +// dto.setUser(userDto); + if(!CollectionUtils.isEmpty(userDto.getRoles())){ + dto.setRoleId(userDto.getRoles().stream().findFirst().get().getId()); + } + dto.setPhone(userDto.getPhone()); + dto.setPassword("");//不返回密码 return dto; } @Override @Transactional(rollbackFor = Exception.class) public TbPlussShopStaffDto create(TbPlussShopStaff resources) { - if (!PhoneUtil.validator(resources.getAccount())){ + if (!PhoneUtil.validator(resources.getPhone())){ throw new BadRequestException("手机号格式有误"); } - resources.setPassword(MD5Utils.md5("123456")); resources.setCreatedAt(Instant.now().toEpochMilli()); //添加收银系统后台账号 User user = new User(); - user.setPassword(passwordEncoder.encode(resources.getPassword())); + if (StringUtils.isBlank(resources.getPassword())) { + resources.setPassword(MD5Utils.md5("123456")); + user.setPassword(passwordEncoder.encode("123456")); + }else { + user.setPassword(passwordEncoder.encode(resources.getPassword())); + resources.setPassword(MD5Utils.md5(resources.getPassword())); + } user.setUsername(resources.getAccount()); user.setNickName(resources.getName()); user.setPhone(resources.getPhone()); @@ -104,7 +116,11 @@ public class TbPlussShopStaffServiceImpl implements TbPlussShopStaffService { Set roles = new HashSet<>(); Role role = new Role(); - role.setId(2L); + if(resources.getRoleId()!=null){ + role.setId(resources.getRoleId()); + }else { + role.setId(2l); + } roles.add(role); user.setRoles(roles); @@ -124,6 +140,9 @@ public class TbPlussShopStaffServiceImpl implements TbPlussShopStaffService { resources.setUpdatedAt(Instant.now().toEpochMilli()); ValidationUtil.isNull( tbPlussShopStaff.getId(),"TbPlussShopStaff","id",resources.getId()); tbPlussShopStaff.copy(resources); + if (StringUtils.isNotBlank(resources.getPassword())) { + tbPlussShopStaff.setPassword(MD5Utils.md5(resources.getPassword())); + } tbPlussShopStaffRepository.save(tbPlussShopStaff); //修改 sysUser账号 User sysUser = userRepository.findByUsername(tbPlussShopStaff.getAccount()); @@ -133,10 +152,22 @@ public class TbPlussShopStaffServiceImpl implements TbPlussShopStaffService { roles.add(role); sysUser.setRoles(roles); sysUser.setNickName(resources.getName()); + if (StringUtils.isNotBlank(resources.getPassword())) { + sysUser.setPassword(passwordEncoder.encode(resources.getPassword())); + } sysUser.setPhone(resources.getPhone()); userRepository.save(sysUser); } + @Override + @Transactional(rollbackFor = Exception.class) + public void updateStatus(TbPlussShopStaff resources) { + TbPlussShopStaff tbPlussShopStaff = tbPlussShopStaffRepository.findById(resources.getId()).orElseGet(TbPlussShopStaff::new); + tbPlussShopStaff.setUpdatedAt(Instant.now().toEpochMilli()); + tbPlussShopStaff.setStatus(resources.getStatus()); + tbPlussShopStaffRepository.save(tbPlussShopStaff); + } + @Override public void deleteAll(Integer[] ids) { Set sysUserIds=new HashSet<>(); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopUserServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopUserServiceImpl.java index e9d131c2..86393543 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopUserServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopUserServiceImpl.java @@ -1,5 +1,9 @@ package cn.ysk.cashier.service.impl.shopimpl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.ysk.cashier.dto.shop.TbShopRechargeListDto; +import cn.ysk.cashier.dto.shop.TbShopRechargeRespDto; import cn.ysk.cashier.dto.shop.TbShopUserDto; import cn.ysk.cashier.dto.shop.TbShopUserQueryCriteria; import cn.ysk.cashier.mapper.shop.TbShopUserMapper; @@ -22,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.time.Instant; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -45,9 +50,22 @@ public class TbShopUserServiceImpl implements TbShopUserService { @Override public Map queryShopUser(TbShopUserQueryCriteria criteria) { - IPage iPage = shopUserMapper.queryUser(criteria, + IPage iPage = shopUserMapper.queryUser(criteria, criteria.getIsVip(), new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(criteria.getPage(), criteria.getSize())); - return PageUtil.toPlusPage(iPage.getRecords(),Integer.valueOf(iPage.getTotal()+"")); + + for (ShopUserInfoVo shopUserInfoVo : iPage.getRecords()) { + if (StrUtil.isBlank(shopUserInfoVo.getNickName())) { + tbShopUserRepository.findById(shopUserInfoVo.getId()).ifPresent(tbShopUser -> { + shopUserInfoVo.setNickName(tbShopUser.getName()); + shopUserInfoVo.setBirthDay(tbShopUser.getBirthDay()); + shopUserInfoVo.setHeadImg(tbShopUser.getHeadImg()); + shopUserInfoVo.setTelephone(tbShopUser.getTelephone()); + shopUserInfoVo.setTotalScore(0); + }); + } + } + + return PageUtil.toPlusPage(iPage.getRecords(), Integer.valueOf(iPage.getTotal() + "")); } @Override @@ -129,4 +147,34 @@ public class TbShopUserServiceImpl implements TbShopUserService { FileUtil.downloadExcel(list, response); } + @Override + public IPage rechargeList(TbShopRechargeListDto criteria, Pageable pageable) { + if (criteria.getStartTime() == null) { + criteria.setStartTime(DateUtil.parseDate("2024-01-01 00:00:00")); + } + if (criteria.getEndTime() == null) { + criteria.setEndTime(DateUtil.date(Instant.now())); + } + + return shopUserMapper.queryRechargeList(criteria, + new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageable == null ? 0 : pageable.getPageNumber(), pageable == null ? 1000000 : pageable.getPageSize())); + } + + @Override + public void rechargeListDownload(HttpServletResponse response, TbShopRechargeListDto criteria) throws IOException { + List> list = new ArrayList<>(); + IPage page = rechargeList(criteria, null); + for (TbShopRechargeRespDto tbShopRechargeRespDto : page.getRecords()) { + Map map = new LinkedHashMap<>(); + map.put("id", tbShopRechargeRespDto.getId()); + map.put("门店", tbShopRechargeRespDto.getShopName()); + map.put("用户手机号", tbShopRechargeRespDto.getUserPhone()); + map.put("用户名", tbShopRechargeRespDto.getUserName()); + map.put("充值金额", tbShopRechargeRespDto.getRechargeAmount()); + map.put("充值类型", tbShopRechargeRespDto.getRechargeType()); + map.put("充值时间", tbShopRechargeRespDto.getRechargeTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/StockService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/StockService.java index 16e2209d..47329894 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/StockService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/StockService.java @@ -44,4 +44,13 @@ public interface StockService { * @param stockUpdateWarnLineVO 警戒线 */ void updateProductWarnLine(StockUpdateWarnLineVO stockUpdateWarnLineVO); + + /** + * 上下架商品 + * + * @param shopId 店铺id + * @param skuId ski + * @param isGrounding + */ + void grounding(Integer shopId, Integer skuId, Boolean isGrounding); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductStockDetailService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductStockDetailService.java index a3783d29..5764d35e 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductStockDetailService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/product/TbProductStockDetailService.java @@ -86,4 +86,6 @@ public interface TbProductStockDetailService { * @throws IOException / */ void download(List all, HttpServletResponse response) throws IOException; -} \ No newline at end of file + + void addSaleRecord(Integer orderId); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbPlussShopStaffService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbPlussShopStaffService.java index 92a0769f..2b4a93c6 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbPlussShopStaffService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbPlussShopStaffService.java @@ -67,6 +67,8 @@ public interface TbPlussShopStaffService { */ void update(TbPlussShopStaff resources); + void updateStatus(TbPlussShopStaff resources); + /** * 多选删除 * @param ids / diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopUserService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopUserService.java index 2fc389f0..ad4c884b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopUserService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/shop/TbShopUserService.java @@ -1,8 +1,12 @@ package cn.ysk.cashier.service.shop; +import cn.ysk.cashier.dto.shop.TbShopRechargeListDto; +import cn.ysk.cashier.dto.shop.TbShopRechargeRespDto; import cn.ysk.cashier.pojo.shop.TbShopUser; import cn.ysk.cashier.dto.shop.TbShopUserDto; import cn.ysk.cashier.dto.shop.TbShopUserQueryCriteria; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import java.util.Map; import java.util.List; @@ -75,4 +79,14 @@ public interface TbShopUserService { */ void download(List all, HttpServletResponse response) throws IOException; + /** + * 充值记录 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + IPage rechargeList(TbShopRechargeListDto criteria, Pageable pageable); + + void rechargeListDownload(HttpServletResponse response, TbShopRechargeListDto criteria) throws IOException; + } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringCodeUtil.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringCodeUtil.java new file mode 100644 index 00000000..f0e46c1e --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringCodeUtil.java @@ -0,0 +1,200 @@ +package cn.ysk.cashier.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; + +/** + * @author admin + * @description 随机编码生成工具类 + * @date 2020-11-24 16:07 + * @menu + */ +public class StringCodeUtil { + public static enum TYPE { + /** + * 字符型 + */ + LETTER, + /** + * 大写字符型 + */ + CAPITAL, + /** + * 数字型 + */ + NUMBER, + /** + * 符号型 + */ + SIGN, + /** + * 大+小字符 型 + */ + LETTER_CAPITAL, + /** + * 小字符+数字 型 + */ + LETTER_NUMBER, + /** + * 大+小字符+数字 型 + */ + LETTER_CAPITAL_NUMBER, + /** + * 大+小字符+数字+符号 型 + */ + LETTER_CAPITAL_NUMBER_SIGN + } + + private static String[] lowercase = { + "a","b","c","d","e","f","g","h","i","j","k", + "l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + + private static String[] capital = { + "A","B","C","D","E","F","G","H","I","J","K", + "L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; + + private static String[] number = { + "1","2","3","4","5","6","7","8","9","0"}; + + private static String[] sign = { + "~","!","@","#","$","%","^","&","*","(",")","_","+","`","-","=", + "{","}","|",":","\"","<",">","?", + "[","]","\\",";","'",",",".","/"}; + + /** + * 静态随机数 + */ + private static Random random = new Random(); + + + /** + * 获取随机组合码 + * @param num 位数 + * @param type 类型 + * @type + *
字符型 LETTER, + *
大写字符型 CAPITAL, + *
数字型 NUMBER, + *
符号型 SIGN, + *
大+小字符型 LETTER_CAPITAL, + *
小字符+数字 型 LETTER_NUMBER, + *
大+小字符+数字 型 LETTER_CAPITAL_NUMBER, + *
大+小字符+数字+符号 型 LETTER_CAPITAL_NUMBER_SIGN + */ + public static String getRandom(int num,TYPE type){ + ArrayList temp = new ArrayList(); + StringBuffer code = new StringBuffer(); + if(type == TYPE.LETTER){ + temp.addAll(Arrays.asList(lowercase)); + }else if(type == TYPE.CAPITAL){ + temp.addAll(Arrays.asList(capital)); + }else if(type == TYPE.NUMBER){ + temp.addAll(Arrays.asList(number)); + }else if(type == TYPE.SIGN){ + temp.addAll(Arrays.asList(sign)); + }else if(type == TYPE.LETTER_CAPITAL){ + temp.addAll(Arrays.asList(lowercase)); + temp.addAll(Arrays.asList(capital)); + }else if(type == TYPE.LETTER_NUMBER){ + temp.addAll(Arrays.asList(lowercase)); + temp.addAll(Arrays.asList(number)); + }else if(type == TYPE.LETTER_CAPITAL_NUMBER){ + temp.addAll(Arrays.asList(lowercase)); + temp.addAll(Arrays.asList(capital)); + temp.addAll(Arrays.asList(number)); + }else if(type == TYPE.LETTER_CAPITAL_NUMBER_SIGN){ + temp.addAll(Arrays.asList(lowercase)); + temp.addAll(Arrays.asList(capital)); + temp.addAll(Arrays.asList(number)); + temp.addAll(Arrays.asList(sign)); + } + for (int i = 0; i < num; i++) { + code.append(temp.get(random.nextInt(temp.size()))); + } + return code.toString(); + } + + /** + * 手机掩码 + * @param phone + * @return + */ + public static String maskPhone(String phone){ + return wordMask(phone,3,4,"*"); + } + + /** + * 身份证掩码 + * @param idCardNo + * @return + */ + public static String maskIdCardNo(String idCardNo){ + return wordMask(idCardNo,3,3,"*"); + } + + /** + * 真实姓名掩码 + * @param realName + * @return + */ + public static String maskRealName(String realName){ + return wordMask(realName,1,1,"*"); + } + + /** + * 邮箱掩码 + * @param email + * @return + */ + public static String maskEmail(String email){ + return wordMask(email,3,3,"*"); + } + + /** + * QQ掩码 + * @param qq + * @return + */ + public static String maskQQ(String qq){ + return wordMask(qq,3,3,"*"); + } + + /** + * 邮箱掩码 + * @param weChat + * @return + */ + public static String maskWeChat(String weChat){ + return wordMask(weChat,3,3,"*"); + } + + /** + * 对字符串进行脱敏处理 + * @param word 被脱敏的字符 + * @param startLength 被保留的开始长度 0代表不保留 + * @param endLength 被保留的结束长度 0代表不保留 + * @param pad 填充字符 + * */ + public static String wordMask(String word,int startLength ,int endLength,String pad) { + if(word==null) { + return StringUtils.leftPad("", startLength+endLength,pad); + } + if(word.length()<=startLength+endLength) { + return StringUtils.leftPad("", startLength+endLength,pad); + } + String startStr = ""; + String endStr = ""; + int padLength = 0; + if(word.length()>startLength) { + startStr = StringUtils.substring(word, 0,startLength); + } + if(word.length()>startLength+endLength) { + endStr = StringUtils.substring(word, word.length()-endLength); + } + padLength = word.length()-startLength-endLength; + return startStr + StringUtils.repeat(pad, padLength)+endStr; + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java new file mode 100644 index 00000000..fe193ecf --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java @@ -0,0 +1,86 @@ +package cn.ysk.cashier.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +/** + * @author lyf + */ +public class StringUtil { + /** + * 生成指定长度的随机数 + * @param length + * @return + */ + public static String genRandomNum(int length) { + int maxNum = 36; + int i; + int count = 0; + char[] str = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + StringBuffer pwd = new StringBuffer(""); + Random r = new Random(); + while (count < length) { + i = Math.abs(r.nextInt(maxNum)); + pwd.append(str[i]); + count++; + } + return pwd.toString(); + } + + /** + * 生成订单号 + * + * @return + */ + public static synchronized String getBillno() { + StringBuilder billno = new StringBuilder(); + + // 日期(格式:20080524) + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + billno.append(format.format(new Date())); + return billno.toString(); + } + public static JSONArray stringChangeList(String listString){ + // 使用Fastjson将JSON字符串转换为JSONArray对象 + return JSON.parseArray(listString); + + } + + public static String random(int length) { + Random random = new Random(); + String result = ""; + for (int i = 0; i < length; i++) { + result += random.nextInt(10); + } + return result; + } + + private static final String CHINESE_CHARS = "你我他她它们这里那里多少是否好坏快慢上下左右前后高低大小长短方圆胖瘦黑白红绿蓝黄紫粉红桔红橙黄棕灰褐"; + + // 生成随机中文昵称 + public static String generateRandomNickname(int length) { + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < length; i++) { + int index = random.nextInt(CHINESE_CHARS.length()); + char randomChar = CHINESE_CHARS.charAt(index); + sb.append(randomChar); + } + return desensitizeNickname(sb.toString()); + } + + // 对昵称进行脱敏处理 + public static String desensitizeNickname(String nickname) { + if (nickname == null || nickname.length() != 5) { + return nickname; + } + return nickname.charAt(0) + "***" + nickname.charAt(4); + } + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java new file mode 100644 index 00000000..9fa7ad22 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/Utils.java @@ -0,0 +1,18 @@ +package cn.ysk.cashier.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.function.Supplier; + +public class Utils { + private static final Logger log = LoggerFactory.getLogger(Utils.class); + + public static void catchErrNoReturn(Supplier supplier) { + try { + supplier.get(); + }catch (Exception e) { + log.error("执行方法出现异常", e); + } + } +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java new file mode 100644 index 00000000..6c08585c --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java @@ -0,0 +1,76 @@ +package cn.ysk.cashier.utils; + +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 获取验证码相关工具 + * @author 12847 + */ +@Component +public class ValidateCodeUtil { + /** + * 阿里云key + */ + @Value("${aliyun.keyid}") + private String ACCESSKEYID; + /** + * 阿里云secret + */ + @Value("${aliyun.keysecret}") + private String ACCESSKEYSECRET; + /** + * 十小时 + */ + protected static final long MILLIS_MINUTE = 10 *60 * 60 *1000; + + @Autowired + private HttpServletRequest request; + + + /** + * 获取验证码(阿里云) + */ + public SendSmsResponse requestValidateCodeAli(String phone, String checkCode,String templateCode) throws Exception { + Client client = null; + try { + client = createClient(); + } catch (Exception e) { + e.printStackTrace(); + } + // 1.发送短信 + com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest() + .setSignName("银收客") + .setTemplateCode(templateCode) + .setTemplateParam("{\"code\":" +"'"+checkCode +"'"+"}") + .setPhoneNumbers(phone); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + assert client != null; + return client.sendSmsWithOptions(sendSmsRequest, runtime); + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + + } + /** + * 发送短信(阿里云) + * + * @return + * @throws Exception + */ + public Client createClient() throws Exception { + Config config = new Config(); + config.accessKeyId = ACCESSKEYID; + config.accessKeySecret = ACCESSKEYSECRET; + return new com.aliyun.dysmsapi20170525.Client(config); + } + + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/StockV2Vo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/StockV2Vo.java index 4806f913..04f52a8a 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/StockV2Vo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/StockV2Vo.java @@ -8,7 +8,6 @@ import java.util.List; /** * @author GYJ */ -@Data public class StockV2Vo { private String id; private Integer skuId; @@ -25,6 +24,7 @@ public class StockV2Vo { private Object number; private Integer warnLine; private BigDecimal salePrice; + private boolean isGrounding; public StockV2Vo(Integer proId, Integer skuId, String name, String unitName,String specSnap, Object number,Object stockNumber, Integer isDistribute) { this.proId = proId; @@ -80,6 +80,7 @@ public class StockV2Vo { this.warnLine = warnLine; } + public StockV2Vo(Integer id, Integer proId,String img,String name,String unitName, String type, String specSnap, Object isStock, Object number, Integer isDistribute, Integer isPauseSale, boolean isPro, Integer warnLine, BigDecimal sellPrice) { this.id = id.toString() + "-" + proId.toString(); @@ -103,6 +104,156 @@ public class StockV2Vo { this.salePrice = sellPrice; } + + + public StockV2Vo(Integer id, Integer proId,String img,String name,String unitName, String type, String specSnap, + Object isStock, Object number, Integer isDistribute, Integer isPauseSale, boolean isPro, Integer warnLine, BigDecimal sellPrice, boolean isGrounding) { + this.skuId = id; + this.id = id.toString() + "-" + proId.toString(); + if (isPro) { + this.id += proId; + } else { + this.id += id; + } + this.proId = proId; + this.img = img; + this.name = name; + this.unitName = unitName; + setType(type); + this.specSnap = specSnap; + this.isStock = isStock; + this.stockNumber = number; + this.isDistribute = isDistribute; + this.isPauseSale = isPauseSale; + this.warnLine = warnLine; + this.salePrice = sellPrice; + this.isGrounding = isGrounding; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Integer getSkuId() { + return skuId; + } + + public void setSkuId(Integer skuId) { + this.skuId = skuId; + } + + public Integer getProId() { + return proId; + } + + public void setProId(Integer proId) { + this.proId = proId; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } + + public String getType() { + return type; + } + + public String getSpecSnap() { + return specSnap; + } + + public void setSpecSnap(String specSnap) { + this.specSnap = specSnap; + } + + public Object getIsStock() { + return isStock; + } + + public void setIsStock(Object isStock) { + this.isStock = isStock; + } + + public Object getStockNumber() { + return stockNumber; + } + + public void setStockNumber(Object stockNumber) { + this.stockNumber = stockNumber; + } + + public Integer getIsDistribute() { + return isDistribute; + } + + public void setIsDistribute(Integer isDistribute) { + this.isDistribute = isDistribute; + } + + public Integer getIsPauseSale() { + return isPauseSale; + } + + public void setIsPauseSale(Integer isPauseSale) { + this.isPauseSale = isPauseSale; + } + + public Object getNumber() { + return number; + } + + public void setNumber(Object number) { + this.number = number; + } + + public Integer getWarnLine() { + return warnLine; + } + + public void setWarnLine(Integer warnLine) { + this.warnLine = warnLine; + } + + public BigDecimal getSalePrice() { + return salePrice; + } + + public void setSalePrice(BigDecimal salePrice) { + this.salePrice = salePrice; + } + + public boolean getIsGrounding() { + return isGrounding; + } + + public void setIsGrounding(boolean grounding) { + isGrounding = grounding; + } + public void setType(String type) { switch (type) { case "normal": diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java index 139cb711..c95b542b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderInfoVo.java @@ -50,6 +50,8 @@ public class TbOrderInfoVo { private String tableId; + private String tableName; + private BigDecimal smallChange; private String sendType; diff --git a/eladmin-system/src/main/resources/config/application.yml b/eladmin-system/src/main/resources/config/application.yml index fffba41c..79bfa777 100644 --- a/eladmin-system/src/main/resources/config/application.yml +++ b/eladmin-system/src/main/resources/config/application.yml @@ -72,3 +72,9 @@ mybatis-plus: global-config: db-config: id-type: auto +aliyun: + keyid: LTAI5tPdEfYSZcqHbjCrtPRD + keysecret: DZjyHBq3nTujF0NMLxnZgsecU8ZCvy + oss: + bucketname: cashier-oss + endpoint: oss-cn-beijing.aliyuncs.com diff --git a/eladmin-system/src/main/resources/mapper/TbShopSongOrderMapper.xml b/eladmin-system/src/main/resources/mapper/TbShopSongOrderMapper.xml new file mode 100644 index 00000000..53d1218c --- /dev/null +++ b/eladmin-system/src/main/resources/mapper/TbShopSongOrderMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + id + , song_id, song_name, user_id, pay_money, state, create_time, client_type, order_no, from_name, to_name, note + + + + + + + + + + + insert into tb_shop_song_order(song_id, song_name, user_id, pay_money, state, create_time, client_type, + order_no, from_name, to_name, note) + values (#{songId}, #{songName}, #{userId}, #{payMoney}, #{state}, #{createTime}, #{clientType}, #{orderNo}, + #{fromName}, #{toName}, #{note}) + + + + insert into tb_shop_song_order(song_id, song_name, user_id, pay_money, state, create_time, client_type, + order_no, from_name, to_name, note) + values + + (#{entity.songId}, #{entity.songName}, #{entity.userId}, #{entity.payMoney}, #{entity.state}, + #{entity.createTime}, #{entity.clientType}, #{entity.orderNo}, #{entity.fromName}, #{entity.toName}, + #{entity.note}) + + + + + + update tb_shop_song_order + + + song_id = #{songId}, + + + song_name = #{songName}, + + + user_id = #{userId}, + + + pay_money = #{payMoney}, + + + state = #{state}, + + + create_time = #{createTime}, + + + client_type = #{clientType}, + + + order_no = #{orderNo}, + + + from_name = #{fromName}, + + + to_name = #{toName}, + + + note = #{note}, + + + where id = #{id} + + + + + delete + from tb_shop_song_order + where id = #{id} + + + +