MInventoryArea.Class.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Gss
  5. * Date: 2021/6/10 0010
  6. * Time: 16:52
  7. */
  8. namespace JinDouYun\Model\Stock;
  9. use JinDouYun\Dao\GoodsManage\DGoodsBasic;
  10. use JinDouYun\Dao\GoodsManage\DSku;
  11. use JinDouYun\Dao\Stock\DInventoryArea;
  12. use JinDouYun\Dao\Stock\DWarehouse;
  13. use JinDouYun\Model\GoodsManage\MSku;
  14. use JinDouYun\Model\MBaseModel;
  15. use Mall\Framework\Core\ErrorCode;
  16. use Mall\Framework\Core\ResultWrapper;
  17. use Mall\Framework\Core\StatusCode;
  18. class MInventoryArea extends MBaseModel
  19. {
  20. private $objDInventoryArea;
  21. private $objDSku;
  22. private $objDWarehouse;
  23. private $objDGoodsBasic;
  24. private $userCenterId;
  25. private $enterpriseId;
  26. public function __construct($enterpriseId, $userCenterId = false)
  27. {
  28. $this->enterpriseId = $enterpriseId;
  29. $this->userCenterId = $userCenterId;
  30. $this->objDInventoryArea = new DInventoryArea('stock');
  31. $this->objDInventoryArea->setTable('qianniao_inventory_area_' . $enterpriseId);
  32. //查询主单位
  33. $this->objDSku = new DSku('default');
  34. $this->objDSku->setTable('qianniao_sku_'.$this->enterpriseId);
  35. // 查询仓库表
  36. $this->objDWarehouse = new DWarehouse('stock');
  37. $this->objDWarehouse->setTable('qianniao_warehouse_'.$enterpriseId);
  38. // 查询商品表
  39. $this->objDGoodsBasic = new DGoodsBasic();
  40. $this->objDGoodsBasic->setTable('qianniao_goods_basic_'.$enterpriseId);
  41. }
  42. /**
  43. * 加减库区库位
  44. */
  45. public function updateInventoryArea($params)
  46. {
  47. if(empty($params['warehouseId'])){
  48. return ResultWrapper::fail('仓库数据为空',ErrorCode::$notAllowAccess);
  49. }
  50. $areaDate = [
  51. 'warehouseId'=> $params['warehouseId'],
  52. 'materielId'=> $params['materielId'],
  53. 'merchantId'=> getArrayItem($params, 'merchantId', 0),
  54. 'areaId'=> $params['areaId'],
  55. 'areaName'=> $params['areaName'],
  56. 'areaCode'=> $params['areaCode'],
  57. 'storageLocationId'=> $params['storageLocationId'],
  58. 'storageLocationName'=> $params['storageLocationName'],
  59. 'storageLocationCode'=> $params['storageLocationCode'],
  60. 'skuId'=> $params['skuId'],
  61. 'unitName'=> $params['unitName'],
  62. 'skuName'=> $params['skuName'],
  63. ];
  64. $type = $params['type'];
  65. unset($params['type']);
  66. $beginTransactionStatus = $this->objDInventoryArea->beginTransaction();
  67. $condition = [
  68. 'warehouseId'=>$params['warehouseId'],
  69. 'areaId'=>$params['areaId'],
  70. 'storageLocationId'=>$params['storageLocationId'],
  71. 'skuId'=>$params['skuId'],
  72. 'materielId' => $params['materielId'],
  73. //'merchantId' => getArrayItem($params, 'merchantId', 0), // 目前入库库存都和商户绑定,出库和商户无关,按照skuid出库,这个地方临时注释
  74. ];
  75. $dbResult = $this->objDInventoryArea->get($condition);
  76. if($dbResult === false){
  77. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  78. }
  79. //根据type区分加减 5加,4减
  80. if($type == StatusCode::$standard){
  81. if(empty($dbResult)){ //没查到是新增
  82. $areaDate['num'] = $params['num'];
  83. $Result = $this->objDInventoryArea->insert($areaDate);
  84. if($Result === false){
  85. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  86. }
  87. return ResultWrapper::success($Result);
  88. }else{
  89. $num = $dbResult['num'];
  90. $areaDate['num'] = bcadd($num,$params['num'],8);
  91. }
  92. }
  93. if($type == StatusCode::$delete){//减
  94. if(empty($dbResult)){
  95. return ResultWrapper::fail("skuId:{$condition['skuId']} 在库位{$condition['storageLocationId']}下没有库存",ErrorCode::$notAllowAccess);
  96. }
  97. $num = $dbResult['num'];
  98. $areaDate['num'] = bcsub($num,$params['num'],8);
  99. }
  100. $Result = $this->objDInventoryArea->update($areaDate, $condition);
  101. if($Result === false){
  102. $this->objDInventoryArea->rollBack();
  103. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  104. }
  105. if($beginTransactionStatus){
  106. $this->objDInventoryArea->commit();
  107. }
  108. return ResultWrapper::success($Result);
  109. }
  110. /**
  111. * 根据skuId获取库区数量
  112. */
  113. public function getAreaDateBySkuId($params)
  114. {
  115. $date = [];
  116. // 有仓库id查询所有的,没有查询单个
  117. if(isset($params['warehouseId']) && !empty($params['warehouseId'])){
  118. $skuDate = $this->objDSku->get($params['skuId']);
  119. if($skuDate === false){
  120. return ResultWrapper::fail($this->objDSku->error(), ErrorCode::$dberror);
  121. }
  122. if(empty($skuDate)){
  123. return ResultWrapper::fail('sku数据为空',ErrorCode::$notAllowAccess);
  124. }
  125. // 用主单位skuid去查询
  126. if($skuDate['isMaster'] == StatusCode::$standard){
  127. $conditon = [
  128. 'warehouseId' => $params['warehouseId'],
  129. 'skuId' => $params['skuId'],
  130. ];
  131. $dbResult = $this->objDInventoryArea->select($conditon);
  132. if($dbResult === false){
  133. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  134. }
  135. }else{
  136. $conditon = [
  137. 'warehouseId' => $params['warehouseId'],
  138. 'materielId' => $params['basicGoodsId'],
  139. ];
  140. $dbResult = $this->objDInventoryArea->select($conditon);
  141. if($dbResult === false){
  142. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  143. }
  144. foreach ($dbResult as $key => $value){
  145. $dbResult[$key]['num'] = floor(bcdiv($value['num'],$skuDate['conversion'], 8));
  146. }
  147. }
  148. }else{
  149. $dbResult = $this->objDInventoryArea->select(['skuId'=>$params['skuId']]);
  150. if($dbResult === false){
  151. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  152. }
  153. }
  154. $date = self::formatAreaDate($dbResult);
  155. return ResultWrapper::success(array_values($date));
  156. }
  157. public function formatAreaDate($areaDate)
  158. {
  159. $date = [];
  160. if(!empty($areaDate)){
  161. //格式化数据
  162. //数据归组
  163. foreach ($areaDate as $key => $value){
  164. if( !isset($date[$value['warehouseId']]) ){
  165. //查询仓库名称
  166. $warehouseName = $this->objDWarehouse->get_field('warehouseName',['id'=>$value['warehouseId']]);
  167. if($warehouseName === false){
  168. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  169. }
  170. $date[$value['warehouseId']] = [
  171. 'warehouseId'=>$value['warehouseId'],
  172. 'warehouseName'=>$warehouseName,
  173. ];
  174. }
  175. // if( !isset($date[$value['warehouseId']]['areaDate'][$value['areaId']]) ){
  176. // $date[$value['warehouseId']]['areaDate'][$value['areaId']] = [
  177. // 'areaId'=>$value['areaId'],
  178. // 'areaName'=>$value['areaName'],
  179. // ];
  180. // }
  181. if(!isset($date[$value['warehouseId']]['areaDate'][$value['areaId']][$value['storageLocationId']])){
  182. $goodsName = $this->objDGoodsBasic->get_field('title',['id'=>$value['materielId']]);
  183. if($goodsName === false){
  184. return ResultWrapper::fail($this->objDInventoryArea->error(), ErrorCode::$dberror);
  185. }
  186. $date[$value['warehouseId']]['areaDate'][] = [
  187. 'unitName'=>$value['unitName'],
  188. 'skuName'=>$value['skuName'],
  189. 'materielName'=>$goodsName,
  190. // 'merchantName'=>$value['merchantName'],
  191. 'areaId'=>$value['areaId'],
  192. 'areaName'=>$value['areaName'],
  193. 'areaCode'=>$value['areaCode'],
  194. 'storageLocationId'=>$value['storageLocationId'],
  195. 'storageLocationName'=>$value['storageLocationName'],
  196. 'storageLocationCode'=>$value['storageLocationCode'],
  197. 'num'=>$value['num'],
  198. ];
  199. }
  200. }
  201. }
  202. return $date;
  203. }
  204. }