Merge branch 'master' of https://gitea.zianxin.com/zax/biz-api-cloud
This commit is contained in:
commit
d5baec6efb
17 files changed
+212
-24
No files matched your search
+27
@@ -0,0 +1,27 @@
|
||||
package com.bsd.pjcloud.integrated.dto.visitor.app;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 访客表
|
||||
*
|
||||
* @author zjf
|
||||
* @date 2025-04-09 15:22:47
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "app访客dto")
|
||||
public class VisitorsReceiveAppDTO {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String checkStatus;
|
||||
|
||||
private VisitorsAppDTO visitorsAppDTO;
|
||||
|
||||
}
|
||||
+8
@@ -12,6 +12,7 @@ import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsReceiveAppDTO;
|
||||
import com.bsd.pjcloud.integrated.entity.CarInfoEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorUserEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
|
||||
@@ -106,6 +107,13 @@ public class AppVisitorController {
|
||||
return R.ok(visitorsService.getByToken(token));
|
||||
}
|
||||
|
||||
@PostMapping("/app/receiveYY")
|
||||
@SysLog("访客接收邀约更新状态" )
|
||||
@Operation(summary = "访客接收邀约" , description = "访客接收邀约" )
|
||||
public R receiveYY(@RequestBody VisitorsReceiveAppDTO visitorsReceiveAppDTO) {
|
||||
return R.ok( visitorsService.receiveYY(visitorsReceiveAppDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码发送请求确认是否能通过
|
||||
* 通过token查询访客表
|
||||
|
||||
+4
@@ -201,4 +201,8 @@ public class VisitorsEntity extends Model<VisitorsEntity> {
|
||||
|
||||
@Schema(description="到访单位名称")
|
||||
private String deptName;
|
||||
|
||||
|
||||
@Schema(description="访客用户id")
|
||||
private Long visitorUserId;
|
||||
}
|
||||
+4
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysDictItem;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsReceiveAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsYYAppDTO;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
|
||||
import com.bsd.pjcloud.integrated.vo.visitor.app.VisitorsAppVo;
|
||||
@@ -82,4 +83,7 @@ public interface VisitorsService extends IService<VisitorsEntity> {
|
||||
* @return
|
||||
*/
|
||||
R<List<SysDictItem>> getDictListByType(Long type);
|
||||
|
||||
|
||||
Object receiveYY(VisitorsReceiveAppDTO visitorsReceiveAppDTO);
|
||||
}
|
||||
+87
-4
@@ -26,10 +26,7 @@ import com.bsd.pjcloud.integrated.constant.DictTypeEnum;
|
||||
import com.bsd.pjcloud.integrated.constant.IntegratedFlowConstant;
|
||||
import com.bsd.pjcloud.integrated.constant.VisitorTypeEnum;
|
||||
import com.bsd.pjcloud.integrated.controller.AppVisitorUserController;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsCarAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsPeopleAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.VisitorsYYAppDTO;
|
||||
import com.bsd.pjcloud.integrated.dto.visitor.app.*;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorUserEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorsCarEntity;
|
||||
import com.bsd.pjcloud.integrated.entity.VisitorsEntity;
|
||||
@@ -454,5 +451,91 @@ public class VisitorsServiceImpl extends ServiceImpl<VisitorsMapper, VisitorsEnt
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object receiveYY(VisitorsReceiveAppDTO visitorsReceiveAppDTO) {
|
||||
Long id = visitorsReceiveAppDTO.getId();
|
||||
String checkStatus = visitorsReceiveAppDTO.getCheckStatus();
|
||||
|
||||
Long currentVisitorUserId = getCurrentVisitorUserId();
|
||||
//邀约者的数据信息
|
||||
VisitorsEntity yyVisitors = baseMapper.selectById(id);
|
||||
if (yyVisitors == null) {
|
||||
throw new ServiceException("该访客信息不存在");
|
||||
}
|
||||
//查询当前用户信息
|
||||
VisitorUserEntity visitorUserEntity = visitorUserService.getById(currentVisitorUserId);
|
||||
if (visitorUserEntity == null || "1".equals(visitorUserEntity.getStatus()) || !yyVisitors.getMobile().equals(visitorUserEntity.getPhone())) {
|
||||
throw new ServiceException("您没有权限");
|
||||
}
|
||||
//这里判断的是邀约者的那条信息是否有效
|
||||
if (!yyVisitors.getCheckStatus().equals(TaskCheckStatusEnum.PADDING.getCode())){
|
||||
throw new ServiceException("该邀约信息已失效");
|
||||
}
|
||||
//这里的状态属于前端点了接受还是拒绝
|
||||
if (checkStatus.equals(TaskCheckStatusEnum.RESULT.getCode())){
|
||||
//接受,自动创建访客预约,并且设置自动通过
|
||||
VisitorsEntity dataVisitors = new VisitorsEntity();
|
||||
dataVisitors.setVisitorUserId(currentVisitorUserId);
|
||||
dataVisitors.setDeptId(yyVisitors.getDeptId());
|
||||
dataVisitors.setDeptName(yyVisitors.getDeptName());
|
||||
dataVisitors.setUserId(currentVisitorUserId);
|
||||
dataVisitors.setCheckStatus(TaskCheckStatusEnum.RESULT.getCode());
|
||||
dataVisitors.setType(VisitorTypeEnum.FKSQ.getType());
|
||||
String uniqueToken = UUID.randomUUID().toString();
|
||||
String token = uniqueToken.replace("-", "");
|
||||
dataVisitors.setToken(token);
|
||||
|
||||
dataVisitors.setIsDrive(yyVisitors.getIsDrive());
|
||||
dataVisitors.setIsOtherPeople(yyVisitors.getIsOtherPeople());
|
||||
|
||||
String isDrive = yyVisitors.getIsDrive();
|
||||
String isOtherPeople = yyVisitors.getIsOtherPeople();
|
||||
baseMapper.insert(dataVisitors);
|
||||
VisitorsAppDTO visitorsAppDTO = visitorsReceiveAppDTO.getVisitorsAppDTO();
|
||||
if (isDrive.equals("1")){
|
||||
//保存车辆信息
|
||||
List<VisitorsCarAppDTO> visitorsCarAppDTOList = visitorsAppDTO.getCarList();
|
||||
if (!CollectionUtils.isEmpty(visitorsCarAppDTOList)){
|
||||
List<VisitorsCarEntity> visitorsCarEntities = BeanUtils.toBean(visitorsCarAppDTOList, VisitorsCarEntity.class);
|
||||
visitorsCarEntities.forEach(i->{
|
||||
i.setVisitorsId(dataVisitors.getId());
|
||||
});
|
||||
visitorsCarMapper.insert(visitorsCarEntities);
|
||||
}
|
||||
}
|
||||
if (isOtherPeople.equals("1")){
|
||||
|
||||
List<VisitorsPeopleAppDTO> visitorsPeopleAppDTOList =visitorsAppDTO.getOtherPeople();
|
||||
// if (!CollectionUtils.isEmpty(visitorsPeopleAppDTOList)){
|
||||
// visitorsPeopleAppDTOList.forEach(i->{
|
||||
// VisitorInfo itemVisitorInfo = new VisitorInfo();
|
||||
// itemVisitorInfo.setVisitorName(i.getName());
|
||||
// itemVisitorInfo.setPhoneNo(i.getMobile());
|
||||
// itemVisitorInfo.setvis
|
||||
// });
|
||||
// }
|
||||
if (!CollectionUtils.isEmpty(visitorsPeopleAppDTOList)){
|
||||
List<VisitorsPeopleEntity> visitorsPeopleEntities = BeanUtils.toBean(visitorsPeopleAppDTOList, VisitorsPeopleEntity.class);
|
||||
for (int i = 0; i < visitorsPeopleEntities.size(); i++){
|
||||
VisitorsPeopleEntity visitorsPeopleEntity = visitorsPeopleEntities.get(i);
|
||||
visitorsPeopleEntity.setVisitorsId(dataVisitors.getId());
|
||||
|
||||
}
|
||||
visitorsPeopleMapper.insert(visitorsPeopleEntities);
|
||||
}
|
||||
|
||||
}
|
||||
return dataVisitors.getId();
|
||||
|
||||
}
|
||||
|
||||
//拒绝
|
||||
VisitorsEntity visitorsEntity = new VisitorsEntity();
|
||||
visitorsEntity.setId(id);
|
||||
visitorsEntity.setCheckStatus(TaskCheckStatusEnum.REJECT.getCode());
|
||||
return baseMapper.updateById(visitorsEntity);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -36,5 +36,7 @@
|
||||
<result property="qrcode" column="qrcode"/>
|
||||
<result property="verificationCode" column="verification_code"/>
|
||||
<result property="yyId" column="yy_id"/>
|
||||
<result property="deptName" column="dept_name"/>
|
||||
<result property="visitorUserId" column="visitor_user_id"/>
|
||||
</resultMap>
|
||||
</mapper>
|
||||
+3
-13
@@ -20,13 +20,9 @@
|
||||
package com.bsd.pjcloud.supermarket.api.feign;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuQueryDTO;
|
||||
import com.bsd.pjcloud.supermarket.entity.ShopSkuEntity;
|
||||
import com.bsd.pjcloud.supermarket.vo.app.ShopSpuDetailAppVo;
|
||||
import com.bsd.pjcloud.supermarket.vo.app.ShopSpuListAppVo;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -34,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
import com.bsd.pjcloud.supermarket.dto.SkuStockChangeDTO;
|
||||
|
||||
/**
|
||||
* @author zjf
|
||||
@@ -45,17 +42,10 @@ public interface RemoteShopSkuService {
|
||||
|
||||
|
||||
/**
|
||||
* 更新库存
|
||||
* @return
|
||||
*/
|
||||
/**
|
||||
* 根据skuId和数量扣减库存
|
||||
* @param skuId
|
||||
* @param num * 正数:增加库存,负数:扣减库存
|
||||
* @return
|
||||
* 批量扣减/增减库存(正数增加,负数扣减)
|
||||
*/
|
||||
@PostMapping("/app/shopSpu/deductStock")
|
||||
R<Boolean> deductStock(@RequestParam Long skuId, @RequestParam Integer num);
|
||||
R<Boolean> deductStock(@RequestBody SkuStockChangeDTO changes);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.bsd.pjcloud.supermarket.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class SkuStockChangeDTO {
|
||||
|
||||
@NotNull(message = "商品 SPU 不能为空")
|
||||
private List<Item> items;
|
||||
|
||||
@Schema(description = "下单设备类型,0默认安卓机,1移动端")
|
||||
private int deviceType;
|
||||
|
||||
@Data
|
||||
public static class Item {
|
||||
@NotNull(message = "包装单位unit 编号不能为空")
|
||||
private Long id;
|
||||
|
||||
@NotNull(message = "库存变化数量不能为空")
|
||||
private Double incrCount;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -166,6 +166,12 @@ public class ShopSpuEntity extends Model<ShopSpuEntity> {
|
||||
@Schema(description="是否删除")
|
||||
private String delFlag;
|
||||
|
||||
/**
|
||||
* 商品性质(字典)
|
||||
*/
|
||||
@Schema(description="商品性质(字典)")
|
||||
private String productNature;
|
||||
|
||||
/**
|
||||
* 租户编号
|
||||
*/
|
||||
|
||||
+3
@@ -75,6 +75,9 @@ public class ShopSpuDetailAppVo {
|
||||
@Schema(description="单人限购数量")
|
||||
private Integer limitNum;
|
||||
|
||||
@Schema(description="商品性质(字典)")
|
||||
private String productNature;
|
||||
|
||||
|
||||
private List<ShopSkuAppVo> skuList;
|
||||
}
|
||||
+7
@@ -49,4 +49,11 @@ public class ShopSpuListAppVo {
|
||||
@Schema(description="总销量")
|
||||
private Double salesCount;
|
||||
|
||||
/**
|
||||
* 商品性质(字典)
|
||||
*/
|
||||
@Schema(description="商品性质(字典)")
|
||||
private String productNature;
|
||||
|
||||
|
||||
}
|
||||
+4
-3
@@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import com.bsd.pjcloud.supermarket.dto.SkuStockChangeDTO;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/app/shopSpu")
|
||||
@@ -105,9 +106,9 @@ public class AppShopSpuController {
|
||||
}
|
||||
|
||||
@PostMapping("/deductStock")
|
||||
@Operation(summary = "扣减库存", description = "根据skuId和数量扣减库存")
|
||||
public R<Boolean> deductStock(@RequestParam Long skuId, @RequestParam Integer num) {
|
||||
boolean result = shopSkuService.deductStock(skuId, num);
|
||||
@Operation(summary = "批量增减库存", description = "正加负减,任一失败全失败")
|
||||
public R<Boolean> deductStock(@RequestBody SkuStockChangeDTO changes) {
|
||||
boolean result = shopSkuService.deductStockBatch(changes);
|
||||
return result ? R.ok(true) : R.failed("库存不足或扣减失败");
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,6 +15,6 @@ public interface ShopSkuMapper extends PjcloudBaseMapper<ShopSkuEntity> {
|
||||
* @param version 当前版本号
|
||||
* @return 影响行数
|
||||
*/
|
||||
int deductStock(Long skuId, Integer num, Integer version);
|
||||
int deductStock(Long skuId, Double num, Integer version);
|
||||
|
||||
}
|
||||
+6
-1
@@ -12,5 +12,10 @@ public interface ShopSkuService extends IService<ShopSkuEntity> {
|
||||
* @param num 增减数量(正数加,负数减)
|
||||
* @return 是否成功
|
||||
*/
|
||||
boolean deductStock(Long skuId, Integer num);
|
||||
boolean deductStock(Long skuId, Double num);
|
||||
|
||||
/**
|
||||
* 批量增减库存(正数增加,负数扣减),任一失败则返回false
|
||||
*/
|
||||
boolean deductStockBatch(com.bsd.pjcloud.supermarket.dto.SkuStockChangeDTO changes);
|
||||
}
|
||||
+20
-2
@@ -7,6 +7,8 @@ import com.bsd.pjcloud.supermarket.mapper.ShopSkuMapper;
|
||||
import com.bsd.pjcloud.supermarket.mapper.ShopSpuMapper;
|
||||
import com.bsd.pjcloud.supermarket.service.ShopSkuService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.bsd.pjcloud.supermarket.dto.SkuStockChangeDTO;
|
||||
import org.springframework.stereotype.Service;
|
||||
/**
|
||||
* sku
|
||||
@@ -24,7 +26,7 @@ public class ShopSkuServiceImpl extends ServiceImpl<ShopSkuMapper, ShopSkuEntity
|
||||
* 正数:增加库存,负数:扣减库存
|
||||
*/
|
||||
@Override
|
||||
public boolean deductStock(Long skuId, Integer num) {
|
||||
public boolean deductStock(Long skuId, Double num) {
|
||||
for (int i = 0; i < 3; i++) { // 最多重试3次
|
||||
ShopSkuEntity sku = this.getById(skuId);
|
||||
if (sku == null) return false;
|
||||
@@ -38,9 +40,25 @@ public class ShopSkuServiceImpl extends ServiceImpl<ShopSkuMapper, ShopSkuEntity
|
||||
}
|
||||
int updated = baseMapper.deductStock(skuId, num, sku.getVersion());
|
||||
//更新spu已售总数
|
||||
shopSpuMapper.updateSalesCount(shopSkuEntity.getSpuId(),num);
|
||||
shopSpuMapper.updateSalesCount(shopSkuEntity.getSpuId(), num.intValue());
|
||||
if (updated > 0) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean deductStockBatch(SkuStockChangeDTO changes) {
|
||||
if (changes == null || changes.getItems() == null || changes.getItems().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
for (SkuStockChangeDTO.Item item : changes.getItems()) {
|
||||
if (item == null || item.getId() == null || item.getIncrCount() == null) return false;
|
||||
boolean ok = deductStock(item.getId(), item.getIncrCount());
|
||||
if (!ok) {
|
||||
throw new RuntimeException("扣减库存失败,skuId=" + item.getId());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+1
@@ -95,3 +95,4 @@ public class SmErpSpuImportPDNewDto {
|
||||
|
||||
|
||||
|
||||
|
||||
+1
@@ -27,6 +27,7 @@
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="tenantId" column="tenant_id"/>
|
||||
<result property="productNature" column="product_nature"/>
|
||||
</resultMap>
|
||||
<update id="updateSalesCount">
|
||||
UPDATE shop_spu
|
||||
|
||||
Reference in new issue
Block a user