注解实现更新库存总数
1.serviceImpl添加注解
2.定义注解接口
3.切面编程-实现注解接口
代码:
UpdateStockAspect.java
package com.tn.grms.stock.aspect;
import com.tn.grms.common.core.domain.ServiceResponse;
import com.tn.grms.stock.domain.GrmsStockRecordItem;
import com.tn.grms.stock.service.IGrmsProductService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 数据过滤处理
*
* @author panb
*/
@Aspect
@Component
public class UpdateStockAspect
{
@Autowired
private IGrmsProductService iGrmsProductService;
// Service层切点
@Pointcut("@annotation(com.tn.grms.common.annotation.UpdateStockAnnotation)")
public void servicePointcut() {}
@Around("servicePointcut()")
public Object doAround(ProceedingJoinPoint jointPoint) throws Throwable {
// 获取方法所有参数及其类型
Object[] args = jointPoint.getArgs();
List<GrmsStockRecordItem> itemList = new ArrayList<>();
for (Object obj :args){
if(obj instanceof List && !((List<?>)obj).isEmpty() && ((List<?>)obj).get(0) instanceof GrmsStockRecordItem){
itemList =(List<GrmsStockRecordItem>) obj;
}
}
// 执行目标方法
Object object= jointPoint.proceed();
ServiceResponse response = (ServiceResponse)object;
if(response.ok()){
//更新实时库存
if(!CollectionUtils.isEmpty(itemList)){
iGrmsProductService.updateProductTotalStock(itemList);
}
}
return object;
}
}
更新商品总库存
service.java
public ServiceResponse updateProductTotalStock(List<GrmsStockRecordItem> list);
serviceImpl.java
@Override
public ServiceResponse updateProductTotalStock(List<GrmsStockRecordItem> list) {
for (GrmsStockRecordItem item:list) {
grmsProductMapper.updateGrmsProductStock(item.getProCode());
}
return ServiceResponse.success();
}
mapper.java
public int updateGrmsProductStock(@Param("proCode")String proCode);
mapper.xml
<update id="updateGrmsProductStock" parameterType="String">
UPDATE tn_grms_product set total_inventory =
(
SELECT COALESCE( SUM( remain_quantity ),0 ) FROM tn_grms_stock_record a, tn_grms_stock_record_item b
where a.status=1 and b.status =1 and b.pro_code = #{proCode} and a.batch_no = b.batch_no
)
where pro_code = #{proCode}
</update>