Browse Source

修复无预算空指针移除;添加政策同步商品记录;

contract
Yen 2 years ago
parent
commit
6e8081b3da
  1. 6
      src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java
  2. 2
      src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java
  3. 10
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java
  4. 9
      src/main/java/com/qs/serve/modules/third/PortalOfCostController.java
  5. 12
      src/main/java/com/qs/serve/modules/third/consts/ThirtyConst.java
  6. 27
      src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java
  7. 90
      src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyGoodsSync.java
  8. 14
      src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyGoodsSyncMapper.java
  9. 14
      src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyGoodsSyncService.java
  10. 22
      src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyGoodsSyncServiceImpl.java
  11. 2
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

6
src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java

@ -22,6 +22,7 @@ import com.qs.serve.modules.tbs.service.TbsActivitySubjectService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.bms.entity.BmsSubject;
@ -116,7 +117,9 @@ public class BmsSubjectController {
return R.ok();
}
private void commonEdit(BmsSubject subject){
@Transactional(rollbackFor = Exception.class)
public void commonEdit(BmsSubject subject){
if(subject.getId()==null){
bmsSubjectService.save(subject);
}
@ -127,6 +130,7 @@ public class BmsSubjectController {
bmsSubjectService.updateById(subject);
}else {
BmsSubject parent = bmsSubjectService.getById(subject.getPid());
//todo 判断父级节点是否存有已存数据
BmsSubject ori = bmsSubjectService.getById(subject.getId());
subject.setLevel(parent.getLevel()+1);
subject.setPathNames(parent.getPathNames()+"_"+subject.getSubjectName());

2
src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetCostItem.java

@ -230,7 +230,7 @@ public class TbsBudgetCostItem implements Serializable {
private Long centerGoodItemId;
/** 标识是否政策生成的item,不参与业务,为以后拓展使用 */
private Integer policyFlag;
//private Integer policyFlag;
/** 是否无效(退回,拒绝时使用,释放则不计入预算占用) */
private Integer invalidFlag;

10
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java

@ -444,6 +444,16 @@ public class TbsBudgetApplicationService {
Map<Long,BigDecimal> budgetItemApplyAmountMap) {
//过滤满全条件的预算
List<Long> allowBudgetIds = activityAllowBudgetIdMap.get(activityCostItem.getActivityId());
if(CollectionUtil.isEmpty(allowBudgetIds)){
//添加到预算超支表
activityCostItem.setBudgetId(0L);
activityCostItem.setScheduleId(0L);
activityCostItem.setScheduleItemId(0L);
activityCostItem.setScheduleItemBudgetId(0L);
activityCostItem.setScheduleItemName("无");
actUnMatchList.add(activityCostItem);
return;
}
List<TbsBudget> budgetList = allBudgetList.stream().filter(obj->allowBudgetIds.contains(obj.getId())).collect(Collectors.toList());
//PS:排序规则:优先为时间条件,其次匹配品牌条件
//按品类条件,提取可用预算(列表已按小维度到大维度排列)

9
src/main/java/com/qs/serve/modules/third/PortalOfCostController.java

@ -4,9 +4,11 @@ import cn.hutool.crypto.SecureUtil;
import com.qs.serve.common.config.DevEnvironmentConfig;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.Assert;
import com.qs.serve.modules.third.consts.ThirtyConst;
import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo;
import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo;
import com.qs.serve.modules.third.service.PortalOfCostApplication;
import com.qs.serve.modules.tzc.service.TzcPolicyGoodsSyncService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
@ -32,9 +34,6 @@ import java.time.LocalDateTime;
@RequestMapping("thirty/cost")
public class PortalOfCostController {
private final String TOKEN_API_PARAM = "v-token";
private final String PREFIX_MD5_VALUE = "jslApi-";
private PortalOfCostApplication portalOfCostApplication;
@ -66,8 +65,8 @@ public class PortalOfCostController {
private void checkToken(HttpServletRequest request) {
String time = LocalDate.now().toString();
String match = SecureUtil.md5(PREFIX_MD5_VALUE + time);
String token = request.getHeader(TOKEN_API_PARAM);
String match = SecureUtil.md5(ThirtyConst.PREFIX_MD5_VALUE + time);
String token = request.getHeader(ThirtyConst.TOKEN_API_PARAM);
if(token==null||token.equalsIgnoreCase(match)){
if(DevEnvironmentConfig.isDev()){
log.error("v-token==>"+match);

12
src/main/java/com/qs/serve/modules/third/consts/ThirtyConst.java

@ -0,0 +1,12 @@
package com.qs.serve.modules.third.consts;
/**
* @author YenHex
* @since 2023/2/27
*/
public class ThirtyConst {
public static final String TOKEN_API_PARAM = "v-token";
public static final String PREFIX_MD5_VALUE = "jslApi-";
}

27
src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java

@ -33,7 +33,9 @@ import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo;
import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo;
import com.qs.serve.modules.third.entity.ProcessGoodsItem;
import com.qs.serve.modules.tzc.entity.TzcPolicy;
import com.qs.serve.modules.tzc.entity.TzcPolicyGoodsSync;
import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
import com.qs.serve.modules.tzc.service.TzcPolicyGoodsSyncService;
import com.qs.serve.modules.tzc.service.TzcPolicyItemService;
import com.qs.serve.modules.tzc.service.TzcPolicyService;
import com.qs.serve.modules.vtb.common.VtbVerificationState;
@ -93,6 +95,7 @@ public class PortalOfCostApplication {
private TzcPolicyService policyService;
private TzcPolicyItemService policyItemServiceService;
private TzcPolicyGoodsSyncService tzcPolicyGoodsSyncService;
@ -104,7 +107,6 @@ public class PortalOfCostApplication {
if(policyItem==null){ Assert.throwEx("政策项不存在,请重新编辑");}
BmsSupplier supplier = supplierService.getById(policyItem.getSupplierId());
BmsSubject subject = subjectService.getById(policyItem.getSubjectId());
//TODO 校验商品信息
//发票号
String billNumber = createBo.getBillNumber();
//拦截是否已保存
@ -112,6 +114,15 @@ public class PortalOfCostApplication {
payLqw.eq(PayPayment::getBillNumber,billNumber);
long countPay = paymentService.count(payLqw);
if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");}
//TODO 校验商品信息
// List<String> skuCodes = createBo.getGoodsList().stream().map(a->a.getInventoryCode()).collect(Collectors.toList());
// LambdaQueryWrapper<TzcPolicyGoodsSync> goodsSyncLambdaQueryWrapper = new LambdaQueryWrapper<>();
// goodsSyncLambdaQueryWrapper.eq(TzcPolicyGoodsSync::getPolicyItemCode,policyItem.getPolicyItemCode());
// goodsSyncLambdaQueryWrapper.in(TzcPolicyGoodsSync::getSkuCode,skuCodes);
// long countSku = tzcPolicyGoodsSyncService.count(goodsSyncLambdaQueryWrapper);
// if(countSku < skuCodes.size()){
// Assert.throwEx("部分商品不在政策范围内");
// }
//初始化sku列表
List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList();
List<GoodsSku> skuList = this.initSkuListOfProcess(createBo.getGoodsList());
@ -124,14 +135,13 @@ public class PortalOfCostApplication {
String erpCode = createBo.getErpCode();
Long supplierId = Long.parseLong(supplier.getId());
BigDecimal totalAmount = createBo.getTotalAmount();
String costCode = createBo.getCostCode();
String costTheme = createBo.getCostTheme();
String random = String.format("%03d",new Random().nextInt(999));
String activityCode = "G"+ StringUtils.genShortId() + random;
String activityTitle = "由核销API生成的活动";
//构建费用申请
TbsCostApply costApply = new TbsCostApply();
costApply.setCode(costCode);
costApply.setCode("CA"+IdUtil.timeStampId());
costApply.setChargeTheme(costTheme);
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode());
costApply.setSupplierId(supplierId);
@ -341,6 +351,17 @@ public class PortalOfCostApplication {
paymentItemService.save(paymentItem);
}
@Transactional(rollbackFor = Exception.class)
public void createCostProcess(ProcessCreateCostApplyBo createBo){
SysUser user = userService.getByAccount(createBo.getUserCode());

90
src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyGoodsSync.java

@ -0,0 +1,90 @@
package com.qs.serve.modules.tzc.entity;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
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 2023-02-27
*/
@Data
@TableName("tzc_policy_goods_sync")
public class TzcPolicyGoodsSync implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.AUTO)
private Long id;
/** 政策id */
@NotNull(message = "政策id不能为空")
private Long policyId;
/** 政策项id */
@NotNull(message = "政策项id不能为空")
private Long policyItemId;
/** 政策编码 */
@NotBlank(message = "政策编码不能为空")
@Length(max = 50,message = "政策编码长度不能超过50字")
private String policyItemCode;
/** 规格id */
@NotNull(message = "规格id不能为空")
private Long skuId;
/** 规格编码 */
@NotNull(message = "规格编码不能为空")
private Long skuCode;
/** 备注 */
@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;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 逻辑删除标记(0:显示;1:隐藏) */
@JsonIgnore
@JsonProperty
private String delFlag;
}

14
src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyGoodsSyncMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.tzc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tzc.entity.TzcPolicyGoodsSync;
/**
* 政策商品 Mapper
* @author YenHex
* @date 2023-02-27
*/
public interface TzcPolicyGoodsSyncMapper extends BaseMapper<TzcPolicyGoodsSync> {
}

14
src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyGoodsSyncService.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.tzc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.tzc.entity.TzcPolicyGoodsSync;
/**
* 政策商品同步记录表 服务接口
* @author YenHex
* @date 2023-02-27
*/
public interface TzcPolicyGoodsSyncService extends IService<TzcPolicyGoodsSync> {
}

22
src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyGoodsSyncServiceImpl.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.tzc.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.tzc.entity.TzcPolicyGoodsSync;
import com.qs.serve.modules.tzc.service.TzcPolicyGoodsSyncService;
import com.qs.serve.modules.tzc.mapper.TzcPolicyGoodsSyncMapper;
/**
* 政策商品同步记录表 服务实现类
* @author YenHex
* @since 2023-02-27
*/
@Slf4j
@Service
@AllArgsConstructor
public class TzcPolicyGoodsSyncServiceImpl extends ServiceImpl<TzcPolicyGoodsSyncMapper,TzcPolicyGoodsSync> implements TzcPolicyGoodsSyncService {
}

2
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -517,8 +517,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
try {
//todo 如果失败做补偿处理
xiaoLuTonService.saveApticlaim(apticlaim);
log.info("发送对象(apticlaim)到OA服务成功");
} catch (Exception e) {
e.printStackTrace();
log.error("发送对象到OA服务失败,数据内容如下:{}",JsonUtil.objectToJson(apticlaim));
}
}
fundFlowService.saveBatch(addFundFlowList);

Loading…
Cancel
Save