diff --git a/src/main/java/com/qs/serve/common/model/enums/SystemModule.java b/src/main/java/com/qs/serve/common/model/enums/SystemModule.java index 1950ace7..b5a7a0bf 100644 --- a/src/main/java/com/qs/serve/common/model/enums/SystemModule.java +++ b/src/main/java/com/qs/serve/common/model/enums/SystemModule.java @@ -12,6 +12,7 @@ import lombok.Getter; public enum SystemModule { QUESTION("qms","问卷"), + BIZ("biz","业务"), BASE("bms","基础档案"), GOODS("goods","商品"), SYSTEM("sys","系统"), diff --git a/src/main/java/com/qs/serve/modules/biz/controller/BizVisitController.java b/src/main/java/com/qs/serve/modules/biz/controller/BizVisitController.java new file mode 100644 index 00000000..d9b82495 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/controller/BizVisitController.java @@ -0,0 +1,103 @@ +package com.qs.serve.modules.biz.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.biz.entity.BizVisit; +import com.qs.serve.modules.biz.service.BizVisitService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 业务 拜访日志 + * @author YenHex + * @since 2022-10-26 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("biz/visit") +public class BizVisitController { + + private BizVisitService bizVisitService; + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + @PreAuthorize("hasRole('biz:visit:query')") + public R> getPage(BizVisit param){ + PageUtil.startPage(); + LambdaQueryWrapper visitWrapper = new LambdaQueryWrapper<>(param); + List list = bizVisitService.list(visitWrapper); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + @SysLog(module = SystemModule.BIZ, title = "拜访日志", biz = BizType.QUERY) + @PreAuthorize("hasRole('biz:visit:query')") + public R getById(@PathVariable("id") String id){ + BizVisit bizVisit = bizVisitService.getById(id); + return R.ok(bizVisit); + } + + + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + @SysLog(module = SystemModule.BIZ, title = "拜访日志", biz = BizType.UPDATE) + @PreAuthorize("hasRole('biz:visit:update')") + public R updateById(@RequestBody @Valid BizVisit param){ + boolean result = bizVisitService.updateById(param); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + @SysLog(module = SystemModule.BIZ, title = "拜访日志", biz = BizType.INSERT) + @PreAuthorize("hasRole('biz:visit:insert')") + public R save(@RequestBody @Valid BizVisit param){ + boolean result = bizVisitService.save(param); + return R.isTrue(result); + } + + /** + * 删除 + * @param id + * @return + */ + @DeleteMapping("/deleteById/{id}") + @SysLog(module = SystemModule.BIZ, title = "拜访日志", biz = BizType.DELETE) + @PreAuthorize("hasRole('biz:visit:delete')") + public R deleteById(@PathVariable("id") Long id){ + boolean result = bizVisitService.removeById(id); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/biz/controller/api/BizVisitApi.java b/src/main/java/com/qs/serve/modules/biz/controller/api/BizVisitApi.java new file mode 100644 index 00000000..c1f946de --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/controller/api/BizVisitApi.java @@ -0,0 +1,139 @@ +package com.qs.serve.modules.biz.controller.api; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.annotation.SysLog; +import com.qs.serve.common.model.dto.PageVo; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.BizType; +import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.modules.biz.entity.BizVisit; +import com.qs.serve.modules.biz.service.BizVisitService; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.service.SysUserService; +import com.qs.serve.modules.wx.entity.WxUser; +import com.qs.serve.modules.wx.service.WxUserService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * API业务 拜访日志 + * @author YenHex + * @since 2022-10-26 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("/api/visit") +public class BizVisitApi { + + private BizVisitService bizVisitService; + private WxUserService wxUserService; + private SysUserService sysUserService; + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + public R> getPage(BizVisit param){ + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0")){ + return R.byEmptyList(); + } + String userId = wxUser.getSysUserId(); + param.setVisitorId(userId); + PageUtil.startPage(); + LambdaQueryWrapper visitWrapper = new LambdaQueryWrapper<>(param); + List list = bizVisitService.list(visitWrapper); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + public R getById(@PathVariable("id") String id){ + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0")){ + return R.ok(); + } + String userId = wxUser.getSysUserId(); + BizVisit bizVisit = bizVisitService.getById(id); + if(!bizVisit.getVisitorId().equals(userId)){ + return R.ok(); + } + return R.ok(bizVisit); + } + + + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/updateById") + public R updateById(@RequestBody @Valid BizVisit param){ + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0")){ + return R.ok(); + } + String userId = wxUser.getSysUserId(); + BizVisit bizVisit = bizVisitService.getById(param.getId()); + if(!bizVisit.getVisitorId().equals(userId)){ + return R.ok(); + } + boolean result = bizVisitService.updateById(param); + return R.isTrue(result); + } + + /** + * 新增 + * @param param + * @return + */ + @PostMapping("/save") + public R save(@RequestBody @Valid BizVisit param){ + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0")){ + return R.ok(); + } + String userId = wxUser.getSysUserId(); + SysUser sysUser = sysUserService.getById(userId); + param.setVisitorId(userId); + param.setVisitorName(sysUser.getName()); + boolean result = bizVisitService.save(param); + return R.isTrue(result); + } + + /** + * 删除 + * @param id + * @return + */ + @DeleteMapping("/deleteById/{id}") + public R deleteById(@PathVariable("id") Long id){ + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0")){ + return R.ok(); + } + String userId = wxUser.getSysUserId(); + BizVisit bizVisit = bizVisitService.getById(id); + if(!bizVisit.getVisitorId().equals(userId)){ + return R.ok(); + } + boolean result = bizVisitService.removeById(id); + return R.isTrue(result); + } + +} + diff --git a/src/main/java/com/qs/serve/modules/biz/entity/BizVisit.java b/src/main/java/com/qs/serve/modules/biz/entity/BizVisit.java new file mode 100644 index 00000000..a6cbfd55 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/entity/BizVisit.java @@ -0,0 +1,97 @@ +package com.qs.serve.modules.biz.entity; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler; +import lombok.Data; +import org.apache.ibatis.type.JdbcType; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 拜访日志 实体类 + * @author YenHex + * @since 2022-10-26 + */ +@Data +@TableName("biz_visit") +public class BizVisit implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 图片 */ + @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) + private String[] photos; + + /** 纬度 */ + @Length(max = 255,message = "纬度长度不能超过255字") + private String localX; + + /** 经度 */ + @Length(max = 255,message = "经度长度不能超过255字") + private String localY; + + /** 地址 */ + @Length(max = 512,message = "地址长度不能超过512字") + private String address; + + /** 类型:单选 【潜在客户签到;培训会议;其他定点签到;在家办公 】 */ + @Length(max = 255,message = "类型:单选 【潜在客户签到;培训会议;其他定点签到;在家办公 】长度不能超过255字") + private String signType; + + /** 拜访人id */ + @Length(max = 32,message = "拜访人id长度不能超过32字") + private String visitorId; + + /** 拜访人 */ + @Length(max = 32,message = "拜访人长度不能超过32字") + private String visitorName; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + +} + diff --git a/src/main/java/com/qs/serve/modules/biz/mapper/BizVisitMapper.java b/src/main/java/com/qs/serve/modules/biz/mapper/BizVisitMapper.java new file mode 100644 index 00000000..6abcea9a --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/mapper/BizVisitMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.biz.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.biz.entity.BizVisit; + +/** + * 拜访日志 Mapper + * @author YenHex + * @date 2022-10-26 + */ +public interface BizVisitMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/biz/service/BizVisitService.java b/src/main/java/com/qs/serve/modules/biz/service/BizVisitService.java new file mode 100644 index 00000000..2b3e8bd4 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/service/BizVisitService.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.biz.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.biz.entity.BizVisit; + +/** + * 拜访日志 服务接口 + * @author YenHex + * @date 2022-10-26 + */ +public interface BizVisitService extends IService { + +} + diff --git a/src/main/java/com/qs/serve/modules/biz/service/impl/BizVisitServiceImpl.java b/src/main/java/com/qs/serve/modules/biz/service/impl/BizVisitServiceImpl.java new file mode 100644 index 00000000..86ca18bf --- /dev/null +++ b/src/main/java/com/qs/serve/modules/biz/service/impl/BizVisitServiceImpl.java @@ -0,0 +1,22 @@ +package com.qs.serve.modules.biz.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.biz.entity.BizVisit; +import com.qs.serve.modules.biz.service.BizVisitService; +import com.qs.serve.modules.biz.mapper.BizVisitMapper; + +/** + * 拜访日志 服务实现类 + * @author YenHex + * @since 2022-10-26 + */ +@Slf4j +@Service +@AllArgsConstructor +public class BizVisitServiceImpl extends ServiceImpl implements BizVisitService { + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java index b5c2e1ac..c558ea8d 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java @@ -12,9 +12,11 @@ import com.qs.serve.modules.bms.entity.bo.BmsSupplierBatchBo; import com.qs.serve.modules.bms.entity.bo.BmsSupplierBo; import com.qs.serve.modules.bms.entity.bo.BmsSupplierParentBo; import com.qs.serve.modules.bms.entity.vo.BmsSupplierTreeVo; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; import com.qs.serve.modules.bms.service.BmsRegionService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam; +import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam2; import com.qs.serve.modules.sys.service.SysUserService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -42,6 +44,7 @@ public class BmsSupplierController { private BmsSupplierService bmsSupplierService; private BmsRegionService bmsRegionService; private SysUserService sysUserService; + private BmsSupplierMapper bmsSupplierMapper; /** * 翻页查询 @@ -116,20 +119,63 @@ public class BmsSupplierController { /** - * 更改客户授权 + * 更改客户授权(用户页面) * @return */ @PostMapping("/relateSuppliers") @PreAuthorize("hasRole('bms:supplier:update')") - public R relateSuppliers(@RequestBody SysRelateSuppliersParam param){ - SysUser user = sysUserService.getById(param.getUserId()); + public R relateSuppliers(@RequestBody @Valid SysRelateSuppliersParam param){ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(BmsSupplier::getId,param.getSupplierIds()); - BmsSupplier bmsSupplier = new BmsSupplier(); - bmsSupplier.setUserCode(user.getCode()); - bmsSupplier.setUserId(user.getId()); - bmsSupplier.setUserName(user.getName()); - bmsSupplierService.update(bmsSupplier,lqw); + lqw.eq(BmsSupplier::getUserId,param.getUserId()); + List supplierIds = param.getSupplierIds(); + List list = bmsSupplierService.list(lqw); + List addIds = null; + if(CollectionUtil.isNotEmpty(list)){ + List rmList = list.stream().filter(sup->!supplierIds.contains(Long.parseLong(sup.getId()))).collect(Collectors.toList()); + List rmIds = rmList.stream().map(obj->Long.parseLong(obj.getId())).collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(rmIds)){ + rmIds.forEach(rmId->bmsSupplierMapper.removeRelateUserInfo(rmId)); + } + addIds = supplierIds.stream() + .filter( + supId-> list.stream().noneMatch(obj->obj.getId().equals(supId.toString())) + ) + .collect(Collectors.toList()); + + }else { + addIds = supplierIds; + } + if(CollectionUtil.isNotEmpty(addIds)){ + SysUser user = sysUserService.getById(param.getUserId()); BmsSupplier bmsSupplier = new BmsSupplier(); + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.in(BmsSupplier::getId,addIds); + bmsSupplier.setUserCode(user.getCode()); + bmsSupplier.setUserId(user.getId()); + bmsSupplier.setUserName(user.getName()); + bmsSupplierService.update(bmsSupplier,lqw2); + } + return R.ok(); + } + + /** + * 更改客户授权 + * @return + */ + @PostMapping("/relateSuppliers2") + @PreAuthorize("hasRole('bms:supplier:update')") + public R relateSuppliers2(@RequestBody SysRelateSuppliersParam2 param){ + if(param.getUserId()==null){ + bmsSupplierMapper.removeRelateUserInfo(param.getSupplierId()); + }else { + SysUser user = sysUserService.getById(param.getUserId()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + BmsSupplier bmsSupplier = new BmsSupplier(); + bmsSupplier.setId(param.getSupplierId().toString()); + bmsSupplier.setUserCode(user.getCode()); + bmsSupplier.setUserId(user.getId()); + bmsSupplier.setUserName(user.getName()); + bmsSupplierService.update(bmsSupplier,lqw); + } return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java index c6f64b77..087769d8 100644 --- a/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java +++ b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.bms.entity.BmsSupplier; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + import java.util.List; /** @@ -16,5 +18,9 @@ public interface BmsSupplierMapper extends BaseMapper { @InterceptorIgnore(tenantLine = "1") List selectSupplierList(@Param("query") BmsSupplier bmsSupplier); + @InterceptorIgnore(tenantLine = "1") + @Update("update bms_supplier set user_id = null,user_code = null, user_name = null where id = #{supplierId}") + int removeRelateUserInfo(@Param("supplierId") Long supplierId); + } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java index 3545ad33..6d206bd3 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java @@ -9,7 +9,6 @@ import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.TreeUtil; -import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo; import com.qs.serve.modules.goods.entity.bo.GoodsCategoryTreeVo; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -74,7 +73,7 @@ public class GoodsCategoryController { List treeVoList = list.stream().map(cate->{ GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo()); treeNode.setId(cate.getId()+""); - treeNode.setParentId(cate.getParentId()); + treeNode.setParentId(cate.getParentId().toString()); treeNode.setSort(0); return treeNode; }).collect(Collectors.toList()); diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java index ab00c957..d3705431 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java @@ -7,7 +7,9 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.PageUtil; +import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; +import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -31,6 +33,7 @@ import java.util.List; public class GoodsSkuController { private GoodsSkuService goodsSkuService; + private GoodsSkuSpecValueService goodsSkuSpecValueService; /** * 翻页查询 @@ -58,8 +61,6 @@ public class GoodsSkuController { return R.ok(goodsSku); } - - /** * 根据ID更新 * @param param @@ -96,6 +97,12 @@ public class GoodsSkuController { @PreAuthorize("hasRole('goods:sku:delete')") public R deleteById(@PathVariable("id") String id){ boolean result = goodsSkuService.removeById(id); + if(result){ + //删除商品规格值 + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(GoodsSkuSpecValue::getSkuId,id); + goodsSkuSpecValueService.remove(lqw2); + } return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java index 3edf24da..c9b92915 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java @@ -7,7 +7,10 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.PageUtil; +import com.qs.serve.modules.goods.entity.GoodsSku; +import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue; import com.qs.serve.modules.goods.entity.GoodsSpec; +import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; import com.qs.serve.modules.goods.service.GoodsSpecService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,9 +34,9 @@ import java.util.List; @RequestMapping("goods/specValue") public class GoodsSpecValueController { - private GoodsSpecValueService goodsSpecValueService; - private GoodsSpecService goodsSpecService; + private GoodsSpecValueService goodsSpecValueService; + private GoodsSkuSpecValueService goodsSkuSpecValueService; /** * 规格 列表 @@ -46,7 +49,6 @@ public class GoodsSpecValueController { return R.ok(list); } - /** * 规格值 翻页 * @param param @@ -111,9 +113,14 @@ public class GoodsSpecValueController { @SysLog(module = SystemModule.GOODS, title = "规格值", biz = BizType.DELETE) @PreAuthorize("hasRole('goods:specValue:delete')") public R deleteById(@PathVariable("id") String id){ - //todo 含有正在使用的商品无法删除 + //含有正在使用的商品无法删除 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(GoodsSkuSpecValue::getSpecValueId,id); + long count = goodsSkuSpecValueService.count(lqw); + if(count>0L){ + return R.error("规格值使用中,删除失败"); + } boolean result = goodsSpecValueService.removeById(id); - return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java index 4054a6f2..b5c3920f 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java @@ -8,9 +8,15 @@ import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.ValidateTools; +import com.qs.serve.modules.goods.entity.GoodsSku; +import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue; +import com.qs.serve.modules.goods.entity.GoodsSpuSpec; import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuEditBo; import com.qs.serve.modules.goods.entity.vo.GoodsSpuVo; +import com.qs.serve.modules.goods.service.GoodsSkuService; +import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; +import com.qs.serve.modules.goods.service.GoodsSpuSpecService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -33,7 +39,10 @@ import java.util.List; @RequestMapping("goods/spu") public class GoodsSpuController { + private GoodsSkuService goodsSkuService; private GoodsSpuService goodsSpuService; + private GoodsSpuSpecService goodsSpuSpecService; + private GoodsSkuSpecValueService goodsSkuSpecValueService; /** * 翻页搜索 @@ -86,6 +95,20 @@ public class GoodsSpuController { public R deleteById(@PathVariable("id") String id){ //todo 拦截删除商品 boolean result = goodsSpuService.removeById(id); + if(result){ + //删除商品规格 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(GoodsSpuSpec::getSpuId,id); + goodsSpuSpecService.remove(lqw); + //删除商品规格值 + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(GoodsSkuSpecValue::getSpuId,id); + goodsSkuSpecValueService.remove(lqw2); + //删除商品sku + LambdaQueryWrapper lqw3 = new LambdaQueryWrapper<>(); + lqw3.eq(GoodsSku::getSpuId,id); + goodsSkuService.remove(lqw3); + } return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java index 2d63463e..193d7f0c 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java @@ -24,10 +24,10 @@ import java.util.List; * @author YenHex * @since 2022-10-09 */ -@Slf4j -@AllArgsConstructor -@RestController -@RequestMapping("goods/spuSpec") +//@Slf4j +//@AllArgsConstructor +//@RestController +//@RequestMapping("goods/spuSpec") public class GoodsSpuSpecController { private GoodsSpuSpecService goodsSpuSpecService; diff --git a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java index 1ca414f3..a57443a0 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java @@ -46,7 +46,7 @@ public class GoodsCategoryApi { List treeVoList = list.stream().map(cate->{ GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo()); treeNode.setId(cate.getId()+""); - treeNode.setParentId(cate.getParentId()); + treeNode.setParentId(cate.getParentId().toString()); treeNode.setSort(0); return treeNode; }).collect(Collectors.toList()); diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java index f91da197..93bb1153 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java @@ -30,16 +30,13 @@ public class GoodsCategory implements Serializable { private Long id; /** (1:开启;0:关闭) */ - @NotBlank(message = "(1:开启;0:关闭)不能为空") - @Length(max = 2,message = "(1:开启;0:关闭)长度不能超过2字") - private String enable; + private Integer enable; @NotBlank(message = "编码不能为空") private String code; /** 父分类编号 */ - @Length(max = 32,message = "父分类编号长度不能超过32字") - private String parentId; + private Long parentId; /** 名称 */ @Length(max = 16,message = "名称长度不能超过16字") diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSku.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSku.java index aa7e9781..388e45bb 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSku.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSku.java @@ -71,9 +71,7 @@ public class GoodsSku implements Serializable { private Integer minPurchase; /** 是否启用1、是;0否 */ - @NotBlank(message = "是否启用1、是;0否不能为空") - @Length(max = 2,message = "是否启用1、是;0否长度不能超过2字") - private String enable; + private Integer enable; /** 单位id */ private Long unitId; @@ -118,5 +116,9 @@ public class GoodsSku implements Serializable { @TableField(exist = false) private List selectSkuIds; + + /** 是否上架(1是 0否) */ + @TableField(exist = false) + private Integer querySpuShelf; } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java index b57d2d39..6e7043bd 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java @@ -65,9 +65,7 @@ public class GoodsSpu implements Serializable { private String[] picUrls; /** 是否上架(1是 0否) */ - @NotBlank(message = "是否上架(1是 0否)不能为空") - @Length(max = 2,message = "是否上架(1是 0否)长度不能超过2字") - private String shelf; + private Integer shelf; /** 排序字段 */ @NotNull(message = "排序字段不能为空") diff --git a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodSkuVo.java b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodSkuVo.java index e3d24c1f..3f6d1e60 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodSkuVo.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/vo/GoodSkuVo.java @@ -15,6 +15,6 @@ public class GoodSkuVo extends GoodsSku { private Long spuId; /** 是否上架(1是 0否) */ - private String shelf; + private Integer shelf; } diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java index 509610de..954cf28c 100644 --- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java @@ -92,6 +92,10 @@ public class GoodsSpuServiceImpl extends ServiceImpl im GoodsCategory category = goodsCategoryService.getById(spuEditBo.getCategoryId()); relateCate(spu,category); this.saveOrUpdate(spu); + if(spuId==null){ + //保存spu与规格关联 + insertSpuSpec(spu.getId()); + } } @@ -149,23 +153,7 @@ public class GoodsSpuServiceImpl extends ServiceImpl im if(spu.getId()==null){ this.save(spu); //保存spu与规格关联 - List spuSpecList = new ArrayList<>(); - GoodsSpuSpec spuSpec = new GoodsSpuSpec(); - spuSpec.setSpuId(spu.getId()); - spuSpec.setSpecId(1L); - spuSpec.setSort(2); - spuSpecList.add(spuSpec); - GoodsSpuSpec spuSpec2 = new GoodsSpuSpec(); - spuSpec2.setSpuId(spu.getId()); - spuSpec2.setSpecId(2L); - spuSpec2.setSort(1); - spuSpecList.add(spuSpec2); - GoodsSpuSpec spuSpec3 = new GoodsSpuSpec(); - spuSpec3.setSpuId(spu.getId()); - spuSpec3.setSpecId(3L); - spuSpec3.setSort(1); - spuSpecList.add(spuSpec3); - goodsSpuSpecService.saveBatch(spuSpecList); + insertSpuSpec(spu.getId()); }else { this.updateById(spu); } @@ -194,7 +182,7 @@ public class GoodsSpuServiceImpl extends ServiceImpl im goodsUnit.setName(tasteProduct.getUnit()); goodsUnitService.save(goodsUnit); } - goodsSku.setEnable("1"); + goodsSku.setEnable(1); goodsSku.setUnitId(goodsUnit.getId()); goodsSku.setUnitName(goodsUnit.getName()); } @@ -227,10 +215,10 @@ public class GoodsSpuServiceImpl extends ServiceImpl im */ private void relateCate(GoodsSpu spu,GoodsCategory category){ spu.setCategoryLast(category.getId()+""); - if(!category.getParentId().equals("0")){ + if(!category.getParentId().toString().equals("0")){ GoodsCategory categorySecond = goodsCategoryService.getById(category.getParentId()); - if(!categorySecond.getParentId().equals("0")){ - spu.setCategoryFirst(categorySecond.getParentId()); + if(!categorySecond.getParentId().toString().equals("0")){ + spu.setCategoryFirst(categorySecond.getParentId()+""); spu.setCategorySecond(categorySecond.getId()+""); spu.setCategoryThird(category.getId()+""); }else { @@ -244,5 +232,29 @@ public class GoodsSpuServiceImpl extends ServiceImpl im } } + /** + * 初始化商品规格关联 + * @param spuId + */ + private void insertSpuSpec(Long spuId){ + List spuSpecList = new ArrayList<>(); + GoodsSpuSpec spuSpec = new GoodsSpuSpec(); + spuSpec.setSpuId(spuId); + spuSpec.setSpecId(1L); + spuSpec.setSort(2); + spuSpecList.add(spuSpec); + GoodsSpuSpec spuSpec2 = new GoodsSpuSpec(); + spuSpec2.setSpuId(spuId); + spuSpec2.setSpecId(2L); + spuSpec2.setSort(1); + spuSpecList.add(spuSpec2); + GoodsSpuSpec spuSpec3 = new GoodsSpuSpec(); + spuSpec3.setSpuId(spuId); + spuSpec3.setSpecId(3L); + spuSpec3.setSort(1); + spuSpecList.add(spuSpec3); + goodsSpuSpecService.saveBatch(spuSpecList); + } + } diff --git a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java index 7ab15e60..3eb5767d 100644 --- a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java +++ b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java @@ -63,27 +63,11 @@ public class OmsOrderApi { */ @GetMapping("/getById/{id}") @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.QUERY) - @PreAuthorize("hasRole('oms:order:query')") public R getById(@PathVariable("id") String id){ OmsOrder omsOrder = omsOrderService.getById(id); return R.ok(omsOrder); } - - - /** - * 新增订单 - * @param param - * @return - */ - @PostMapping("/save") - @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.INSERT) - @PreAuthorize("hasRole('oms:order:insert')") - public R save(@RequestBody @Valid OmsOrder param){ - boolean result = omsOrderService.save(param); - return R.isTrue(result); - } - /** * 删除订单 * @param id @@ -91,7 +75,6 @@ public class OmsOrderApi { */ @DeleteMapping("/deleteById/{id}") @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.DELETE) - @PreAuthorize("hasRole('oms:order:delete')") public R deleteById(@PathVariable("id") String id){ boolean result = omsOrderService.removeById(id); return R.isTrue(result); diff --git a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsShoppingCartApi.java b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsShoppingCartApi.java index b00b7e53..9c354bad 100644 --- a/src/main/java/com/qs/serve/modules/oms/controller/api/OmsShoppingCartApi.java +++ b/src/main/java/com/qs/serve/modules/oms/controller/api/OmsShoppingCartApi.java @@ -42,7 +42,6 @@ public class OmsShoppingCartApi { private OmsShoppingCartService omsShoppingCartService; private GoodsSkuSpecValueService goodsSkuSpecValueService; private BmsRuleMainService bmsRuleMainService; - private BmsSupplierService bmsSupplierService; private GoodsSpuService goodsSpuService; private GoodsSkuService goodsSkuService; private WxUserService wxUserService; @@ -56,47 +55,14 @@ public class OmsShoppingCartApi { public R> getPage(OmsShoppingCart param){ BmsSupplier supplier = AuthContextUtils.getCurrentSupplier(); WxUser wxUser = wxUserService.getCurrentWxUser(true); - if(wxUser==null||supplier==null){ + if(wxUser==null){ return R.byEmptyList(); } LambdaQueryWrapper shoppingCartWrapper = new LambdaQueryWrapper<>(param); shoppingCartWrapper.eq(OmsShoppingCart::getUserId,wxUser.getSysUserId()); PageUtil.startPage(); List shoppingCarts = omsShoppingCartService.list(shoppingCartWrapper); - //校验 - List skuIds = shoppingCarts.stream().map(OmsShoppingCart::getSkuId).collect(Collectors.toList()); - GoodsSku goodsSku = new GoodsSku(); - goodsSku.setSelectSkuIds(skuIds); - //过滤无效sku - List goodsSkus = goodsSkuService.selectSkuVo(goodsSku); - List invalidSkus = goodsSkus.stream().filter(vo->vo.getShelf().equals("0")||vo.getEnable().equals("0")).collect(Collectors.toList()); - if(CollectionUtil.isNotEmpty(invalidSkus)){ - for (GoodSkuVo invalidSku : invalidSkus) { - for (OmsShoppingCart shoppingCart : shoppingCarts) { - if(shoppingCart.getSkuId().equals(invalidSku.getId())){ - shoppingCart.setErrCode(1); - shoppingCart.setErrMessage("已下架"); - break; - } - } - } - } - goodsSkus = goodsSkus.stream().filter(vo->vo.getShelf().equals("1")&&vo.getEnable().equals("1")).collect(Collectors.toList()); - //todo 检验库存 - //检验规格拦截 - List goodsSkuEntities = goodsSkus.stream().map(vo-> CopierUtil.copy(vo,new GoodsSku())).collect(Collectors.toList()); - List invalidSkuIds = bmsRuleMainService.checkErrSkuIds(supplier,goodsSkuEntities); - if(CollectionUtil.isNotEmpty(invalidSkuIds)){ - for (Long invalidSkuId : invalidSkuIds) { - for (OmsShoppingCart shoppingCart : shoppingCarts) { - if(shoppingCart.getSkuId().equals(invalidSkuId)){ - shoppingCart.setErrCode(1); - shoppingCart.setErrMessage("已不符合商品规则"); - break; - } - } - } - } + omsShoppingCartService.checkShoppingCarts(supplier,shoppingCarts,false); return R.byPageHelperList(shoppingCarts); } @@ -128,7 +94,7 @@ public class OmsShoppingCartApi { WxUser wxUser = wxUserService.getCurrentWxUser(true); shoppingCart.setUserId(wxUser.getSysUserId()); GoodsSku goodsSku = goodsSkuService.getById(shoppingCart.getSkuId()); - if(!goodsSku.getEnable().equals("1")){ + if(!goodsSku.getEnable().equals(1)){ return R.error("商品项["+goodsSku.getSpecInfos()+"]停用中"); } shoppingCart.setPicUrl(goodsSku.getPicUrl()); diff --git a/src/main/java/com/qs/serve/modules/oms/entity/dto/ShoppingCartsCheckResult.java b/src/main/java/com/qs/serve/modules/oms/entity/dto/ShoppingCartsCheckResult.java new file mode 100644 index 00000000..7086a7de --- /dev/null +++ b/src/main/java/com/qs/serve/modules/oms/entity/dto/ShoppingCartsCheckResult.java @@ -0,0 +1,8 @@ +package com.qs.serve.modules.oms.entity.dto; + +/** + * @author YenHex + * @since 2022/10/26 + */ +public class ShoppingCartsCheckResult { +} diff --git a/src/main/java/com/qs/serve/modules/oms/service/OmsShoppingCartService.java b/src/main/java/com/qs/serve/modules/oms/service/OmsShoppingCartService.java index 25771270..b004c009 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/OmsShoppingCartService.java +++ b/src/main/java/com/qs/serve/modules/oms/service/OmsShoppingCartService.java @@ -1,7 +1,9 @@ package com.qs.serve.modules.oms.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.oms.entity.OmsShoppingCart; +import com.qs.serve.modules.oms.entity.dto.ShoppingCartsCheckResult; import java.util.List; @@ -14,5 +16,15 @@ public interface OmsShoppingCartService extends IService { List listByIds(List ids,String supplierId); + + /** + * 检测购物车 + * @param supplier + * @param shoppingCarts + * @param throwEx 购物车不抛异常 + * @return + */ + ShoppingCartsCheckResult checkShoppingCarts(BmsSupplier supplier, List shoppingCarts, boolean throwEx); + } diff --git a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java index ea51deec..1cd745c3 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java @@ -42,38 +42,29 @@ public class OmsOrderServiceImpl extends ServiceImpl im private OmsShoppingCartService omsShoppingCartService; private GoodsSkuService goodsSkuService; private GoodsSpuService goodsSpuService; - private BmsRuleMainService bmsRuleMainService; private BmsSupplierAddressService bmsSupplierAddressService; @Override public OmsConfirmOrderResult generateConfirmOrder(OmsConfirmOrderBo confirmOrder) { BmsSupplier supplier = AuthContextUtils.getCurrentSupplier(); - List skuIds; + //购物车 + List shoppingCarts; if(CollectionUtil.isNotEmpty(confirmOrder.getShoppingCartIds())){ - //购物车 - List shoppingCarts = omsShoppingCartService.listByIds(confirmOrder.getShoppingCartIds(),supplier.getId()); - skuIds = shoppingCarts.stream().map(OmsShoppingCart::getSkuId).collect(Collectors.toList()); + shoppingCarts = omsShoppingCartService.listByIds(confirmOrder.getShoppingCartIds(),supplier.getId()); }else { - //立即购买 - skuIds = Arrays.asList(confirmOrder.getSkuId()); - } - GoodsSku goodsSku = new GoodsSku(); - goodsSku.setSelectSkuIds(skuIds); - //过滤无效sku - List goodsSkus = goodsSkuService.selectSkuVo(goodsSku); - List invalidSkus = goodsSkus.stream().filter(vo->vo.getShelf().equals("0")||vo.getEnable().equals("0")).collect(Collectors.toList()); - if(CollectionUtil.isNotEmpty(invalidSkus)){ - Assert.throwEx("部分商品停用或下架了"); - } - goodsSkus = goodsSkus.stream().filter(vo->vo.getShelf().equals("1")&&vo.getEnable().equals("1")).collect(Collectors.toList()); - //todo 检验库存 - //检验规格拦截 - List goodsSkuEntities = goodsSkus.stream().map(vo-> CopierUtil.copy(vo,new GoodsSku())).collect(Collectors.toList()); - List invalidSkuIds = bmsRuleMainService.checkErrSkuIds(supplier,goodsSkuEntities); - if(CollectionUtil.isNotEmpty(invalidSkuIds)){ - Assert.throwEx("客户不符合部分商品规则"); + //立即购买,生成临时购物车 + GoodsSku goodsSku = goodsSkuService.getById(confirmOrder.getSkuId()); + OmsShoppingCart shoppingCart = new OmsShoppingCart(); + shoppingCart.setId(0L); + shoppingCart.setSpuId(goodsSku.getSpuId()); + shoppingCart.setSkuId(confirmOrder.getSkuId()); + shoppingCart.setQuantity(confirmOrder.getQuantity()); + shoppingCart.setSpecInfo(goodsSku.getSpecInfos()); + shoppingCart.setPicUrl(goodsSku.getPicUrl()); + shoppingCarts = Arrays.asList(shoppingCart); } + omsShoppingCartService.checkShoppingCarts(supplier,shoppingCarts,true); OmsCalcAmount calcAmount = new OmsCalcAmount(); //todo 计算供应商折扣 //todo 计算是否有活动优惠 diff --git a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsShoppingCartServiceImpl.java b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsShoppingCartServiceImpl.java index 477caf39..bf0fc76a 100644 --- a/src/main/java/com/qs/serve/modules/oms/service/impl/OmsShoppingCartServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/oms/service/impl/OmsShoppingCartServiceImpl.java @@ -2,6 +2,16 @@ package com.qs.serve.modules.oms.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.service.BmsRuleMainService; +import com.qs.serve.modules.goods.entity.GoodsSku; +import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; +import com.qs.serve.modules.goods.service.GoodsSkuService; +import com.qs.serve.modules.goods.service.GoodsSpuService; +import com.qs.serve.modules.oms.entity.dto.ShoppingCartsCheckResult; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -10,6 +20,7 @@ import com.qs.serve.modules.oms.service.OmsShoppingCartService; import com.qs.serve.modules.oms.mapper.OmsShoppingCartMapper; import java.util.List; +import java.util.stream.Collectors; /** * 购物车 服务实现类 @@ -21,6 +32,10 @@ import java.util.List; @AllArgsConstructor public class OmsShoppingCartServiceImpl extends ServiceImpl implements OmsShoppingCartService { + private GoodsSpuService goodsSpuService; + private GoodsSkuService goodsSkuService; + private BmsRuleMainService bmsRuleMainService; + @Override public List listByIds(List ids, String supplierId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); @@ -29,5 +44,52 @@ public class OmsShoppingCartServiceImpl extends ServiceImpl shoppingCarts, boolean throwEx){ + ShoppingCartsCheckResult cartsCheckResult = new ShoppingCartsCheckResult(); + //校验 + List skuIds = shoppingCarts.stream().map(OmsShoppingCart::getSkuId).collect(Collectors.toList()); + GoodsSku goodsSku = new GoodsSku(); + goodsSku.setSelectSkuIds(skuIds); + goodsSku.setEnable(1); + goodsSku.setQuerySpuShelf(1); + List goodsSkus = goodsSkuService.selectSkuVo(goodsSku); + for (OmsShoppingCart shoppingCart : shoppingCarts) { + boolean isOk = goodsSkus.stream().anyMatch(vo -> { + if(vo.getShelf().equals(0)||vo.getEnable().equals(0)){ + return false; + } + return shoppingCart.getSkuId().equals(vo.getId()); + }); + if(!isOk){ + if(throwEx){ + Assert.throwEx("部分商已下架"); + } + shoppingCart.setErrCode(1); + shoppingCart.setErrMessage("已下架"); + } + } + goodsSkus = goodsSkus.stream().filter(vo->vo.getShelf().equals(1)&&vo.getEnable().equals(1)).collect(Collectors.toList()); + //todo 检验库存 + //检验规格拦截 + List goodsSkuEntities = goodsSkus.stream().map(vo-> CopierUtil.copy(vo,new GoodsSku())).collect(Collectors.toList()); + List invalidSkuIds = bmsRuleMainService.checkErrSkuIds(supplier,goodsSkuEntities); + if(CollectionUtil.isNotEmpty(invalidSkuIds)){ + for (Long invalidSkuId : invalidSkuIds) { + for (OmsShoppingCart shoppingCart : shoppingCarts) { + if(shoppingCart.getSkuId().equals(invalidSkuId)){ + if(throwEx){ + Assert.throwEx("客户不符合部分商品规则"); + } + shoppingCart.setErrCode(1); + shoppingCart.setErrMessage("已不符合商品规则"); + break; + } + } + } + } + return cartsCheckResult; + } + } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java index e29e391d..b92a32e8 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java @@ -55,7 +55,9 @@ public class SysUserController { @GetMapping("/tree") @PreAuthorize("hasRole('sys:user:query')") public R> getTree(){ - List sysUsers = sysUserService.list(); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SysUser::getSalesFlag,1); + List sysUsers = sysUserService.list(lqw); List userSales = sysUserSalesService.list(); for (SysUser sysUser : sysUsers) { sysUser.setParentId("0"); @@ -317,12 +319,23 @@ public class SysUserController { @Transactional(rollbackFor = Exception.class) public R updateSalesParent(@RequestBody @Valid SysUserParentParam userBo){ final String pid = userBo.getParentId(); - List sysUserSalesList = userBo.getUserIds().stream().map(uid->{ + final SysUserSales userSales = sysUserSalesService.getById(pid); + boolean isExist = userBo.getUserIds().stream().filter(StringUtils::hasText).anyMatch(objId->userSales.getPid().equals(objId)); + if(isExist&&userBo.getUserIds().size()>1){ + return R.error("多节点操作出现递归数据"); + } + List sysUserSalesList = userBo.getUserIds().stream().filter(StringUtils::hasText).map(uid->{ SysUserSales sysUserSales = new SysUserSales(); sysUserSales.setUserId(uid); sysUserSales.setPid(pid); return sysUserSales; }).collect(Collectors.toList()); + if(isExist){ + SysUserSales sysUserSales = new SysUserSales(); + sysUserSales.setUserId(userSales.getPid()); + sysUserSales.setPid(userSales.getUserId()); + sysUserSalesList.add(sysUserSales); + } sysUserSalesService.saveOrUpdateBatch(sysUserSalesList); return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java b/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java new file mode 100644 index 00000000..a8d8fac4 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/controller/api/SysDictApi.java @@ -0,0 +1,51 @@ +package com.qs.serve.modules.sys.controller.api; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.util.PageUtil; +import com.qs.serve.common.util.StringUtils; +import com.qs.serve.modules.sys.entity.SysDict; +import com.qs.serve.modules.sys.service.SysDictService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * API系统 字典 + * @author YenHex + * @since 2022-05-20 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("api/dict") +public class SysDictApi { + + private SysDictService sysDictService; + + /** + * 列表查询 + * @param group 分组key + * @return + */ + @GetMapping("/list") + public R getList(String group){ + if(StringUtils.hasEmpty(group)){ + return R.error("查询参数为空"); + } + PageUtil.startPage(); + LambdaQueryWrapper dictWrapper = new LambdaQueryWrapper<>(); + dictWrapper.eq(SysDict::getGroupKey,group); + dictWrapper.orderByDesc(SysDict::getSort); + List list = sysDictService.list(dictWrapper); + return R.ok(list); + } + + + +} + diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam.java index f0d0659b..cf019cff 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam.java +++ b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.sys.entity.bo; import lombok.Data; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -11,8 +12,15 @@ import java.util.List; @Data public class SysRelateSuppliersParam { + /** + * 用户ID。当user==null,为清楚客户绑定 + */ String userId; + /** + * 供应商id列表 + */ + @NotNull List supplierIds; } diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam2.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam2.java new file mode 100644 index 00000000..b703646e --- /dev/null +++ b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysRelateSuppliersParam2.java @@ -0,0 +1,26 @@ +package com.qs.serve.modules.sys.entity.bo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author YenHex + * @since 2022/10/25 + */ +@Data +public class SysRelateSuppliersParam2 { + + /** + * 用户ID。当user==null,为清楚客户绑定 + */ + String userId; + + /** + * 供应商id列表 + */ + @NotNull + Long supplierId; + +} diff --git a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserParentParam.java b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserParentParam.java index 46c7b879..930e9573 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserParentParam.java +++ b/src/main/java/com/qs/serve/modules/sys/entity/bo/SysUserParentParam.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.sys.entity.bo; import lombok.Data; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; @@ -21,7 +22,7 @@ public class SysUserParentParam { /** * 父级id */ - @NotNull + @NotBlank private String parentId; } diff --git a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java index 5183239b..ed6a14ad 100644 --- a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java +++ b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java @@ -43,6 +43,7 @@ public class WxUserController { public R> getList(WxUser param){ PageUtil.startPage(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + lqw.eq(WxUser::getFirstFlag,1); if(param.getNotBindFlag()!=null&¶m.getNotBindFlag().equals(1)){ lqw.isNull(WxUser::getPhone).or().eq(WxUser::getPhone,""); }else if (param.getNotBindFlag()!=null&¶m.getNotBindFlag().equals(0)){ @@ -76,12 +77,22 @@ public class WxUserController { return R.error("该微信用户已被绑定"); } SysUser sysUser = sysUserService.getById(param.getSysUserId()); - WxUser updVo = new WxUser(); - updVo.setId(wxUser.getId()); - updVo.setSysUserId(sysUser.getId()); - updVo.setEmpName(sysUser.getName()); - updVo.setPhone(sysUser.getMobile()); - wxUserService.updateById(updVo); + if(!StringUtils.hasText(wxUser.getUnionId())){ + WxUser updVo = new WxUser(); + updVo.setId(wxUser.getId()); + updVo.setSysUserId(sysUser.getId()); + updVo.setEmpName(sysUser.getName()); + updVo.setPhone(sysUser.getMobile()); + wxUserService.updateById(updVo); + }else { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getUnionId,wxUser.getUnionId()); + WxUser updVo = new WxUser(); + updVo.setSysUserId(sysUser.getId()); + updVo.setEmpName(sysUser.getName()); + updVo.setPhone(sysUser.getMobile()); + wxUserService.update(updVo,lqw); + } return R.ok(); } @@ -94,10 +105,20 @@ public class WxUserController { public R rmBind(@RequestBody @Valid WxUserRmBindBo param){ if(StringUtils.hasText(param.getWxUserId())){ WxUser wxUser = wxUserService.getById(param.getWxUserId()); - wxUser.setSysUserId("0"); - wxUser.setEmpName(wxUser.getNickName()); - wxUser.setPhone(""); - wxUserService.updateById(wxUser); + if(!StringUtils.hasText(wxUser.getUnionId())){ + wxUser.setSysUserId("0"); + wxUser.setEmpName(wxUser.getNickName()); + wxUser.setPhone(""); + wxUserService.updateById(wxUser); + }else { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getUnionId,wxUser.getUnionId()); + WxUser updVo = new WxUser(); + updVo.setSysUserId("0"); + updVo.setEmpName(wxUser.getNickName()); + updVo.setPhone(""); + wxUserService.update(updVo,lqw); + } }else if (StringUtils.hasText(param.getSysUserId())){ SysUser sysUser = sysUserService.getById(param.getSysUserId()); List wxUserList = wxUserService.getBySysUserId(sysUser.getId()); @@ -111,27 +132,5 @@ public class WxUserController { return R.ok(); } - /** - * 新增微信用户 - * @param param - * @return - */ -// @PostMapping("/save") -// public R save(@RequestBody @Valid WxUser param){ -// boolean result = wxUserService.save(param); -// return R.isTrue(result); -// } - - /** - * 删除微信用户 - * @param id - * @return - */ -// @DeleteMapping("/deleteById/{id}") -// public R deleteById(@PathVariable("id") String id){ -// boolean result = wxUserService.removeById(id); -// return R.isTrue(result); -// } - } diff --git a/src/main/java/com/qs/serve/modules/wx/entity/WxUser.java b/src/main/java/com/qs/serve/modules/wx/entity/WxUser.java index 2d96d66e..503e6c69 100644 --- a/src/main/java/com/qs/serve/modules/wx/entity/WxUser.java +++ b/src/main/java/com/qs/serve/modules/wx/entity/WxUser.java @@ -133,6 +133,9 @@ public class WxUser implements Serializable { @JsonIgnore private Boolean delFlag; + @JsonIgnore + private Integer firstFlag; + /** * 为绑定标识,当值=1表未绑定用户 */ diff --git a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java index 27d79afb..d9d5a934 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java +++ b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java @@ -25,6 +25,7 @@ public interface WxUserService extends IService { void syncSubscribe(); + List getByUnionId(String unionId); List getBySysUserId(String userId); List getBySysUserIds(List userIds); diff --git a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java index 43cb437d..6eb8af76 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java @@ -7,10 +7,7 @@ import com.qs.serve.common.framework.security.model.LoginUserType; import com.qs.serve.common.model.consts.GySysConst; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.HttpCode; -import com.qs.serve.common.util.Assert; -import com.qs.serve.common.util.AuthContextUtils; -import com.qs.serve.common.util.CollectionUtil; -import com.qs.serve.common.util.JsonUtil; +import com.qs.serve.common.util.*; import com.qs.serve.modules.wx.common.conf.WxMpConfig; import com.qs.serve.modules.wx.common.consts.WxStatusConst; import com.qs.serve.modules.wx.entity.WxApp; @@ -86,6 +83,8 @@ public class WxUserServiceImpl extends ServiceImpl impleme } + + @Override public WxUser getCurrentWxUser() { return this.getCurrentWxUser(false); @@ -115,6 +114,7 @@ public class WxUserServiceImpl extends ServiceImpl impleme wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); + wxUser.setUnionId(wxMpUser.getUnionId()); } catch (WxErrorException e) { e.printStackTrace(); } @@ -127,6 +127,13 @@ public class WxUserServiceImpl extends ServiceImpl impleme return null; } + @Override + public List getByUnionId(String unionId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getUnionId,unionId); + return this.list(lqw); + } + @Override public List getBySysUserId(String userId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); @@ -167,6 +174,15 @@ public class WxUserServiceImpl extends ServiceImpl impleme wxUser.setHeadimgUrl(auth2UserInfo.getHeadImgUrl()); wxUser.setOpenId(auth2UserInfo.getOpenid()); } + if(StringUtils.hasText(auth2UserInfo.getUnionId())){ + wxUser.setUnionId(auth2UserInfo.getUnionId()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getUnionId,auth2UserInfo.getUnionId()); + Long count = this.count(lqw); + if(count<1){ + wxUser.setFirstFlag(1); + } + } wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); diff --git a/src/main/resources/mapper/goods/GoodsSkuMapper.xml b/src/main/resources/mapper/goods/GoodsSkuMapper.xml index 7eb58c98..8832c163 100644 --- a/src/main/resources/mapper/goods/GoodsSkuMapper.xml +++ b/src/main/resources/mapper/goods/GoodsSkuMapper.xml @@ -116,6 +116,7 @@ and `goods_sku`.`del_flag` = #{query.delFlag} and `goods_sku`.`create_by` = #{query.createBy} and `goods_sku`.`update_by` = #{query.updateBy} + and `goods_spu`.`shelf` = #{query.querySpuShelf} and `goods_sku`.`id` in