feat: 项目组套和三方出入库明细

20231126-yw
chenhc 1 year ago
parent 2de35f3091
commit 85c9db2ae5

@ -50,5 +50,10 @@ public interface ThirdSysConstant {
*/
String SICKER_QUERY_URL = "sickerQueryUrl";
/**
*
*/
String INV_ORDER_QUERY_URL = "invOrderUrl";
}

@ -6,9 +6,7 @@ import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.constant.Constant;
import com.glxp.api.req.sync.BasicExportStatusRequest;
import com.glxp.api.task.SyncThirdSysTask;
import com.glxp.api.task.TestStatOrderService;
import com.glxp.api.task.ThrInvOrderTask;
import com.glxp.api.util.MsDateUtil;
import com.glxp.api.util.RedisUtil;
import lombok.extern.slf4j.Slf4j;
@ -17,15 +15,12 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.Date;
@Slf4j
@RestController
public class TestController {
@Resource
TestStatOrderService statOrderService;
@Resource
ThrInvOrderTask thrInvOrderTask;
@GetMapping("/test/stat/order")
@ -72,9 +67,4 @@ public class TestController {
return ResultVOUtils.success("hello");
}
@GetMapping("/test/thrInvOrderTask")
public BaseResponse thrInvOrderTask() {
thrInvOrderTask.process();
return ResultVOUtils.success();
}
}

@ -0,0 +1,111 @@
package com.glxp.api.controller.thrsys;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.entity.thrsys.ThrInvOrder;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.entity.thrsys.ThrOrderDetailEntity;
import com.glxp.api.entity.thrsys.ThrOrderEntity;
import com.glxp.api.req.system.DeleteRequest;
import com.glxp.api.req.thrsys.*;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.service.thrsys.ThrInvOrderDetailService;
import com.glxp.api.service.thrsys.ThrInvOrderService;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
@RestController
public class ThrInvOrderController {
@Resource
ThrInvOrderService thrInvOrderService;
@Resource
ThrInvOrderDetailService thrInvOrderDetailService;
@AuthRuleAnnotation("")
@GetMapping("/udiwms/thrsys/getThrInvOrders")
public BaseResponse getOrders(FilterThrInvOrderRequest filterThrInvOrderRequest,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
List<ThrInvOrder> thrInvOrders
= thrInvOrderService.filterThrInvOrder(filterThrInvOrderRequest);
PageInfo<ThrInvOrder> pageInfo;
pageInfo = new PageInfo<>(thrInvOrders);
PageSimpleResponse<ThrInvOrder> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(thrInvOrders);
return ResultVOUtils.success(pageSimpleResponse);
}
@AuthRuleAnnotation("")
@GetMapping("/udiwms/thrsys/getThrInvOrderDetails")
public BaseResponse getThrInvOrderDetails(FilterThrInvOrderDetailRequest filterThrInvOrderDetailRequest,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
List<ThrInvOrderDetail> thrInvOrderDetails
= thrInvOrderDetailService.filterThrInvOrderDetails(filterThrInvOrderDetailRequest);
PageInfo<ThrInvOrderDetail> pageInfo;
pageInfo = new PageInfo<>(thrInvOrderDetails);
PageSimpleResponse<ThrInvOrderDetail> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(thrInvOrderDetails);
return ResultVOUtils.success(pageSimpleResponse);
}
@AuthRuleAnnotation("")
@PostMapping("/udiwms/thrsys/delThrInvOrderDetail")
public BaseResponse delThrInvOrderDetail(@RequestBody DeleteRequest deleteRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
String id = deleteRequest.getId();
int b = thrInvOrderDetailService.delThrInvOrderDetail(Integer.parseInt(id));
if (b > 0) return ResultVOUtils.success("删除成功");
else return ResultVOUtils.error(500, "无法删除!");
}
@AuthRuleAnnotation("")
@PostMapping("/udiwms/thrsys/delThrInvOrder")
public BaseResponse delThrInvOrder(@RequestBody DeleteRequest deleteRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
String billNo = deleteRequest.getBillNo();
int b = thrInvOrderService.delThrInvOrderByBillNo(billNo);
if (b > 0) {
thrInvOrderDetailService.delThrInvOrderDetailByBillNo(billNo);
return ResultVOUtils.success("删除成功");
}
else return ResultVOUtils.error(500, "无法删除!");
}
@AuthRuleAnnotation("")
@PostMapping("/udiwms/thrsys/generateOrder")
public BaseResponse generateOrder(@RequestBody @Valid GenerateOrderRequest generateOrderRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, bindingResult.getFieldError().getDefaultMessage());
}
if (thrInvOrderService.generateOrder(generateOrderRequest)){
return ResultVOUtils.success("生成成功");
}
return ResultVOUtils.error(500, "生成失败!");
}
}

@ -4,6 +4,7 @@ import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.dao.inout.IoOrderDetailBizDao;
import com.glxp.api.entity.inout.IoOrderDetailBizEntity;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.req.thrsys.FilterThrInvOrderDetailRequest;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -21,4 +22,6 @@ public interface ThrInvOrderDetailMapper extends BaseMapperPlus<ThrInvOrderDetai
int updateByPrimaryKeySelective(ThrInvOrderDetail record);
int updateByPrimaryKey(ThrInvOrderDetail record);
List<ThrInvOrderDetail> filterThrOrderDetailDetail(FilterThrInvOrderDetailRequest filterThrInvOrderDetailRequest);
}

@ -1,10 +1,15 @@
package com.glxp.api.dao.thrsys;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.thrsys.ThrInvOrder;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.req.thrsys.FilterThrInvOrderRequest;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ThrInvOrderMapper {
public interface ThrInvOrderMapper extends BaseMapperPlus<ThrInvOrderMapper, ThrInvOrder, ThrInvOrder> {
int deleteByPrimaryKey(Integer id);
int insert(ThrInvOrder record);
@ -16,4 +21,6 @@ public interface ThrInvOrderMapper {
int updateByPrimaryKeySelective(ThrInvOrder record);
int updateByPrimaryKey(ThrInvOrder record);
}
List<ThrInvOrder> filterThrInvOrder(FilterThrInvOrderRequest filterThrInvOrderRequest);
}

@ -53,6 +53,11 @@ public class ThrInvOrder implements Serializable {
*/
private String billType;
/**
*
*/
private String thirdSysFk;
/**
*
*/

@ -79,27 +79,28 @@ public class ErpInvClient {
}
public BaseResponse<PageSimpleResponse<ThrInvResultResponse>> getInvResult(FilterInvProductRequest invProductRequest) {
// ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectByThirdId(invProductRequest.getThirdSys());
ThrSystemEntity basicThirdSysEntity = basicThirdSysService.selectByThirdId(invProductRequest.getThirdSys());
// String url = basicThirdSysEntity.getThridUrl() + "/udiwms/erp/inv/getInvResult";
String url = basicThirdSysEntity.getThridUrl() + invProductRequest.getThirdSysUrlValue();
try {
// String response = httpOkClient.uCloudPost(url, invProductRequest);
ThrInvResultResponse thrInvResultResponse = new ThrInvResultResponse();
thrInvResultResponse.setThrCode("11");
thrInvResultResponse.setOutCount("2");
thrInvResultResponse.setBillType(ConstantType.TYPE_OUT);
ArrayList<ThrInvResultResponse> objects = new ArrayList<>();
objects.add(thrInvResultResponse);
PageSimpleResponse<ThrInvResultResponse> thrInvResultResponsePageSimpleResponse = new PageSimpleResponse<>();
thrInvResultResponsePageSimpleResponse.setList(objects);
BaseResponse<PageSimpleResponse<ThrInvResultResponse>> pageSimpleResponseBaseResponse = new BaseResponse<>();
pageSimpleResponseBaseResponse.setCode(20000);
pageSimpleResponseBaseResponse.setData(thrInvResultResponsePageSimpleResponse);
return pageSimpleResponseBaseResponse;
// BaseResponse<PageSimpleResponse<ThrInvResultResponse>> listBaseResponse =
// JSONObject.parseObject(response, new TypeReference<BaseResponse<PageSimpleResponse<ThrInvResultResponse>>>() {
// });
//
// return listBaseResponse;
String response = httpOkClient.uCloudPost(url, invProductRequest);
// ThrInvResultResponse thrInvResultResponse = new ThrInvResultResponse();
// thrInvResultResponse.setThrCode("11");
// thrInvResultResponse.setOutCount("2");
// thrInvResultResponse.setBillType(ConstantType.TYPE_OUT);
// ArrayList<ThrInvResultResponse> objects = new ArrayList<>();
// objects.add(thrInvResultResponse);
// PageSimpleResponse<ThrInvResultResponse> thrInvResultResponsePageSimpleResponse = new PageSimpleResponse<>();
// thrInvResultResponsePageSimpleResponse.setList(objects);
// BaseResponse<PageSimpleResponse<ThrInvResultResponse>> pageSimpleResponseBaseResponse = new BaseResponse<>();
// pageSimpleResponseBaseResponse.setCode(20000);
// pageSimpleResponseBaseResponse.setData(thrInvResultResponsePageSimpleResponse);
// return pageSimpleResponseBaseResponse;
BaseResponse<PageSimpleResponse<ThrInvResultResponse>> listBaseResponse =
JSONObject.parseObject(response, new TypeReference<BaseResponse<PageSimpleResponse<ThrInvResultResponse>>>() {
});
return listBaseResponse;
} catch (Exception e) {
log.error("获取第三方库存明细异常", e);
return ResultVOUtils.error(500, "连接第三方系统接口服务出错");

@ -124,6 +124,7 @@ public class FilterInvProductRequest extends ListPageRequest {
private Date startDate;
private Date endDate;
private String thirdSys;
private String thirdSysUrlValue;
private Long compareId;

@ -0,0 +1,13 @@
package com.glxp.api.req.thrsys;
import com.glxp.api.util.page.ListPageRequest;
import lombok.Data;
@Data
public class FilterThrInvOrderDetailRequest extends ListPageRequest {
private String orderIdFk;
}

@ -0,0 +1,32 @@
package com.glxp.api.req.thrsys;
import com.glxp.api.res.thrsys.ThrOrderResponse;
import com.glxp.api.util.page.ListPageRequest;
import lombok.Data;
import java.util.List;
@Data
public class FilterThrInvOrderRequest extends ListPageRequest {
/**
*
*/
private String billNo;
/**
*
*/
private String thirdSysFk;
/**
*
*/
private String startDate; //起始日期
/**
*
*/
private String endDate; //结束日期
/**
*
*/
private String billType;
}

@ -0,0 +1,28 @@
package com.glxp.api.req.thrsys;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
@Data
public class GenerateOrderRequest {
/**
*
*/
@NotEmpty(message = "来源单据号不能为空!")
private String billNo;
/**
*
*/
@NotEmpty(message = "业务类型不能为空!")
private String action;
/**
*
*/
@NotEmpty(message = "往来单位不能为空!")
private String fromCorp;
}

@ -0,0 +1,14 @@
package com.glxp.api.service.thrsys;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.req.thrsys.FilterThrInvOrderDetailRequest;
import java.util.List;
public interface ThrInvOrderDetailService {
public List<ThrInvOrderDetail> filterThrInvOrderDetails(FilterThrInvOrderDetailRequest filterThrInvOrderDetailRequest);
int delThrInvOrderDetail(Integer id);
int delThrInvOrderDetailByBillNo(String billNo);
}

@ -1,6 +1,12 @@
package com.glxp.api.service.thrsys;
import com.glxp.api.entity.thrsys.ThrInvOrder;
import com.glxp.api.entity.thrsys.ThrSystemDetailEntity;
import com.glxp.api.req.inv.FilterInvProductRequest;
import com.glxp.api.req.thrsys.FilterThrInvOrderRequest;
import com.glxp.api.req.thrsys.GenerateOrderRequest;
import java.util.List;
public interface ThrInvOrderService {
@ -8,4 +14,22 @@ public interface ThrInvOrderService {
*
*/
public void handleExternalThrInvOrder(FilterInvProductRequest filterInvProductRequest);
void downloadInvOrder(ThrSystemDetailEntity thrSystemDetailEntity);
/**
*
* @param filterThrInvOrderRequest
* @return
*/
List<ThrInvOrder> filterThrInvOrder(FilterThrInvOrderRequest filterThrInvOrderRequest);
int delThrInvOrderByBillNo(String billNo);
/**
*
* @param generateOrderRequest
* @return
*/
boolean generateOrder(GenerateOrderRequest generateOrderRequest);
}

@ -0,0 +1,47 @@
package com.glxp.api.service.thrsys.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.dao.thrsys.ThrInvOrderDetailMapper;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.entity.thrsys.ThrOrderDetailEntity;
import com.glxp.api.req.thrsys.FilterThrInvOrderDetailRequest;
import com.glxp.api.service.thrsys.ThrInvOrderDetailService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
@Service
public class ThrInvOrderDetailServiceImpl implements ThrInvOrderDetailService {
@Resource
ThrInvOrderDetailMapper thrInvOrderDetailMapper;
@Override
public List<ThrInvOrderDetail> filterThrInvOrderDetails(FilterThrInvOrderDetailRequest filterThrInvOrderDetailRequest) {
if (filterThrInvOrderDetailRequest == null) {
return Collections.emptyList();
}
if (filterThrInvOrderDetailRequest.getPage() != null) {
int offset = (filterThrInvOrderDetailRequest.getPage() - 1) * filterThrInvOrderDetailRequest.getLimit();
PageHelper.offsetPage(offset, filterThrInvOrderDetailRequest.getLimit());
}
List<ThrInvOrderDetail> data = thrInvOrderDetailMapper.filterThrOrderDetailDetail(filterThrInvOrderDetailRequest);
return data;
}
@Override
public int delThrInvOrderDetail(Integer id) {
return thrInvOrderDetailMapper.deleteByPrimaryKey(id);
}
@Override
public int delThrInvOrderDetailByBillNo(String billNo) {
UpdateWrapper<ThrInvOrderDetail> uw = new UpdateWrapper<>();
uw.eq("orderIdFk",billNo);
return thrInvOrderDetailMapper.delete(uw);
}
}

@ -1,7 +1,11 @@
package com.glxp.api.service.thrsys.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
@ -9,20 +13,34 @@ import com.glxp.api.constant.ConstantType;
import com.glxp.api.dao.thrsys.ThrInvOrderDetailMapper;
import com.glxp.api.dao.thrsys.ThrInvOrderMapper;
import com.glxp.api.entity.basic.BasicSkProjectDetailEntity;
import com.glxp.api.entity.inout.IoOrderDetailBizEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.entity.thrsys.ThrInvOrder;
import com.glxp.api.entity.thrsys.ThrInvOrderDetail;
import com.glxp.api.entity.thrsys.ThrOrderEntity;
import com.glxp.api.entity.thrsys.ThrSystemDetailEntity;
import com.glxp.api.http.ErpInvClient;
import com.glxp.api.req.inv.FilterInvProductRequest;
import com.glxp.api.req.thrsys.FilterThrInvOrderRequest;
import com.glxp.api.req.thrsys.GenerateOrderRequest;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.res.inv.ThrInvResultResponse;
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.basic.impl.BasicDestinyRelService;
import com.glxp.api.service.inout.IoOrderDetailBizService;
import com.glxp.api.service.inout.IoOrderService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.service.thrsys.ThrInvOrderService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -40,6 +58,17 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
ThrInvOrderMapper thrInvOrderMapper;
@Resource
ThrInvOrderDetailMapper thrInvOrderDetailMapper;
@Resource
SystemParamConfigService systemParamConfigService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
CustomerService customerService;
@Resource
IoOrderService ioOrderService;
@Resource
IoOrderDetailBizService ioOrderDetailBizService;
// 设置要输出的日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
@ -48,15 +77,15 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
BaseResponse<PageSimpleResponse<ThrInvResultResponse>> baseResponse = erpInvClient.getInvResult(filterInvProductRequest);
if (baseResponse.getCode() == 20000) {
List<ThrInvResultResponse> list = baseResponse.getData().getList();
if (CollectionUtil.isNotEmpty(list)){
if (CollectionUtil.isNotEmpty(list)) {
String billNo = generateBillNo(filterInvProductRequest);//单据号
//处理 返回实体 转换成 单据 和 单据明细
List<ThrInvOrderDetail> thrInvOrderDetails = new ArrayList<>();
handleExternalConvertThrInvOrderDetail(list,thrInvOrderDetails,billNo);
handleExternalConvertThrInvOrderDetail(list, thrInvOrderDetails, billNo);
if (CollectionUtil.isNotEmpty(thrInvOrderDetails)){
if (CollectionUtil.isNotEmpty(thrInvOrderDetails)) {
ThrInvOrder thrInvOrder = new ThrInvOrder();
handleExternalConvertThrInvOrder(billNo,filterInvProductRequest,thrInvOrder,list.get(0));
handleExternalConvertThrInvOrder(billNo, filterInvProductRequest, thrInvOrder, list.get(0));
//保存数据
thrInvOrderMapper.insert(thrInvOrder);
@ -66,8 +95,98 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
}
}
@Override
public void downloadInvOrder(ThrSystemDetailEntity thrSystemDetailEntity) {
log.info("自动抓取第三方出入库明细生成单据定时任务开始");
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
filterInvProductRequest.setThirdSys(thrSystemDetailEntity.getThirdSysFk());
filterInvProductRequest.setThirdSysUrlValue(thrSystemDetailEntity.getValue());
String days = getBeginAndEndDateByDays(1);
filterInvProductRequest.setStartDate(stringToDate(days + " 00:00:00"));
filterInvProductRequest.setEndDate(stringToDate(days + " 23:59:59"));
handleExternalThrInvOrder(filterInvProductRequest);
log.info("自动抓取第三方出入库明细生成单据定时任务结束");
}
@Override
public List<ThrInvOrder> filterThrInvOrder(FilterThrInvOrderRequest filterThrInvOrderRequest) {
if (filterThrInvOrderRequest == null) {
return Collections.emptyList();
}
if (filterThrInvOrderRequest.getPage() != null) {
int offset = (filterThrInvOrderRequest.getPage() - 1) * filterThrInvOrderRequest.getLimit();
PageHelper.offsetPage(offset, filterThrInvOrderRequest.getLimit());
}
List<ThrInvOrder> data = thrInvOrderMapper.filterThrInvOrder(filterThrInvOrderRequest);
return data;
}
@Override
public int delThrInvOrderByBillNo(String billNo) {
UpdateWrapper<ThrInvOrder> uw = new UpdateWrapper<>();
uw.eq("billNo", billNo);
return thrInvOrderMapper.delete(uw);
}
@Override
public boolean generateOrder(GenerateOrderRequest generateOrderRequest) {
String billNo = generateOrderRequest.getBillNo();
//通过单号获取单据信息
QueryWrapper<ThrInvOrder> qw = new QueryWrapper<>();
qw.eq("billNo",billNo);
ThrInvOrder thrInvOrder = thrInvOrderMapper.selectOne(qw);
if (Objects.isNull(thrInvOrder)) return false;
//通过单号获取单据明细信息
QueryWrapper<ThrInvOrderDetail> qwd = new QueryWrapper<>();
qwd.eq("orderIdFk",billNo);
List<ThrInvOrderDetail> thrInvOrderDetails = thrInvOrderDetailMapper.selectList(qwd);
if (CollectionUtil.isNotEmpty(thrInvOrderDetails)) return false;
//新单号
String newBillNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER, "yyyyMMdd"));
IoOrderEntity ioOrderEntity = new IoOrderEntity();
ioOrderEntity.setBillNo(newBillNo);
ioOrderEntity.setMainAction(thrInvOrder.getMainAction());
ioOrderEntity.setFromCorp(generateOrderRequest.getFromCorp());
ioOrderEntity.setInvCode(thrInvOrder.getInvCode());
ioOrderEntity.setDeptCode(thrInvOrder.getDeptCode());
ioOrderEntity.setFromType(ConstantStatus.FROM_THRORDER);//网页新增
ioOrderEntity.setStatus(ConstantStatus.ORDER_STATUS_TEMP_SAVE);//草稿
ioOrderEntity.setDealStatus(ConstantStatus.ORDER_DEAL_DRAFT);//草稿
ioOrderEntity.setCorpOrderId(billNo);//单据号
ioOrderEntity.setUpdateTime(new Date());
ioOrderEntity.setCreateTime(new Date());
Long userId = customerService.getUserId();
ioOrderEntity.setCreateUser(userId + "");
ioOrderEntity.setUpdateUser(userId + "");
ioOrderEntity.setOrderType(ConstantStatus.ORDER_TYPE_NORMAL);//正常单据处理
List<IoOrderDetailBizEntity> newOrderDetailBiz = new ArrayList<>(thrInvOrderDetails.size());
if (!copyOrderDetailBiz(thrInvOrderDetails,newOrderDetailBiz)){
return false;
}
ioOrderService.insertOrder(ioOrderEntity);
return ioOrderDetailBizService.batchInsertBizs(newOrderDetailBiz);
}
private boolean copyOrderDetailBiz(List<ThrInvOrderDetail> thrInvOrderDetails, List<IoOrderDetailBizEntity> newOrderDetailBiz) {
/**
* 1
* 2
*/
return true;
}
/**
* SFIO + 6 + 6 + 6
*
* @param filterInvProductRequest
* @return
*/
@ -75,16 +194,17 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
String startDate = sdf.format(filterInvProductRequest.getStartDate()).substring(2);
String endDate = sdf.format(filterInvProductRequest.getEndDate()).substring(2);
Integer random = new Random().nextInt(900000) + 100000;
return Constant.TRIPARTITE_INV_ORDER + startDate+endDate + random;
return Constant.TRIPARTITE_INV_ORDER + startDate + endDate + random;
}
/**
*
*
* @param filterInvProductRequest
* @param thrInvOrder
* @param thrInvResultResponse
*/
private void handleExternalConvertThrInvOrder(String billNo,FilterInvProductRequest filterInvProductRequest,ThrInvOrder thrInvOrder,ThrInvResultResponse thrInvResultResponse) {
private void handleExternalConvertThrInvOrder(String billNo, FilterInvProductRequest filterInvProductRequest, ThrInvOrder thrInvOrder, ThrInvResultResponse thrInvResultResponse) {
Date newDate = new Date();
thrInvOrder.setBillNo(billNo);//单据号
@ -93,6 +213,7 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
thrInvOrder.setEndDate(filterInvProductRequest.getEndDate());//库存结束时间
thrInvOrder.setMainAction(thrInvResultResponse.getMainAction());//出入库类型
thrInvOrder.setBillType(thrInvResultResponse.getMainAction());//第三方单据类型
thrInvOrder.setThirdSysFk(filterInvProductRequest.getThirdSys());//外部系统
thrInvOrder.setDeptCode(thrInvResultResponse.getDeptCode());//部门编号
thrInvOrder.setInvCode(thrInvResultResponse.getInvCode());//仓库代码
thrInvOrder.setSpaceCode(thrInvResultResponse.getSpaceCode());//货位编码
@ -104,36 +225,83 @@ public class ThrInvOrderServiceImpl implements ThrInvOrderService {
/**
*
*
* @param list
* @param thrInvOrderDetails
* @param billNo
*/
private void handleExternalConvertThrInvOrderDetail(List<ThrInvResultResponse> list, List<ThrInvOrderDetail> thrInvOrderDetails,String billNo) {
list.forEach( item -> {
String thrCode = item.getThrCode();
String mainAction = item.getMainAction();
Integer count = 0;
if (ConstantType.TYPE_PUT.equals(mainAction)) {
count = Integer.valueOf(item.getInCount());
}else {
count = Integer.valueOf(item.getOutCount());
}
//通过thrCode获取到项目组套
List<BasicSkProjectDetailEntity> skProjectDetailEntityList= basicDestinyRelService.filterDestinyRelListByPId(thrCode);
if (CollectionUtil.isNotEmpty(skProjectDetailEntityList) && count > 0 ){
Integer finalCount = count;
skProjectDetailEntityList.forEach(sk -> {
ThrInvOrderDetail thrInvOrderDetail = new ThrInvOrderDetail();
BeanUtils.copyProperties(item,thrInvOrderDetail);
thrInvOrderDetail.setOrderIdFk(billNo);
thrInvOrderDetail.setRelId(sk.getRelId());
Integer skCount = sk.getCount();
if (skCount != null && skCount > 0){
thrInvOrderDetail.setReCount(String.valueOf(skCount * finalCount));
thrInvOrderDetails.add(thrInvOrderDetail);
}
});
}
});
private void handleExternalConvertThrInvOrderDetail(List<ThrInvResultResponse> list, List<ThrInvOrderDetail> thrInvOrderDetails, String billNo) {
Integer inv_set_enable = Integer.valueOf(systemParamConfigService.selectValueByParamKey("inv_set_enable"));
if (inv_set_enable == null || inv_set_enable == 0) {
list.forEach(item -> {
String mainAction = item.getMainAction();
Integer count = 0;
if (ConstantType.TYPE_PUT.equals(mainAction)) {
count = Integer.valueOf(item.getInCount());
} else {
count = Integer.valueOf(item.getOutCount());
}
ThrInvOrderDetail thrInvOrderDetail = new ThrInvOrderDetail();
BeanUtils.copyProperties(item, thrInvOrderDetail);
thrInvOrderDetail.setOrderIdFk(billNo);
thrInvOrderDetail.setRelId(Long.parseLong(item.getThrCode()));
thrInvOrderDetail.setReCount(String.valueOf(count));
thrInvOrderDetails.add(thrInvOrderDetail);
});
} else {
list.forEach(item -> {
String thrCode = item.getThrCode();
String mainAction = item.getMainAction();
Integer count = 0;
if (ConstantType.TYPE_PUT.equals(mainAction)) {
count = Integer.valueOf(item.getInCount());
} else {
count = Integer.valueOf(item.getOutCount());
}
//通过thrCode获取到项目组套
List<BasicSkProjectDetailEntity> skProjectDetailEntityList = basicDestinyRelService.filterDestinyRelListByPId(thrCode);
if (CollectionUtil.isNotEmpty(skProjectDetailEntityList) && count > 0) {
Integer finalCount = count;
skProjectDetailEntityList.forEach(sk -> {
ThrInvOrderDetail thrInvOrderDetail = new ThrInvOrderDetail();
BeanUtils.copyProperties(item, thrInvOrderDetail);
thrInvOrderDetail.setOrderIdFk(billNo);
thrInvOrderDetail.setRelId(sk.getRelId());
Integer skCount = sk.getCount();
if (skCount != null && skCount > 0) {
thrInvOrderDetail.setReCount(String.valueOf(skCount * finalCount));
thrInvOrderDetails.add(thrInvOrderDetail);
}
});
}
});
}
}
/**
* (n)
*
* @param n
* @return
*/
public static String getBeginAndEndDateByDays(int n) {
Date date = new Date();//取时间
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE, -1);//把日期往前减少一天,若想把日期向后推一天则将负数改为正数
date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(date);
}
public static Date stringToDate(String time) {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = dateformat.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}

@ -9,6 +9,7 @@ import com.glxp.api.constant.ThirdSysConstant;
import com.glxp.api.dao.schedule.ScheduledDao;
import com.glxp.api.dao.system.SyncDataSetDao;
import com.glxp.api.dao.thrsys.ThrSystemDetailDao;
import com.glxp.api.entity.inv.InvPlaceOrderEntity;
import com.glxp.api.entity.system.ScheduledEntity;
import com.glxp.api.entity.thrsys.ThrSystemDetailEntity;
import com.glxp.api.req.basic.GetSickRequest;
@ -63,6 +64,8 @@ public class SyncThirdSysTask implements SchedulingConfigurer {
private IoOrderService orderService;
@Resource
ThrOrderService thrOrderService;
@Resource
ThrInvOrderService thrInvOrderService;
final Logger logger = LoggerFactory.getLogger(SyncHeartTask.class);
@Resource
@ -138,6 +141,10 @@ public class SyncThirdSysTask implements SchedulingConfigurer {
//下载患者信息
downloadSicker(thrSystemDetailEntity);
break;
case ThirdSysConstant.INV_ORDER_QUERY_URL:
//下载出入库明细
downloadInvOrder(thrSystemDetailEntity);
break;
default:
//其他接口暂不处理
break;
@ -171,6 +178,29 @@ public class SyncThirdSysTask implements SchedulingConfigurer {
}
}
/**
*
*
* @param thrSystemDetailEntity
*/
private void downloadInvOrder(ThrSystemDetailEntity thrSystemDetailEntity) {
//校验任务并更新redis数据执行标识
if (verifyTask(thrSystemDetailEntity)) {
getExecutor().submit(() -> {
log.info("开始下载三方出入库明细");
try {
thrInvOrderService.downloadInvOrder(thrSystemDetailEntity);
} catch (Exception e) {
log.error("下载三方出入库明细异常", ExceptionUtils.getStackTrace(e));
} finally {
updateTask(getTaskKey(thrSystemDetailEntity));
}
log.info("下载三方出入库明细完成");
});
}
}
/**
*
*

@ -1,88 +0,0 @@
package com.glxp.api.task;
import cn.hutool.core.date.DateRange;
import com.glxp.api.dao.schedule.ScheduledDao;
import com.glxp.api.entity.system.ScheduledEntity;
import com.glxp.api.req.inv.FilterInvProductRequest;
import com.glxp.api.req.system.ScheduledRequest;
import com.glxp.api.service.thrsys.ThrInvOrderService;
import lombok.extern.slf4j.Slf4j;
import org.apache.regexp.RE;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
*
*/
@Slf4j
@Component
public class ThrInvOrderTask implements SchedulingConfigurer {
@Resource
ScheduledDao scheduledDao;
@Resource
ThrInvOrderService thrInvOrderService;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(this::process, triggerContext -> {
ScheduledRequest scheduledRequest = new ScheduledRequest();
scheduledRequest.setCronName("thrInvOrderTask");
ScheduledEntity scheduled = scheduledDao.findScheduled(scheduledRequest);
if (null == scheduled) {
log.error("自动抓取第三方出入库明细生成单据定时任务未配置,请注意!");
return null;
}
String cron = scheduled.getCron();
return new CronTrigger(cron).nextExecutionTime(triggerContext);
});
}
public void process() {
log.info("自动抓取第三方出入库明细生成单据定时任务开始");
FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest();
String days = getBeginAndEndDateByDays(1);
filterInvProductRequest.setStartDate(stringToDate(days +" 00:00:00"));
filterInvProductRequest.setEndDate(stringToDate(days +" 23:59:59"));
thrInvOrderService.handleExternalThrInvOrder(filterInvProductRequest);
log.info("自动抓取第三方出入库明细生成单据定时任务结束");
}
/**
* (n)
* @param n
* @return
*/
public static String getBeginAndEndDateByDays(int n) {
Date date=new Date();//取时间
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,-1);//把日期往前减少一天,若想把日期向后推一天则将负数改为正数
date=calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(date);
}
public static Date stringToDate(String time) {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = dateformat.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}

@ -353,4 +353,15 @@
where id = #{id,jdbcType=INTEGER}
</update>
<select id="filterThrOrderDetailDetail" parameterType="com.glxp.api.req.thrsys.FilterThrInvOrderDetailRequest"
resultType="com.glxp.api.entity.thrsys.ThrInvOrderDetail">
SELECT *
FROM thr_inv_order_detail
<where>
<if test="orderIdFk != '' and orderIdFk != null">
AND orderIdFk = #{orderIdFk}
</if>
</where>
</select>
</mapper>

@ -11,6 +11,7 @@
<result column="endDate" jdbcType="TIMESTAMP" property="endDate" />
<result column="mainAction" jdbcType="VARCHAR" property="mainAction" />
<result column="billType" jdbcType="VARCHAR" property="billType" />
<result column="thirdSysFk" jdbcType="VARCHAR" property="thirdSysFk" />
<result column="deptCode" jdbcType="VARCHAR" property="deptCode" />
<result column="invCode" jdbcType="VARCHAR" property="invCode" />
<result column="spaceCode" jdbcType="VARCHAR" property="spaceCode" />
@ -23,12 +24,12 @@
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, billNo, billDate, startDate, endDate, mainAction, billType, deptCode, invCode,
id, billNo, billDate, startDate, endDate, mainAction, billType,thirdSysFk, deptCode, invCode,
spaceCode, `status`, createTime, `createUser`, updateTime, updateUser, remark
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--@mbg.generated-->
select
select
<include refid="Base_Column_List" />
from thr_inv_order
where id = #{id,jdbcType=INTEGER}
@ -40,16 +41,16 @@
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.glxp.api.entity.thrsys.ThrInvOrder" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into thr_inv_order (billNo, billDate, startDate,
endDate, mainAction, billType,
deptCode, invCode, spaceCode,
`status`, createTime, `createUser`,
insert into thr_inv_order (billNo, billDate, startDate,
endDate, mainAction, billType,thirdSysFk,
deptCode, invCode, spaceCode,
`status`, createTime, `createUser`,
updateTime, updateUser, remark
)
values (#{billNo,jdbcType=VARCHAR}, #{billDate,jdbcType=TIMESTAMP}, #{startDate,jdbcType=TIMESTAMP},
#{endDate,jdbcType=TIMESTAMP}, #{mainAction,jdbcType=VARCHAR}, #{billType,jdbcType=VARCHAR},
#{deptCode,jdbcType=VARCHAR}, #{invCode,jdbcType=VARCHAR}, #{spaceCode,jdbcType=VARCHAR},
#{status,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{createUser,jdbcType=VARCHAR},
values (#{billNo,jdbcType=VARCHAR}, #{billDate,jdbcType=TIMESTAMP}, #{startDate,jdbcType=TIMESTAMP},
#{endDate,jdbcType=TIMESTAMP}, #{mainAction,jdbcType=VARCHAR}, #{billType,jdbcType=VARCHAR},#{thirdSysFk,jdbcType=VARCHAR},
#{deptCode,jdbcType=VARCHAR}, #{invCode,jdbcType=VARCHAR}, #{spaceCode,jdbcType=VARCHAR},
#{status,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{createUser,jdbcType=VARCHAR},
#{updateTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}
)
</insert>
@ -75,6 +76,9 @@
<if test="billType != null">
billType,
</if>
<if test="thirdSysFk != null">
thirdSysFk,
</if>
<if test="deptCode != null">
deptCode,
</if>
@ -122,6 +126,9 @@
<if test="billType != null">
#{billType,jdbcType=VARCHAR},
</if>
<if test="thirdSysFk != null">
#{thirdSysFk,jdbcType=VARCHAR},
</if>
<if test="deptCode != null">
#{deptCode,jdbcType=VARCHAR},
</if>
@ -173,6 +180,9 @@
<if test="billType != null">
billType = #{billType,jdbcType=VARCHAR},
</if>
<if test="thirdSysFk != null">
thirdSysFk = #{thirdSysFk,jdbcType=VARCHAR},
</if>
<if test="deptCode != null">
deptCode = #{deptCode,jdbcType=VARCHAR},
</if>
@ -212,6 +222,7 @@
endDate = #{endDate,jdbcType=TIMESTAMP},
mainAction = #{mainAction,jdbcType=VARCHAR},
billType = #{billType,jdbcType=VARCHAR},
thirdSysFk = #{thirdSysFk,jdbcType=VARCHAR},
deptCode = #{deptCode,jdbcType=VARCHAR},
invCode = #{invCode,jdbcType=VARCHAR},
spaceCode = #{spaceCode,jdbcType=VARCHAR},
@ -223,4 +234,32 @@
remark = #{remark,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
<select id="filterThrInvOrder" parameterType="com.glxp.api.req.thrsys.FilterThrInvOrderRequest"
resultType="com.glxp.api.entity.thrsys.ThrInvOrder">
SELECT thr_inv_order.*
FROM thr_inv_order
<where>
<if test="billNo != '' and billNo != null">
AND billNo like concat('%', #{billNo}, '%')
</if>
<if test="billType != '' and billType != null">
AND billType = #{billType}
</if>
<if test="thirdSysFk != '' and thirdSysFk != null">
AND thirdSysFk = #{thirdSysFk}
</if>
<if test="startDate != null and startDate != ''">
<![CDATA[
and DATE_FORMAT(billdate, '%Y-%m-%d') >= DATE_FORMAT(#{startDate}, '%Y-%m-%d')
]]>
</if>
<if test="endDate != null and endDate != ''">
<![CDATA[
and DATE_FORMAT(billdate, '%Y-%m-%d') <= DATE_FORMAT(#{endDate}, '%Y-%m-%d')
]]>
</if>
</where>
ORDER BY thr_inv_order.billNo DESC
</select>
</mapper>

Loading…
Cancel
Save