package com.ruoyi.warehouseBusiness.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.basicData.domain.*; import com.ruoyi.basicData.mapper.*; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.reportManagement.domain.TWhgenleg; import com.ruoyi.reportManagement.mapper.TWhgenlegMapper; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.warehouseBusiness.domain.*; import com.ruoyi.warehouseBusiness.mapper.*; import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.math.BigDecimal; import java.util.*; /** * 详情主表Service业务层处理 * * @author ruoyi * @date 2020-12-11 */ @Service public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService { @Autowired private TWhgenlegMapper tWhgenlegMapper; @Autowired private TGoodsMapper tGoodsMapper; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TCorpsMapper tCorpsMapper; @Autowired private TFeesMapper tFeesMapper; @Autowired private TWarehouseMapper tWarehouseMapper; @Autowired private TWarehouseAreaMapper tWarehouseAreaMapper; @Autowired private TEnclosureMapper tEnclosureMapper; @Autowired private TWarehouseBillsMapper tWarehouseBillsMapper; @Autowired private TWarehousebillsfeesMapper tWarehousebillsfeesMapper; @Autowired private TWarehousebillsitemsMapper tWarehousebillsitemsMapper; @Autowired private BillnoSerialServiceImpl billnoSerialServiceImpl; @Autowired private BillnoDelMapper billnoDelMapper; /** * 查询详情主表 * * @param fId 详情主表ID * @return 详情主表 */ @Override public Map selectTWarehousebillsById(Long fId) { Map map = new HashMap<>(); // 查询仓库主表数据 TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId); // 客户表 List corpsId = new ArrayList<>(); // 用户表 List sysUserList = new ArrayList<>(); // 仓库表 List warehouseList = new ArrayList<>(); // 商品 List goodsId = new ArrayList<>(); // 费用 List feesId = new ArrayList<>(); // 库区 List warehouseAreaId = new ArrayList<>(); if (!StringUtils.isNull(tWarehousebills)) { if (StringUtils.isNotNull(tWarehousebills.getfTocorpid())) { corpsId.add(tWarehousebills.getfTocorpid()); } corpsId.add(tWarehousebills.getfCorpid()); // 查询联系人 SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehousebills.getfStorekeeper()); if (StringUtils.isNotNull(sysUser)) { sysUserList.add(sysUser); } // 查询仓库 TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehousebills.getfWarehouseid()); if (StringUtils.isNotNull(tWarehouse)) { warehouseList.add(tWarehouse); } // 查询经营单位 corpsId.add(tWarehousebills.getfSbu()); map.put("warehousebills", tWarehousebills); } // 查询仓库明细从表数据 TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems(); tWarehousebillsitems.setfPid(fId); List> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems); if (StringUtils.isNotEmpty(mapList)) { for (Map wb : mapList) { /*TWhgenleg tWhgenleg = new TWhgenleg(); tWhgenleg.setfCorpid(tWarehousebills.getfCorpid()); if (StringUtils.isNotNull(wb.get("fGoodsid"))) { tWhgenleg.setfGoodsid(((Integer) wb.get("fGoodsid")).longValue()); } if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) { tWhgenleg.setfWarehouseLocationid(((Integer) wb.get("fWarehouselocid")).longValue()); } tWhgenleg.setfTrademodeid(tWarehousebills.getfTrademodeid()); tWhgenleg.setfMblno(tWarehousebills.getfMblno()); TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenleg(tWhgenleg); if (StringUtils.isNotNull(whgenleg)) { wb.put("fQtyblc", whgenleg.getfQtyblc()); }*/ if (StringUtils.isNotNull(wb.get("fGoodsid"))) { Integer fGoodsid = (Integer) wb.get("fGoodsid"); goodsId.add(fGoodsid.longValue()); } if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) { Integer fWarehouselocid = (Integer) wb.get("fWarehouselocid"); warehouseAreaId.add(fWarehouselocid.longValue()); } } map.put("warehouseBillsItem", mapList); } // 查询仓库费用明细表数据 TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees(); tWarehousebillsfees.setfPid(fId); List warehousebillsfeesDr = new ArrayList<>(); List warehousebillsfeesCr = new ArrayList<>(); List warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees); if (StringUtils.isNotEmpty(warehousebillsfees)) { for (TWarehousebillsfees fees : warehousebillsfees) { if ("C".equals(fees.getfDc())) { warehousebillsfeesCr.add(fees); } else { warehousebillsfeesDr.add(fees); } corpsId.add(fees.getfCorpid()); feesId.add(fees.getfFeeid()); } } // 查询附件表数据 TEnclosure enclosure = new TEnclosure(); enclosure.setfPid(fId); List enclosures = tEnclosureMapper.selectTEnclosureList(enclosure); if (StringUtils.isNotEmpty(enclosures)) { map.put("enclosures", enclosures); } List corpsList = new ArrayList<>(); List corpsIdList = StringUtils.integerDeduplication(corpsId); for (Long corpId : corpsIdList) { TCorps corps = tCorpsMapper.selectTCorpsById(corpId); if (StringUtils.isNotNull(corps)) { corpsList.add(corps); } } List warehouseAreaList = new ArrayList<>(); List warehouseAreaIdList = StringUtils.integerDeduplication(warehouseAreaId); for (Long warehouseArea : warehouseAreaIdList) { TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaById(warehouseArea); if (StringUtils.isNotNull(tWarehouseArea)) { warehouseAreaList.add(tWarehouseArea); } } List goodsList = new ArrayList<>(); List goodsIdList = StringUtils.integerDeduplication(goodsId); for (Long goods : goodsIdList) { TGoods tGoods = tGoodsMapper.selectTGoodsById(goods); if (StringUtils.isNotNull(tGoods)) { goodsList.add(tGoods); } } List feesList = new ArrayList<>(); List longList = StringUtils.integerDeduplication(feesId); for (Long fees : longList) { TFees tFees = tFeesMapper.selectTFeesById(fees); if (StringUtils.isNotNull(tFees)) { feesList.add(tFees); } } map.put("corps", corpsList); map.put("goodsList", goodsList); map.put("feesList", feesList); map.put("sysUser", sysUserList); map.put("warehouse", warehouseList); map.put("warehouseAreas", warehouseAreaList); map.put("warehousebillsfeesDr", warehousebillsfeesDr); map.put("warehousebillsfeesCr", warehousebillsfeesCr); map.put("dept", sysDeptMapper.selectDeptById(tWarehousebills.getfDeptid())); return map; } /** * 查询详情主表列表 * * @param tWarehousebills 详情主表 * @return 详情主表 */ @Override public List> selectWarehouseBusinessList(TWarehouseBills tWarehousebills) { return tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills); } /** * 查询导出所需主表列表 * * @param tWarehousebills 详情主表 * @return 详情主表 */ @Override public List selectTWarehousebillsList(TWarehouseBills tWarehousebills) { return tWarehouseBillsMapper.selectTWarehousebillsList(tWarehousebills); } /** * 根据条件查询总账是否存在 * * @param warehouseBills 仓库主表 * @param warehousebillsitems 仓库明细表 * @return 库存总账 */ public TWhgenleg queryTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems) { TWhgenleg tWhgenleg = new TWhgenleg(); // 客户 tWhgenleg.setfCorpid(warehouseBills.getfCorpid()); // 提单号 if ("HQZY".equals(warehouseBills.getfBilltype())) { tWhgenleg.setfMblno(warehousebillsitems.getfMblno()); } else { tWhgenleg.setfMblno(warehouseBills.getfMblno()); } // 库区 tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid()); // 货物品名 tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid()); // 贸易方式 tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid()); return tWhgenlegMapper.selectTWhgenleg(tWhgenleg); } /** * 新增库存总账 * * @param warehouseBills 仓库主表 * @param warehousebillsitems 仓库明细表 * @return 结果 */ @Transactional public int instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, SysUser user) { TWhgenleg tWhgenleg = new TWhgenleg(); if ("SJRK".equals(warehouseBills.getfBilltype()) || "HQZY".equals(warehouseBills.getfBilltype())) { tWhgenleg.setfOriginalbilldate(new Date()); } // 客户 tWhgenleg.setfCorpid(warehouseBills.getfCorpid()); // 提单号 tWhgenleg.setfMblno(warehouseBills.getfMblno()); // 原始单号 tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno()); // 仓库 tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid()); // 库区 tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid()); // 货物品名 tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid()); // 计费方式 tWhgenleg.setfBillingway(warehousebillsitems.getfBillingway()); // 仓储计费日期 tWhgenleg.setfChargedate(warehousebillsitems.getfChargedate()); // 贸易方式 tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid()); // 入库数 tWhgenleg.setfQtyd(warehousebillsitems.getfQty()); // 入库尺码 tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn()); // 唛头 tWhgenleg.setfMarks(warehousebillsitems.getfMarks()); // 入库毛重 tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight()); // 入库净重 tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight()); // 入库箱号 tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno()); // 创建人 tWhgenleg.setCreateBy(user.getUserName()); // 创建人 tWhgenleg.setCreateTime(new Date()); // 状态 tWhgenleg.setfStatus("T"); // 结余件数 tWhgenleg.setfQtyblc(warehousebillsitems.getfQty()); System.out.println("主表新增:" + warehouseBills.toString()); System.out.println("要添加的总账:" + tWhgenleg.toString()); return tWhgenlegMapper.insertTWhgenleg(tWhgenleg); } @Transactional public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) { Map map = new HashMap<>(); map.put("whgenlegId", whgenlegId); map.put("billType", billtype); map.put("warehousebillsitems", warehousebillsitems); return tWhgenlegMapper.updateTWhgenlegData(map); } /** * 新增详情主表 * * @param tWarehouseBills 仓库主表 * @param tWarehousebillsfeesCr 仓库费付款用明细表 * @param tWarehousebillsfeesDr 仓库费收 * 款用明细表 * @param tWarehousebillsitems 仓库货物明细表 * @param loginUser 当前登陆人 * @param billsType 判断标识 * @return 结果 */ @Override @Transactional public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr , String tWarehousebillsitems, String tWhgenleg, LoginUser loginUser, String billsType) { Long fPid = null; TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class); if (StringUtils.isNull(warehouseBills.getfId())) { // 如果是新数据 warehouseBills.setCreateBy(loginUser.getUser().getUserName()); warehouseBills.setfBilltype(billsType); warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId()); /*// 提交时: 生流水号 if ("6".equals(warehouseBills.getfBillstatus()) || "7".equals(warehouseBills.getfBillstatus())) { // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate()); warehouseBills.setfBillno(billNo); // 存货编码 Date time = new Date(); String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time); warehouseBills.setfBscorpno(bscorpno); }*/ // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate()); warehouseBills.setfBillno(billNo); // 存货编码 Date time = new Date(); String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time); warehouseBills.setfBscorpno(bscorpno); tWarehouseBillsMapper.insertTWarehousebills(warehouseBills); fPid = warehouseBills.getfId(); } else { fPid = warehouseBills.getfId(); warehouseBills.setUpdateBy(loginUser.getUser().getUserName()); warehouseBills.setUpdateTime(new Date()); tWarehouseBillsMapper.updateTWarehousebills(warehouseBills); tWarehousebillsitemsMapper.deleteByFPid(fPid); tWarehousebillsfeesMapper.deleteByFPid(fPid); tEnclosureMapper.deleteByFPid(fPid); } // 查询库存总账 库存明细不为空 并且 入库不是暂存状态 进行库存总账的查询新增修改 if (tWarehousebillsitems != null && !"2".equals(warehouseBills.getfBillstatus())) { JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems); List warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class); int i = 1; for (TWarehousebillsitems wbItem : warehousebillsitemsList) { // 查询总账是否存在 TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, wbItem); // 入库数特殊不判断入账 if ("SJCK".equals(billsType)) { // 出库 查询 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 if ("6".equals(warehouseBills.getfBillstatus())) { // 库存 < 出库件数 提示库存不足 if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType); } } } else if ("CKDB".equals(billsType)) { // 调拨查询 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 if ("6".equals(warehouseBills.getfBillstatus())) { if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } else { // 2、 库存足够 先 进行出库操作 updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK"); } // 3、 进行入库操作 查询是否存在库存 warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方 TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem); if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存 instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser()); } else { // 4、 存在 进行跟新库存 if ("6".equals(warehouseBills.getfBillstatus())) { updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK"); } } } } } else if ("HQZY".equals(billsType)) { // 货转 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 if ("6".equals(warehouseBills.getfBillstatus())) { if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } else { // 2、 库存足够 先 进行出库操作 updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK"); } // 3、 进行入库操作 查询是否存在库存 warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方 TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem); if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存 instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser()); } else { // 4、 存在 进行跟新库存 updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK"); } } } } i++; } } // 库存明细添加 if (tWarehousebillsitems != null) { JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems); List warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class); int notInStorage = 0; int Stored = 0; for (TWarehousebillsitems wbItem : warehousebillsitemsList) { if (wbItem.getfBillstatus() == null) { wbItem.setfBillstatus("1"); notInStorage++; } else if (wbItem.getfBillstatus().equals("6")) { wbItem.setfBillstatus("6"); Stored++; } else if (wbItem.getfBillstatus().equals("1")) { wbItem.setfBillstatus("1"); notInStorage++; } wbItem.setfPid(fPid); wbItem.setfMarks(warehouseBills.getfMarks()); wbItem.setfMblno(warehouseBills.getfMblno()); wbItem.setCreateBy(loginUser.getUser().getUserName()); wbItem.setCreateTime(new Date()); tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem); } // 录入库存明细整体状态 TWarehouseBills warehouseBill = new TWarehouseBills(); warehouseBill.setfId(fPid); if (Objects.equals(Stored, 0)) { // 未入库 warehouseBill.setfItemsStatus("1"); } else if (Objects.equals(notInStorage, 0)) { // 已入库 warehouseBill.setfItemsStatus("6"); } else { // 有已入库、有未入库 warehouseBill.setfItemsStatus("2"); } tWarehouseBillsMapper.updateTWarehousebills(warehouseBill); } // 附件添加 if (StringUtils.isNotNull(tWhgenleg)) { JSONArray jsonDrArray = JSONArray.parseArray(tWhgenleg); List tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class); for (TEnclosure tEnclosure : tEnclosureList) { tEnclosure.setfPid(fPid); tEnclosure.setCreateBy(loginUser.getUser().getUserName()); tEnclosure.setCreateTime(new Date()); tEnclosureMapper.insertTEnclosure(tEnclosure); } } // 收款明细添加 if (tWarehousebillsfeesDr != null) { JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr); List warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class); for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) { // 检验 数量*单价=金额 wbDr.setfPid(fPid); wbDr.setfDc("D"); wbDr.setCreateBy(loginUser.getUser().getUserName()); wbDr.setCreateTime(new Date()); tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr); } } // 付款明细添加 if (tWarehousebillsfeesCr != null) { JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr); List warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class); for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) { wbCr.setfPid(fPid); wbCr.setfDc("C"); wbCr.setCreateBy(loginUser.getUser().getUserName()); wbCr.setCreateTime(new Date()); tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr); } } if ("2".equals(warehouseBills.getfBillstatus())) { return AjaxResult.success(warehouseBills); } return AjaxResult.success(); } /** * 入库详情入账 * * @param warehouseBills 主表 * @param warehousebillsitems 明细 * @param whgenleg 附件 * @param loginUser 当前登录人 * @param billsType 状态 * @return 结果 */ @Override @Transactional public AjaxResult addCredit(String warehouseBills, String warehousebillsitems, String whgenleg, LoginUser loginUser, String billsType) { Long fPid = null; if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) { return AjaxResult.error("未找到主表信息"); } if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) { return AjaxResult.error("未找到入账信息"); } TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class); if (StringUtils.isNotNull(tWarehouseBills.getfId())) { tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName()); tWarehouseBills.setUpdateTime(new Date()); tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills); fPid = tWarehouseBills.getfId(); tEnclosureMapper.deleteByFPid(fPid); } else { // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo(billsType, tWarehouseBills.getfBsdate()); tWarehouseBills.setfBillno(billNo); // 存货编码 Date time = new Date(); String bscorpno = billnoSerialServiceImpl.getCorpNo(tWarehouseBills.getfCorpid(), time); tWarehouseBills.setfBscorpno(bscorpno); tWarehouseBills.setCreateBy(loginUser.getUser().getUserName()); tWarehouseBills.setCreateTime(new Date()); tWarehouseBills.setfBilltype("SJRK"); tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId()); // 已入账 tWarehouseBills.setfBillstatus("2"); tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills); fPid = tWarehouseBills.getfId(); } JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems); List warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class); for (TWarehousebillsitems item : warehousebillsitemsList) { // 唛头添加 item.setfMarks(tWarehouseBills.getfMarks()); item.setfBillingway(tWarehouseBills.getfBillingway()); item.setfChargedate(tWarehouseBills.getfChargedate()); TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, item); if (StringUtils.isNotNull(tWhgenle)) { int i = updateTWhgenlegData(item, tWhgenle.getfId(), billsType); if (i <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("更新库存总账失败"); } } else { if (instalTWhgenleg(tWarehouseBills, item, loginUser.getUser()) <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("新增库存总账失败"); } } item.setfPid(fPid); item.setfBillstatus("6"); item.setCreateBy(loginUser.getUser().getUserName()); item.setCreateTime(new Date()); int num = 0; if (StringUtils.isNotNull(item.getfId())) { num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item); } else { num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(item); } if (num <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("新增库存明细失败"); } } // 查询所有库存明细 修改仓库主表状态 int notInStorage = 0; int Stored = 0; TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems(); tWarehousebillsitems.setfPid(fPid); List warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems); for (TWarehousebillsitems item : warehousebillsitemsList1) { if (item.getfBillstatus() == null) { notInStorage++; } else if (item.getfBillstatus().equals("6")) { Stored++; } else if (item.getfBillstatus().equals("1")) { notInStorage++; } } // 录入库存明细整体状态 TWarehouseBills warehouseBill = new TWarehouseBills(); warehouseBill.setfId(fPid); if (Objects.equals(Stored, 0)) { // 未入库 warehouseBill.setfItemsStatus("1"); } else if (Objects.equals(notInStorage, 0)) { // 已入库 warehouseBill.setfItemsStatus("6"); } else { // 有已入库、有未入库 warehouseBill.setfItemsStatus("2"); } tWarehouseBillsMapper.updateTWarehousebills(warehouseBill); if (StringUtils.isNotNull(whgenleg) && !"[]".equals(whgenleg)) { JSONArray jsonDrArray = JSONArray.parseArray(whgenleg); List tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class); for (TEnclosure tEnclosure : tEnclosureList) { tEnclosure.setfPid(fPid); tEnclosure.setCreateBy(loginUser.getUser().getUserName()); tEnclosure.setCreateTime(new Date()); tEnclosureMapper.insertTEnclosure(tEnclosure); } } // 添加成功 主键返回 前台 return AjaxResult.success("成功", fPid); } /** * 出库、调拨、货转 确认 * * @param warehouseBills * @param warehousebillsitems * @param loginUser * @param billsType * @return */ @Override @Transactional public AjaxResult updateCredit(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) { Long fPid = null; Map map = new HashMap<>(); if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) { return AjaxResult.error("未找到主表信息"); } if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) { return AjaxResult.error("未找到入账信息"); } TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class); if (StringUtils.isNotNull(tWarehouseBills.getfId())) { tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName()); tWarehouseBills.setUpdateTime(new Date()); tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills); fPid = tWarehouseBills.getfId(); tEnclosureMapper.deleteByFPid(fPid); } else { // 业务编码 String billNo = billnoSerialServiceImpl.getBillNo(billsType, tWarehouseBills.getfBsdate()); tWarehouseBills.setfBillno(billNo); // 存货编码 Date time = new Date(); String bscorpno = billnoSerialServiceImpl.getCorpNo(tWarehouseBills.getfCorpid(), time); tWarehouseBills.setfBscorpno(bscorpno); tWarehouseBills.setCreateBy(loginUser.getUser().getUserName()); tWarehouseBills.setCreateTime(new Date()); tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId()); // 已入账 tWarehouseBills.setfBillstatus("2"); tWarehouseBills.setfBilltype(billsType); tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills); fPid = tWarehouseBills.getfId(); } JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems); List warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class); int i = 1; List feesList = new ArrayList<>(); List warehousebillsfees = new ArrayList<>(); for (TWarehousebillsitems wbItem : warehousebillsitemsList) { // 唛头添加 wbItem.setfMarks(tWarehouseBills.getfMarks()); // 查询总账是否存在 TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, wbItem); // 入库数特殊不判断入账 if ("SJCK".equals(billsType)) { // 出库 查询 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 // 库存 < 出库件数 、 if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } // 更新库存总账 updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType); TWarehouseAgreementServiceImpl tWarehouseAgreementService = new TWarehouseAgreementServiceImpl(); long dateDay = DateUtils.getDateDay(tWarehouseBills.getfBsdate(), wbItem.getfBsdate()); long fCorpid = tWarehouseBills.getfCorpid(); TGoods tGoods = tGoodsMapper.selectTGoodsById(wbItem.getfGoodsid()); long fGoodsid = tGoods.getfTypeid(); long fBillingway = wbItem.getfBillingway(); long fQty = wbItem.getfQty(); // 计算仓储费明细 Map objectMap = tWarehouseAgreementService.getCarryingCost(fCorpid, fGoodsid, dateDay, fBillingway, fQty); if (StringUtils.isNull(objectMap)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行没有维护出库明细的仓储协议,操作终止"); } TWarehousebillsfees fees = new TWarehousebillsfees(); Long feeId = (Long) objectMap.get("feeId"); BigDecimal amt = (BigDecimal) objectMap.get("amt"); fees.setfPid(fPid); fees.setfFeeid(feeId); fees.setfFeeUnitid(fBillingway); fees.setfQty(new BigDecimal(1)); fees.setfUnitprice(amt); fees.setfAmount(amt); warehousebillsfees.add(fees); TFees tFees = tFeesMapper.selectTFeesById(feeId); if (StringUtils.isNotNull(tFees)) { feesList.add(tFees); } } } else if ("CKDB".equals(billsType)) { // 调拨查询 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } else { // 2、 库存足够 先 进行出库操作 updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK"); } // 3、 进行入库操作 查询是否存在库存 tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方 TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem); if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存 instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser()); } else { // 4、 存在 进行跟新库存 updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK"); } } } else if ("HQZY".equals(billsType)) { // 货转 if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存为空"); } else { // 非空修改库存总账 if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细第" + i + "行库存不足"); } else { // 2、 库存足够 先 进行出库操作 updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK"); } // 3、 进行入库操作 查询是否存在库存 tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方 TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem); if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存 instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser()); } else { // 4、 存在 进行跟新库存 updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK"); } } } i++; wbItem.setfPid(fPid); wbItem.setfBillstatus("6"); wbItem.setfBsdate(tWarehouseBills.getfBsdate()); wbItem.setCreateBy(loginUser.getUser().getUserName()); wbItem.setCreateTime(new Date()); int num = 0; if (StringUtils.isNotNull(wbItem.getfId())) { num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem); } else { num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem); } if (num <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("库存明细更新失败"); } } // 查询所有库存明细 修改仓库主表状态 int notInStorage = 0; int Stored = 0; TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems(); tWarehousebillsitems.setfPid(fPid); List warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems); for (TWarehousebillsitems item : warehousebillsitemsList1) { if (item.getfBillstatus() == null) { notInStorage++; } else if (item.getfBillstatus().equals("6")) { Stored++; } else if (item.getfBillstatus().equals("1")) { notInStorage++; } } // 录入库存明细整体状态 TWarehouseBills warehouseBill = new TWarehouseBills(); warehouseBill.setfId(fPid); if (Objects.equals(Stored, 0)) { // 未入库 warehouseBill.setfItemsStatus("1"); } else if (Objects.equals(notInStorage, 0)) { // 已入库 warehouseBill.setfItemsStatus("6"); } else { // 有已入库、有未入库 warehouseBill.setfItemsStatus("2"); } tWarehouseBillsMapper.updateTWarehousebills(warehouseBill); map.put("fPid", fPid); map.put("fees", feesList); map.put("warehousebillsfees", warehousebillsfees); // 添加成功 主键返回 前台 return AjaxResult.success("成功", map); } // 入库 收费明细 校验 public Long check(BigDecimal number, BigDecimal unitPrice) { BigDecimal result1 = number.multiply(unitPrice); // 保留两位小数且四舍五入 result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP); // 转换去掉小数点 String result = result1.toString().replace(".", ""); return Long.valueOf(result); } /** * 修改详情主表 * * @param tWarehousebills 详情主表 * @return 结果 */ @Override public int updateTWarehousebills(TWarehouseBills tWarehousebills) { tWarehousebills.setUpdateTime(DateUtils.getNowDate()); return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills); } /** * 批量删除详情主表 * * @param fIds 需要删除的详情主表ID * @return 结果 */ @Override public int deleteTWarehousebillsByIds(Long[] fIds) { // 取出业务编号、 放入 billno_del for (Long id : fIds) { // 1、查询主表信息 TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id); // 2、业务编号、客存编号 放入 billno_del BillnoDel billnoDel = new BillnoDel(); billnoDel.setBillType(tWarehousebills.getfBilltype()); billnoDel.setBillNo(tWarehousebills.getfBillno()); billnoDelMapper.insertBillnoDel(billnoDel); } return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds); } /** * 删除详情主表信息 * * @param fId 详情主表ID * @return 结果 */ @Override public int deleteTWarehousebillsById(Long fId) { return tWarehouseBillsMapper.deleteTWarehousebillsById(fId); } @Override public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) { return null; } @Override public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) { return null; } @Override public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) { // 查询 仓库主表信息、库存明细信息 TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId); // 修改主表信息 tWarehousebills.setUpdateBy(loginUser.getUser().getUserName()); tWarehousebills.setUpdateTime(new Date()); tWarehousebills.setfBillstatus("3"); //撤销状态 tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills); // 查询库存明细从表数据 TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems(); tWarehousebillsitems.setfPid(fId); List warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems); // 撤销 库存总账 if (StringUtils.isNotEmpty(warehousebillsitems)) { int i = 1; for (TWarehousebillsitems wb : warehousebillsitems) { // 查询库存总账 TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb); if ("SJRKRevoke".equals(billsType)) { // 撤销 入库 if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数 updateTWhgenlegData(wb, tWhgenle.getfId(), billsType); } else { // 撤销数>结余数 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库 if (StringUtils.isNotNull(tWhgenle)) { // 非空 updateTWhgenlegData(wb, tWhgenle.getfId(), billsType); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行未查询到库存信息"); } } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销 Long fCorpid = tWarehousebills.getfCorpid();// 原货权方 Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方 // 1、新货权方撤销入库 // 查询库存总账 tWarehousebills.setfCorpid(fTocorpid); TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb); if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) { updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke"); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } // 2、原货权方撤销出库 // 查询库存总账 tWarehousebills.setfCorpid(fCorpid); TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb); updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke"); } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke Long fCorpid = tWarehousebills.getfCorpid();// 原货权方 Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方 // 1、新货权方撤销入库 // 查询库存总账 tWarehousebills.setfCorpid(fTocorpid); TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb); if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) { updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke"); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } // 2、原货权方撤销出库 // 查询库存总账 tWarehousebills.setfCorpid(fCorpid); TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb); updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke"); } i++; } } return AjaxResult.success(); } /** * 撤销入账 * * @param warehouseBills 主表 * @param warehousebillsitems 明细 * @param loginUser 当前登录人 * @param billsType 状态 * @return 结果 */ @Override @Transactional public AjaxResult revokeTWarehousebillsById1(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) { Long fPid = null; if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) { return AjaxResult.error("未找到主表信息"); } if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) { return AjaxResult.error("未找到入账信息"); } TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class); fPid = tWarehousebills.getfId(); JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems); List warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class); if (StringUtils.isNotEmpty(warehousebillsitemsList)) { int i = 1; for (TWarehousebillsitems wb : warehousebillsitemsList) { // 查询库存总账 TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb); if ("SJRKRevoke".equals(billsType)) { // 撤销 入库 if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数 updateTWhgenlegData(wb, tWhgenle.getfId(), billsType); } else { // 撤销数>结余数 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库 if (StringUtils.isNotNull(tWhgenle)) { // 非空 updateTWhgenlegData(wb, tWhgenle.getfId(), billsType); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行未查询到库存信息"); } } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销 Long fCorpid = tWarehousebills.getfCorpid();// 原货权方 Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方 // 1、新货权方撤销入库 // 查询库存总账 tWarehousebills.setfCorpid(fTocorpid); TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb); if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) { updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke"); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } // 2、原货权方撤销出库 // 查询库存总账 tWarehousebills.setfCorpid(fCorpid); TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb); updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke"); } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke Long fCorpid = tWarehousebills.getfCorpid();// 原货权方 Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方 // 1、新货权方撤销入库 // 查询库存总账 tWarehousebills.setfCorpid(fTocorpid); TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb); if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) { updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke"); } else { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("第" + i + "行撤销数大于库存结余数"); } // 2、原货权方撤销出库 // 查询库存总账 tWarehousebills.setfCorpid(fCorpid); TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb); updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke"); } i++; wb.setfBillstatus("1"); wb.setUpdateBy(loginUser.getUser().getUserName()); wb.setUpdateTime(new Date()); if (tWarehousebillsitemsMapper.updateTWarehousebillsitems(wb) <= 0) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("新增库存明细失败"); } } } // 查询所有库存明细 修改仓库主表状态 int notInStorage = 0; int Stored = 0; TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems(); tWarehousebillsitems.setfPid(fPid); List warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems); for (TWarehousebillsitems item : warehousebillsitemsList1) { if (item.getfBillstatus() == null) { notInStorage++; } else if (item.getfBillstatus().equals("6")) { Stored++; } else if (item.getfBillstatus().equals("1")) { notInStorage++; } } // 录入库存明细整体状态 TWarehouseBills warehouseBill = new TWarehouseBills(); warehouseBill.setfId(fPid); if (Objects.equals(Stored, 0)) { // 未入库 warehouseBill.setfItemsStatus("1"); } else if (Objects.equals(notInStorage, 0)) { // 已入库 warehouseBill.setfItemsStatus("6"); } else { // 有已入库、有未入库 warehouseBill.setfItemsStatus("2"); } tWarehouseBillsMapper.updateTWarehousebills(warehouseBill); return AjaxResult.success(); } }