| | |
| | | import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi; |
| | | import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderCreateReqDTO; |
| | | import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import com.mzt.logapi.context.LogRecordContext; |
| | | import com.mzt.logapi.service.impl.DiffParseFunction; |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private ErpSaleOrderApi saleOrderApi; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | } |
| | | |
| | | private List<CrmContractProductDO> validateContractProducts(List<CrmContractSaveReqVO.Product> list) { |
| | | // 1. 校验产品存在 |
| | | productService.validProductList(convertSet(list, CrmContractSaveReqVO.Product::getProductId)); |
| | | // 1. 校验物料存在且启用 |
| | | Set<Long> itemIds = convertSet(list, CrmContractSaveReqVO.Product::getItemId); |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds); |
| | | // 2. 转化为 CrmContractProductDO 列表 |
| | | return convertList(list, o -> BeanUtils.toBean(o, CrmContractProductDO.class, |
| | | item -> item.setTotalPrice(MoneyUtils.priceMultiply(item.getContractPrice(), item.getCount())))); |
| | | return convertList(list, o -> BeanUtils.toBean(o, CrmContractProductDO.class, item -> { |
| | | MdmItemRespDTO mdmItem = itemMap.get(item.getItemId()); |
| | | if (mdmItem == null) { |
| | | throw exception(PRODUCT_NOT_EXISTS); |
| | | } |
| | | item.setItemUnitId(mdmItem.getUnitMeasureId()); |
| | | item.setItemPrice(mdmItem.getSalesPrice()); |
| | | item.setTotalPrice(MoneyUtils.priceMultiply(item.getContractPrice(), item.getCount())); |
| | | })); |
| | | } |
| | | |
| | | private void calculateTotalPrice(CrmContractDO contract, List<CrmContractProductDO> contractProducts) { |
| | |
| | | List<ErpSaleOrderCreateReqDTO.Item> items = contractProducts.stream() |
| | | .map(cp -> { |
| | | ErpSaleOrderCreateReqDTO.Item item = new ErpSaleOrderCreateReqDTO.Item(); |
| | | item.setProductId(cp.getProductId()); |
| | | item.setProductId(cp.getItemId()); |
| | | item.setProductPrice(cp.getContractPrice()); |
| | | item.setCount(cp.getCount()); |
| | | return item; |